[
  {
    "path": "README.md",
    "content": "Maverix\n=======\n\n![Maverix](http://screenisland.com/maverix/maverix.png)\n\n### Demo (Use Webkit or Blink Rendering Engine)\nhttp://screenisland.com/maverix/\n\n### What is Maverix?\n\nMaverix is a maccish bootstrap theme and application boilerplate. It gives your web-apps a native look and feel and bundles AngularJS and other components such as jQuery, Flot and rangeslider.js\n\nIt is perfect to be used for apps that are based on HTML App Containers such as:\n\n- [MacGap](https://github.com/maccman/macgap)\n- [Node-Webkit](https://github.com/rogerwang/node-webkit)\n- [Github Atom Shell](https://github.com/atom/atom-shell)\n- [Adobe Brackets Shell](https://github.com/adobe/brackets-shell)\n\n### Design Decisions\nClosest possible to native\nAll controls and Elements are carefully designed to perfectly fit into the native mac environment.\n\n#### Non Responsive (for now...)\nDesktop Apps don't need to run on thousands of different devices and viewports. You are the master of setting a minimum-viewport and the app won't get smaller than this. If you are using Maverix Theme in a traditional web-app it is also okay for Admin Backends that don't need responsive layout.\n\n#### Built on Bootstrap and Less\nTwitters Bootstrap comes bundled with tons of useful styles and add ons and allows beginners and masters to get started quickly (grid positioning, etc.). The maverix styles are enhancing bootstrap and are written in less.css\n\n#### Webkit first\nMaverix Theme is primarily made to enable app container based web-apps to look like native OS X Apps. So webkit is the primary engine when releasing new components. However this doesn't mean that other browsers are totally unsupported. Maverix Theme is tested on Safari, Firefox and Chrome on OS X.\n\n#### Bundled with AngularJS\nAngularJS is one of the best Javascript App Frameworks available today and so Maverix Theme comes bundled with AngularJS including fully working routing to get you started fast. Anyways, AngularJS usage is optional.\n\n### Roadmap\n- Bugfix requests are priority one.\n- New Features will be added as far as they make sense.\n- If demand is high for responsive design I will add it.\n\n### Bugs\nUse the [Maverix Github Issue Tracker](https://github.com/tschundeee/maverix/issues).\nYou can also reach out to me at [b.rahnema@gmail.com](mailto:b.rahnema@gmail.com?subject=Maverix)\n\n### Feedback\nFeedback is always welcome.\n\n### License\nThe MIT License (MIT)\n\nCopyright (c) 2016 Bijan Rahnema\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": "maverix-theme/app/img/.gitkeep",
    "content": ""
  },
  {
    "path": "maverix-theme/app/js/app.js",
    "content": "'use strict';\n\n\n// Declare app level module which depends on filters, and services\nangular.module('myApp', [\n    'ngRoute',\n    'myApp.filters',\n    'myApp.services',\n    'myApp.directives',\n    'myApp.controllers'\n]).\n    config(['$routeProvider', function ($routeProvider) {\n        $routeProvider.when('/maverix', {templateUrl: 'app/partials/maverix.html', controller: 'MaverixCtrl'});\n        $routeProvider.when('/tables', {templateUrl: 'app/partials/tables.html', controller: 'TablesCtrl'});\n        $routeProvider.when('/modals', {templateUrl: 'app/partials/modals.html', controller: 'ModalsCtrl'});\n        $routeProvider.when('/controls', {templateUrl: 'app/partials/controls.html', controller: 'ControlsCtrl'});\n        $routeProvider.when('/icons', {templateUrl: 'app/partials/icons.html', controller: 'IconsCtrl'});\n        $routeProvider.when('/type', {templateUrl: 'app/partials/type.html', controller: 'TypeCtrl'});\n        $routeProvider.when('/charts', {templateUrl: 'app/partials/charts.html', controller: 'ChartCtrl'});\n        $routeProvider.when('/forms', {templateUrl: 'app/partials/forms.html', controller: 'FormsCtrl'});\n        $routeProvider.when('/view1', {templateUrl: 'app/partials/partial1.html', controller: 'MyCtrl1'});\n        $routeProvider.when('/view2', {templateUrl: 'app/partials/partial2.html', controller: 'MyCtrl2'});\n        $routeProvider.otherwise({redirectTo: '/view1'});\n    }]);\n"
  },
  {
    "path": "maverix-theme/app/js/controllers.js",
    "content": "'use strict';\n\n/* Controllers */\n\nangular.module('myApp.controllers', [])\n    .controller('MaverixCtrl', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Maverix Theme Guide\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/screen_rulers_glossy.png\";\n        $scope.$parent.showTopToggle = false;\n    }])\n    .controller('ChartCtrl', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Charts\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/chart.png\";\n        $scope.$parent.showTopToggle = false;\n    }])\n    .controller('TypeCtrl', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Typography\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/cutting_pad.png\";\n        $scope.$parent.showTopToggle = false;\n    }])\n    .controller('IconsCtrl', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Icons\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/box_address.png\";\n        $scope.$parent.showTopToggle = false;\n    }])\n    .controller('TablesCtrl', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Tables\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/document-plaid-pen.png\";\n        $scope.$parent.showTopToggle = false;\n    }])\n    .controller('ModalsCtrl', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Modals\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/fullscreen.png\";\n        $scope.$parent.showTopToggle = false;\n    }])\n    .controller('ControlsCtrl', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Controls\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/button_blue_add.png\";\n        $scope.$parent.showTopToggle = false;\n    }])\n    .controller('FormsCtrl', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Forms\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/tablet.png\";\n        $scope.$parent.showTopToggle = false;\n\n    }])\n    .controller('MyCtrl1', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Maverix Theme\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/screen_aqua_glossy.png\";\n        $scope.$parent.showTopToggle = true;\n\n    }])\n    .controller('MyCtrl2', ['$scope', function ($scope) {\n        $scope.$parent.title = \"Warnings\";\n        $scope.$parent.img = \"img/iconset-addictive-flavour-set/png/moleskine_black.png\";\n        $scope.$parent.showTopToggle = false;\n    }])\n    .controller('AppCtrl', ['$scope', '$location', function ($scope, $location) {\n        $scope.isActive = function (viewLocation) {\n            return viewLocation === $location.path();\n        };\n\n        $scope.title = \"Maverix Theme\";\n        $scope.subNav1 = 0;\n        $scope.img = \"img/iconset-addictive-flavour-set/png/screen_aqua_glossy.png\";\n        $scope.showTopToggle = false;\n    }]);\n"
  },
  {
    "path": "maverix-theme/app/js/directives.js",
    "content": "'use strict';\n\n/* Directives */\n\n\nangular.module('myApp.directives', []).\n  directive('appVersion', ['version', function(version) {\n    return function(scope, elm, attrs) {\n      elm.text(version);\n    };\n  }]);\n"
  },
  {
    "path": "maverix-theme/app/js/filters.js",
    "content": "'use strict';\n\n/* Filters */\n\nangular.module('myApp.filters', []).\n  filter('interpolate', ['version', function(version) {\n    return function(text) {\n      return String(text).replace(/\\%VERSION\\%/mg, version);\n    };\n  }]);\n"
  },
  {
    "path": "maverix-theme/app/js/services.js",
    "content": "'use strict';\n\n/* Services */\n\n\n// Demonstrate how to register services\n// In this case it is a simple value service.\nvar myModule = angular.module('myApp.services', []).\n    value('version', '0.1');"
  },
  {
    "path": "maverix-theme/app/partials/.gitkeep",
    "content": ""
  },
  {
    "path": "maverix-theme/app/partials/charts.html",
    "content": "<div class=\"row\">\n    <div class=\"col-md-12\">\n        <h2>Charts</h2>\n\n        <div id=\"placeholder\" class=\"demo-placeholder\" style=\"width: 600px; height: 300px;\"></div>\n\n        <hr/>\n\n        <div id=\"piechart\" class=\"demo-placeholder\" style=\"width: 600px; height: 300px;\"></div>\n\n        <p class=\"indent\">Maverix Theme is integrated with the awesome <a href=\"http://www.flotcharts.org\"\n                                                                          target=\"_blank\">Flot\n            Charts</a> Library. <a class=\"btn btn-help\" href=\"https://github.com/flot/flot/blob/master/API.md\"\n                                   target=\"_blank\"><span class=\"entypo-help\"></span></a></p>\n    </div>\n</div>\n\n<script>\n\n\n    // We use an inline data source in the example, usually data would\n    // be fetched from a server\n\n    var data = [],\n            totalPoints = 300;\n\n    function getRandomData() {\n\n        if (data.length > 0)\n            data = data.slice(1);\n\n        // Do a random walk\n\n        while (data.length < totalPoints) {\n\n            var prev = data.length > 0 ? data[data.length - 1] : 50,\n                    y = prev + Math.random() * 10 - 5;\n\n            if (y < 0) {\n                y = 0;\n            } else if (y > 100) {\n                y = 100;\n            }\n\n            data.push(y);\n        }\n\n        // Zip the generated y values with the x values\n\n        var res = [];\n        for (var i = 0; i < data.length; ++i) {\n            res.push([i, data[i]])\n        }\n\n        return res;\n    }\n\n    // Set up the control widget\n\n    var updateInterval = 24;\n\n    var plot = $.plot(\"#placeholder\", [ getRandomData() ], {\n        series: {\n            shadowSize: 0,\t// Drawing is faster without shadows\n            color: \"#77B1DE\"\n        },\n        yaxis: {\n            min: 0,\n            max: 100\n        },\n        xaxis: {\n            show: false\n        },\n        grid: {\n            backgroundColor: \"#F5F5F5\",\n            borderWidth: 1,\n            borderColor: \"#E0E0E0\"\n        }\n    });\n\n    function update() {\n\n        plot.setData([getRandomData()]);\n\n        // Since the axes don't change, we don't need to call plot.setupGrid()\n\n        plot.draw();\n        clearTimeout(update);\n        setTimeout(update, updateInterval);\n    }\n\n    update();\n</script>\n\n\n\n<script>\n\n    var pieData = [],\n            series = Math.floor(Math.random() * 6) + 3;\n\n    for (var i = 0; i < series; i++) {\n        pieData[i] = {\n            label: \"Series\" + (i + 1),\n            data: Math.floor(Math.random() * 100) + 1\n        }\n    }\n\n\n    $.plot('#piechart', pieData, {\n        series: {\n            pie: {\n                show: true\n            }\n        },\n        grid: {\n            hoverable: true,\n            clickable: true\n        }\n    });\n</script>"
  },
  {
    "path": "maverix-theme/app/partials/controls.html",
    "content": "<div class=\"row\">\n    <div class=\"col-sm-12\">\n\n    <h2>Rangeslider</h2>\n\n    <p>\n        <input type=\"range\"/>\n        <script>\n            $('input[type=\"range\"]').rangeslider({\n                // Feature detection\n                polyfill: false\n            });\n        </script>\n    </p>\n\n    <h2>Toolbar + Buttons</h2>\n\n    <div class=\"toolbar\">\n        <div style=\"float: left\"><a class=\"toolbar-button\" href=\"\"><span class=\"entypo-plus\"></span></a>\n            <a class=\"toolbar-button\" href=\"\"><span class=\"entypo-minus\"></span></a>\n            <a class=\"toolbar-button\" href=\"\">Close</a></div>\n        <div style=\"float: right\">\n                <span class=\"search-input\">\n                    <input type=\"search\" placeholder=\"Webkit Search\" results=\"5\"/>\n                </span>\n        </div>\n\n    </div>\n    <hr/>\n    <div class=\"toolbar\">\n        <div style=\"float: left\"><a class=\"toolbar-button\" href=\"\"><span class=\"entypo-plus\"></span></a>\n            <a class=\"toolbar-button\" href=\"\"><span class=\"entypo-minus\"></span></a>\n            <a class=\"toolbar-button\" href=\"\">Close</a></div>\n        <div style=\"float: right\">\n                <span class=\"search-input\">\n                    <span class=\"entypo-search\"></span>\n                    <input type=\"text\" class=\"mvx-search\" placeholder=\"Non Webkit Search\"/>\n                </span>\n        </div>\n\n    </div>\n\n    <hr/>\n\n    <h2>Tweaked Native Webkit Search Input (Don't use on non webkit.)</h2>\n    <input type=\"search\" results=\"5\"/>\n\n    <hr/>\n    <h2>Cross Browser Search Input</h2>\n        <span class=\"search-input\">\n            <span class=\"entypo-search\"></span>\n            <input type=\"text\" class=\"mvx-search\" placeholder=\"Filter Warnings\"/>\n        </span>\n\n\n        <h2>Webkit Default Button</h2>\n        <button>Default Webkit Button</button>\n\n    <h2>Toggles</h2>\n\n    <div class=\"osx-switch\">\n        <span class=\"osx-switch-label osx-switch-label-active\">ON</span>\n        <span class=\"osx-switch-label osx-switch-label-inactive\">OFF</span>\n        <label class=\"switch-light switch-candy\" onclick=\"\">\n            <input type=\"checkbox\">\n            <a></a>\n        </label>\n    </div>\n\n    <div class=\"ui-switch on\">\n        <div class=\"toggler\"></div>\n    </div>\n    <div class=\"ui-label\">UI Label</div>\n    <script>\n        $(\".ui-switch\").click(function (e) {\n            $(this).toggleClass(\"on\");\n        });\n    </script>\n\n    <hr/>\n    <h2>State Indicators</h2>\n    <span class=\"on-badge\"></span> Online Badge<br>\n    <span class=\"off-badge\"></span> Offline Badge\n\n\n    <hr/>\n\n        <h2>Aqua Buttons</h2>\n\n        <p class=\"indent\">\n            <a class=\"btn btn-default\">Standard</a>\n            <a class=\"btn btn-primary\">Primary</a>\n            <a class=\"btn disabled\">Disabled</a>\n        </p>\n        <hr/>\n\n        <h2>Small Aqua Buttons</h2>\n\n        <p class=\"indent\">\n            <a class=\"btn btn-capsule\">Uninstall</a>\n            <a class=\"btn btn-capsule disabled\">Uninstall</a>\n            <a class=\"btn btn-sm\">Small Button ...</a>\n            <a class=\"btn btn-sm disabled\">Small Button ...</a>\n        </p>\n        <hr/>\n\n        <h2>Help Button</h2>\n\n        <p class=\"indent\">\n            <!--<pre>&lt;a class=\"btn btn-help\" href=\"\"&gt;&lt;span class=\"entypo-help\"&gt;&lt;/span&gt;&lt;/a&gt;</pre>-->\n            <a class=\"btn btn-help\" href=\"\"><span class=\"entypo-help\"></span></a>\n        </p>\n        <hr/>\n\n        <h2>Modern Buttons</h2>\n\n        <p class=\"indent\">\n            <a class=\"btn btn-modern\">Modern</a>\n            <a class=\"btn btn-modern disabled\">Modern Disabled</a>\n            <a class=\"btn btn-modern btn-lg\">Modern Large</a>\n            <a class=\"btn btn-modern btn-lg disabled\">Modern Large Disabled</a>\n            <a class=\"btn btn-modern btn-sm\">Modern Small</a>\n\n\n        </p>\n        <hr/>\n        <h2>Buttons on Grey</h2>\n\n        <div class=\"grey-bg\" style=\"text-align: right; padding: 10px\">\n            <a href=\"\" class=\"btn btn-on-grey\">Abbrechen</a>\n            <a href=\"\" class=\"btn btn-on-grey\">OK</a>\n        </div>\n\n        <hr/>\n        <h2>Button Group</h2>\n\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\n\n        <div class=\"btn-group-vertical\">\n            <button type=\"button\" class=\"btn btn-default\">Top</button>\n            <button type=\"button\" class=\"btn btn-default\">Middle</button>\n            <button type=\"button\" class=\"btn btn-default\">Bottom</button>\n        </div>\n\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\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\n        <!-- Split button -->\n        <div class=\"btn-group\">\n            <button type=\"button\" class=\"btn btn-default\">Action</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>\n\n        <div class=\"dropdown btn-group\">\n            <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\" href=\"\">\n                <span class=\"entypo-cog\"></span>\n                <span class=\"caret\"></span>\n            </a>\n            <ul class=\"dropdown-menu\">\n                <li class=\"disabled\"><a href=\"\">Show Warning Details</a></li>\n                <li><a href=\"\">Clear Warnings</a></li>\n            </ul>\n        </div>\n\n        <div class=\"btn-group\">\n            <button type=\"button\" class=\"btn btn-modern\"><span class=\"entypo-plus\"></span></button>\n            <button type=\"button\" class=\"btn btn-modern\"><span class=\"entypo-minus\"></span></button>\n        </div>\n\n        <hr/>\n\n\n    </div>\n</div>\n"
  },
  {
    "path": "maverix-theme/app/partials/forms.html",
    "content": "<div class=\"row\">\n    <div class=\"col-md-12\">\n        <form role=\"form\">\n            <div class=\"form-group\">\n                <label for=\"exampleInputName1\">Email address</label>\n                <input type=\"text\" class=\"form-control\" id=\"exampleInputName1\" placeholder=\"Enter Your Name\">\n            </div>\n\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\n                <p class=\"help-block\">Example block-level help text here.</p>\n            </div>\n            <div class=\"form-group\">\n                <label>Textarea</label><br>\n                <textarea cols=\"50\" rows=\"10\"></textarea>\n\n                <p class=\"help-block\">Example block-level help text here.</p>\n            </div>\n            <div class=\"form-group\">\n                <label>Default Select:</label>\n                <select>\n                    <option>Option A</option>\n                    <option>Option B</option>\n                </select>\n\n                <p class=\"help-block\">This is the default Select.</p>\n            </div>\n            <div class=\"form-group\">\n                <label>Large Select:</label>\n                <select class=\"select-large\">\n                    <option>Option A</option>\n                    <option>Option B</option>\n                </select>\n\n                <p class=\"help-block\">This Select Style modifies the Default Select and makes it larger (Looks on Webkit).</p>\n            </div>\n\n            <div class=\"checkbox\">\n                <label>\n                    <input type=\"checkbox\"> Check me out\n                </label>\n            </div>\n            <input type=\"submit\" value=\"Submit\"/>\n\n        </form>\n    </div>\n</div>"
  },
  {
    "path": "maverix-theme/app/partials/icons.html",
    "content": "<h2>PNG Icons</h2>\n<img src=\"img/iconset-addictive-flavour-set/preview_af_1.jpg\" width=\"600px\" alt=\"\"/>\n<p>These awesome icons designed by Oliver Twardowski (<a href=\"http://www.addictedtocoffee.de\">http://www.addictedtocoffee.de</a>,\n    <a href=\"https://twitter.com/ot\">@ot</a> on Twitter) are a perfect match for Maverix Theme.\n    The link to these Icons is <a href=\"http://www.smashingmagazine.com/2010/04/15/the-ultimate-free-web-designer-s-icon-set-750-icons-incl-psd-sources/\">http://www.smashingmagazine.com/2010/04/15/the-ultimate-free-web-designer-s-icon-set-750-icons-incl-psd-sources/</a>\n</p>\n<hr/>\n\n<h2>Entypo</h2>\n<p>Maverix Theme comes makes use of the very mac like <a href=\"http://www.entypo.com\">entypo iconset</a>.</p>\n<ul class=\"entypo-ul list-unstyled\">\n<li class=\"entypo-address\" data-text=\"address\"></li>\n<li class=\"entypo-adjust\" data-text=\"adjust\"></li>\n<li class=\"entypo-air\" data-text=\"air\"></li>\n<li class=\"entypo-alert\" data-text=\"alert\"></li>\n<li class=\"entypo-archive\" data-text=\"archive\"></li>\n<li class=\"entypo-arrow-combo\" data-text=\"arrow-combo\"></li>\n<li class=\"entypo-arrows-ccw\" data-text=\"arrows-ccw\"></li>\n<li class=\"entypo-attach\" data-text=\"attach\"></li>\n<li class=\"entypo-attention\" data-text=\"attention\"></li>\n<li class=\"entypo-back\" data-text=\"back\"></li>\n<li class=\"entypo-back-in-time\" data-text=\"back-in-time\"></li>\n<li class=\"entypo-bag\" data-text=\"bag\"></li>\n<li class=\"entypo-basket\" data-text=\"basket\"></li>\n<li class=\"entypo-battery\" data-text=\"battery\"></li>\n<li class=\"entypo-behance\" data-text=\"behance\"></li>\n<li class=\"entypo-bell\" data-text=\"bell\"></li>\n<li class=\"entypo-block\" data-text=\"block\"></li>\n<li class=\"entypo-book\" data-text=\"book\"></li>\n<li class=\"entypo-book-open\" data-text=\"book-open\"></li>\n<li class=\"entypo-bookmark\" data-text=\"bookmark\"></li>\n<li class=\"entypo-bookmarks\" data-text=\"bookmarks\"></li>\n<li class=\"entypo-box\" data-text=\"box\"></li>\n<li class=\"entypo-briefcase\" data-text=\"briefcase\"></li>\n<li class=\"entypo-brush\" data-text=\"brush\"></li>\n<li class=\"entypo-bucket\" data-text=\"bucket\"></li>\n<li class=\"entypo-calendar\" data-text=\"calendar\"></li>\n<li class=\"entypo-camera\" data-text=\"camera\"></li>\n<li class=\"entypo-cancel\" data-text=\"cancel\"></li>\n<li class=\"entypo-cancel-circled\" data-text=\"cancel-circled\"></li>\n<li class=\"entypo-cancel-squared\" data-text=\"cancel-squared\"></li>\n<li class=\"entypo-cc\" data-text=\"cc\"></li>\n<li class=\"entypo-cc-by\" data-text=\"cc-by\"></li>\n<li class=\"entypo-cc-nc\" data-text=\"cc-nc\"></li>\n<li class=\"entypo-cc-nc-eu\" data-text=\"cc-nc-eu\"></li>\n<li class=\"entypo-cc-nc-jp\" data-text=\"cc-nc-jp\"></li>\n<li class=\"entypo-cc-nd\" data-text=\"cc-nd\"></li>\n<li class=\"entypo-cc-pd\" data-text=\"cc-pd\"></li>\n<li class=\"entypo-cc-remix\" data-text=\"cc-remix\"></li>\n<li class=\"entypo-cc-sa\" data-text=\"cc-sa\"></li>\n<li class=\"entypo-cc-share\" data-text=\"cc-share\"></li>\n<li class=\"entypo-cc-zero\" data-text=\"cc-zero\"></li>\n<li class=\"entypo-ccw\" data-text=\"ccw\"></li>\n<li class=\"entypo-cd\" data-text=\"cd\"></li>\n<li class=\"entypo-chart-area\" data-text=\"chart-area\"></li>\n<li class=\"entypo-chart-bar\" data-text=\"chart-bar\"></li>\n<li class=\"entypo-chart-line\" data-text=\"chart-line\"></li>\n<li class=\"entypo-chart-pie\" data-text=\"chart-pie\"></li>\n<li class=\"entypo-chat\" data-text=\"chat\"></li>\n<li class=\"entypo-check\" data-text=\"check\"></li>\n<li class=\"entypo-clipboard\" data-text=\"clipboard\"></li>\n<li class=\"entypo-clock\" data-text=\"clock\"></li>\n<li class=\"entypo-cloud\" data-text=\"cloud\"></li>\n<li class=\"entypo-cloud-thunder\" data-text=\"cloud-thunder\"></li>\n<li class=\"entypo-code\" data-text=\"code\"></li>\n<li class=\"entypo-cog\" data-text=\"cog\"></li>\n<li class=\"entypo-comment\" data-text=\"comment\"></li>\n<li class=\"entypo-compass\" data-text=\"compass\"></li>\n<li class=\"entypo-credit-card\" data-text=\"credit-card\"></li>\n<li class=\"entypo-cup\" data-text=\"cup\"></li>\n<li class=\"entypo-cw\" data-text=\"cw\"></li>\n<li class=\"entypo-database\" data-text=\"database\"></li>\n<li class=\"entypo-db-shape\" data-text=\"db-shape\"></li>\n<li class=\"entypo-direction\" data-text=\"direction\"></li>\n<li class=\"entypo-doc\" data-text=\"doc\"></li>\n<li class=\"entypo-doc-landscape\" data-text=\"doc-landscape\"></li>\n<li class=\"entypo-doc-text\" data-text=\"doc-text\"></li>\n<li class=\"entypo-doc-text-inv\" data-text=\"doc-text-inv\"></li>\n<li class=\"entypo-docs\" data-text=\"docs\"></li>\n<li class=\"entypo-dot\" data-text=\"dot\"></li>\n<li class=\"entypo-dot-2\" data-text=\"dot-2\"></li>\n<li class=\"entypo-dot-3\" data-text=\"dot-3\"></li>\n<li class=\"entypo-down\" data-text=\"down\"></li>\n<li class=\"entypo-down-bold\" data-text=\"down-bold\"></li>\n<li class=\"entypo-down-circled\" data-text=\"down-circled\"></li>\n<li class=\"entypo-down-dir\" data-text=\"down-dir\"></li>\n<li class=\"entypo-down-open\" data-text=\"down-open\"></li>\n<li class=\"entypo-down-open-big\" data-text=\"down-open-big\"></li>\n<li class=\"entypo-down-open-mini\" data-text=\"down-open-mini\"></li>\n<li class=\"entypo-down-thin\" data-text=\"down-thin\"></li>\n<li class=\"entypo-download\" data-text=\"download\"></li>\n<li class=\"entypo-dribbble\" data-text=\"dribbble\"></li>\n<li class=\"entypo-dribbble-circled\" data-text=\"dribbble-circled\"></li>\n<li class=\"entypo-drive\" data-text=\"drive\"></li>\n<li class=\"entypo-dropbox\" data-text=\"dropbox\"></li>\n<li class=\"entypo-droplet\" data-text=\"droplet\"></li>\n<li class=\"entypo-erase\" data-text=\"erase\"></li>\n<li class=\"entypo-evernote\" data-text=\"evernote\"></li>\n<li class=\"entypo-export\" data-text=\"export\"></li>\n<li class=\"entypo-eye\" data-text=\"eye\"></li>\n<li class=\"entypo-facebook\" data-text=\"facebook\"></li>\n<li class=\"entypo-facebook-circled\" data-text=\"facebook-circled\"></li>\n<li class=\"entypo-facebook-squared\" data-text=\"facebook-squared\"></li>\n<li class=\"entypo-fast-backward\" data-text=\"fast-backward\"></li>\n<li class=\"entypo-fast-forward\" data-text=\"fast-forward\"></li>\n<li class=\"entypo-feather\" data-text=\"feather\"></li>\n<li class=\"entypo-flag\" data-text=\"flag\"></li>\n<li class=\"entypo-flash\" data-text=\"flash\"></li>\n<li class=\"entypo-flashlight\" data-text=\"flashlight\"></li>\n<li class=\"entypo-flattr\" data-text=\"flattr\"></li>\n<li class=\"entypo-flickr\" data-text=\"flickr\"></li>\n<li class=\"entypo-flickr-circled\" data-text=\"flickr-circled\"></li>\n<li class=\"entypo-flight\" data-text=\"flight\"></li>\n<li class=\"entypo-floppy\" data-text=\"floppy\"></li>\n<li class=\"entypo-flow-branch\" data-text=\"flow-branch\"></li>\n<li class=\"entypo-flow-cascade\" data-text=\"flow-cascade\"></li>\n<li class=\"entypo-flow-line\" data-text=\"flow-line\"></li>\n<li class=\"entypo-flow-parallel\" data-text=\"flow-parallel\"></li>\n<li class=\"entypo-flow-tree\" data-text=\"flow-tree\"></li>\n<li class=\"entypo-folder\" data-text=\"folder\"></li>\n<li class=\"entypo-forward active\" data-text=\"forward\"></li>\n<li class=\"entypo-gauge\" data-text=\"gauge\"></li>\n<li class=\"entypo-github\" data-text=\"github\"></li>\n<li class=\"entypo-github-circled\" data-text=\"github-circled\"></li>\n<li class=\"entypo-globe\" data-text=\"globe\"></li>\n<li class=\"entypo-google-circles\" data-text=\"google-circles\"></li>\n<li class=\"entypo-gplus\" data-text=\"gplus\"></li>\n<li class=\"entypo-gplus-circled\" data-text=\"gplus-circled\"></li>\n<li class=\"entypo-graduation-cap\" data-text=\"graduation-cap\"></li>\n<li class=\"entypo-heart\" data-text=\"heart\"></li>\n<li class=\"entypo-heart-empty\" data-text=\"heart-empty\"></li>\n<li class=\"entypo-help\" data-text=\"help\"></li>\n<li class=\"entypo-help-circled\" data-text=\"help-circled\"></li>\n<li class=\"entypo-home\" data-text=\"home\"></li>\n<li class=\"entypo-hourglass\" data-text=\"hourglass\"></li>\n<li class=\"entypo-inbox\" data-text=\"inbox\"></li>\n<li class=\"entypo-infinity\" data-text=\"infinity\"></li>\n<li class=\"entypo-info\" data-text=\"info\"></li>\n<li class=\"entypo-info-circled\" data-text=\"info-circled\"></li>\n<li class=\"entypo-instagrem\" data-text=\"instagrem\"></li>\n<li class=\"entypo-install\" data-text=\"install\"></li>\n<li class=\"entypo-key\" data-text=\"key\"></li>\n<li class=\"entypo-keyboard\" data-text=\"keyboard\"></li>\n<li class=\"entypo-lamp\" data-text=\"lamp\"></li>\n<li class=\"entypo-language\" data-text=\"language\"></li>\n<li class=\"entypo-lastfm\" data-text=\"lastfm\"></li>\n<li class=\"entypo-lastfm-circled\" data-text=\"lastfm-circled\"></li>\n<li class=\"entypo-layout\" data-text=\"layout\"></li>\n<li class=\"entypo-leaf\" data-text=\"leaf\"></li>\n<li class=\"entypo-left\" data-text=\"left\"></li>\n<li class=\"entypo-left-bold\" data-text=\"left-bold\"></li>\n<li class=\"entypo-left-circled\" data-text=\"left-circled\"></li>\n<li class=\"entypo-left-dir\" data-text=\"left-dir\"></li>\n<li class=\"entypo-left-open\" data-text=\"left-open\"></li>\n<li class=\"entypo-left-open-big\" data-text=\"left-open-big\"></li>\n<li class=\"entypo-left-open-mini\" data-text=\"left-open-mini\"></li>\n<li class=\"entypo-left-thin\" data-text=\"left-thin\"></li>\n<li class=\"entypo-level-down\" data-text=\"level-down\"></li>\n<li class=\"entypo-level-up\" data-text=\"level-up\"></li>\n<li class=\"entypo-lifebuoy\" data-text=\"lifebuoy\"></li>\n<li class=\"entypo-light-down\" data-text=\"light-down\"></li>\n<li class=\"entypo-light-up\" data-text=\"light-up\"></li>\n<li class=\"entypo-link\" data-text=\"link\"></li>\n<li class=\"entypo-linkedin\" data-text=\"linkedin\"></li>\n<li class=\"entypo-linkedin-circled\" data-text=\"linkedin-circled\"></li>\n<li class=\"entypo-list\" data-text=\"list\"></li>\n<li class=\"entypo-list-add\" data-text=\"list-add\"></li>\n<li class=\"entypo-location\" data-text=\"location\"></li>\n<li class=\"entypo-lock\" data-text=\"lock\"></li>\n<li class=\"entypo-lock-open\" data-text=\"lock-open\"></li>\n<li class=\"entypo-login\" data-text=\"login\"></li>\n<li class=\"entypo-logo-db\" data-text=\"logo-db\"></li>\n<li class=\"entypo-logout\" data-text=\"logout\"></li>\n<li class=\"entypo-loop\" data-text=\"loop\"></li>\n<li class=\"entypo-magnet\" data-text=\"magnet\"></li>\n<li class=\"entypo-mail\" data-text=\"mail\"></li>\n<li class=\"entypo-map\" data-text=\"map\"></li>\n<li class=\"entypo-megaphone\" data-text=\"megaphone\"></li>\n<li class=\"entypo-menu\" data-text=\"menu\"></li>\n<li class=\"entypo-mic\" data-text=\"mic\"></li>\n<li class=\"entypo-minus\" data-text=\"minus\"></li>\n<li class=\"entypo-minus-circled\" data-text=\"minus-circled\"></li>\n<li class=\"entypo-minus-squared\" data-text=\"minus-squared\"></li>\n<li class=\"entypo-mixi\" data-text=\"mixi\"></li>\n<li class=\"entypo-mobile\" data-text=\"mobile\"></li>\n<li class=\"entypo-monitor\" data-text=\"monitor\"></li>\n<li class=\"entypo-moon\" data-text=\"moon\"></li>\n<li class=\"entypo-mouse\" data-text=\"mouse\"></li>\n<li class=\"entypo-music\" data-text=\"music\"></li>\n<li class=\"entypo-mute\" data-text=\"mute\"></li>\n<li class=\"entypo-network\" data-text=\"network\"></li>\n<li class=\"entypo-newspaper\" data-text=\"newspaper\"></li>\n<li class=\"entypo-note\" data-text=\"note\"></li>\n<li class=\"entypo-note-beamed\" data-text=\"note-beamed\"></li>\n<li class=\"entypo-palette\" data-text=\"palette\"></li>\n<li class=\"entypo-paper-plane\" data-text=\"paper-plane\"></li>\n<li class=\"entypo-pause\" data-text=\"pause\"></li>\n<li class=\"entypo-paypal\" data-text=\"paypal\"></li>\n<li class=\"entypo-pencil\" data-text=\"pencil\"></li>\n<li class=\"entypo-phone\" data-text=\"phone\"></li>\n<li class=\"entypo-picasa\" data-text=\"picasa\"></li>\n<li class=\"entypo-picture\" data-text=\"picture\"></li>\n<li class=\"entypo-pinterest\" data-text=\"pinterest\"></li>\n<li class=\"entypo-pinterest-circled\" data-text=\"pinterest-circled\"></li>\n<li class=\"entypo-play\" data-text=\"play\"></li>\n<li class=\"entypo-plus\" data-text=\"plus\"></li>\n<li class=\"entypo-plus-circled\" data-text=\"plus-circled\"></li>\n<li class=\"entypo-plus-squared\" data-text=\"plus-squared\"></li>\n<li class=\"entypo-popup\" data-text=\"popup\"></li>\n<li class=\"entypo-print\" data-text=\"print\"></li>\n<li class=\"entypo-progress-0\" data-text=\"progress-0\"></li>\n<li class=\"entypo-progress-1\" data-text=\"progress-1\"></li>\n<li class=\"entypo-progress-2\" data-text=\"progress-2\"></li>\n<li class=\"entypo-progress-3\" data-text=\"progress-3\"></li>\n<li class=\"entypo-publish\" data-text=\"publish\"></li>\n<li class=\"entypo-qq\" data-text=\"qq\"></li>\n<li class=\"entypo-quote\" data-text=\"quote\"></li>\n<li class=\"entypo-rdio\" data-text=\"rdio\"></li>\n<li class=\"entypo-rdio-circled\" data-text=\"rdio-circled\"></li>\n<li class=\"entypo-record\" data-text=\"record\"></li>\n<li class=\"entypo-renren\" data-text=\"renren\"></li>\n<li class=\"entypo-reply\" data-text=\"reply\"></li>\n<li class=\"entypo-reply-all\" data-text=\"reply-all\"></li>\n<li class=\"entypo-resize-full\" data-text=\"resize-full\"></li>\n<li class=\"entypo-resize-small\" data-text=\"resize-small\"></li>\n<li class=\"entypo-retweet\" data-text=\"retweet\"></li>\n<li class=\"entypo-right\" data-text=\"right\"></li>\n<li class=\"entypo-right-bold\" data-text=\"right-bold\"></li>\n<li class=\"entypo-right-circled\" data-text=\"right-circled\"></li>\n<li class=\"entypo-right-dir\" data-text=\"right-dir\"></li>\n<li class=\"entypo-right-open\" data-text=\"right-open\"></li>\n<li class=\"entypo-right-open-big\" data-text=\"right-open-big\"></li>\n<li class=\"entypo-right-open-mini\" data-text=\"right-open-mini\"></li>\n<li class=\"entypo-right-thin\" data-text=\"right-thin\"></li>\n<li class=\"entypo-rocket\" data-text=\"rocket\"></li>\n<li class=\"entypo-rss\" data-text=\"rss\"></li>\n<li class=\"entypo-search\" data-text=\"search\"></li>\n<li class=\"entypo-share\" data-text=\"share\"></li>\n<li class=\"entypo-shareable\" data-text=\"shareable\"></li>\n<li class=\"entypo-shuffle\" data-text=\"shuffle\"></li>\n<li class=\"entypo-signal\" data-text=\"signal\"></li>\n<li class=\"entypo-sina-weibo\" data-text=\"sina-weibo\"></li>\n<li class=\"entypo-skype\" data-text=\"skype\"></li>\n<li class=\"entypo-skype-circled\" data-text=\"skype-circled\"></li>\n<li class=\"entypo-smashing\" data-text=\"smashing\"></li>\n<li class=\"entypo-sound\" data-text=\"sound\"></li>\n<li class=\"entypo-soundcloud\" data-text=\"soundcloud\"></li>\n<li class=\"entypo-spotify\" data-text=\"spotify\"></li>\n<li class=\"entypo-spotify-circled\" data-text=\"spotify-circled\"></li>\n<li class=\"entypo-star\" data-text=\"star\"></li>\n<li class=\"entypo-star-empty\" data-text=\"star-empty\"></li>\n<li class=\"entypo-stop\" data-text=\"stop\"></li>\n<li class=\"entypo-stumbleupon\" data-text=\"stumbleupon\"></li>\n<li class=\"entypo-stumbleupon-circled\" data-text=\"stumbleupon-circled\"></li>\n<li class=\"entypo-suitcase\" data-text=\"suitcase\"></li>\n<li class=\"entypo-sweden\" data-text=\"sweden\"></li>\n<li class=\"entypo-switch\" data-text=\"switch\"></li>\n<li class=\"entypo-tag\" data-text=\"tag\"></li>\n<li class=\"entypo-tape\" data-text=\"tape\"></li>\n<li class=\"entypo-target\" data-text=\"target\"></li>\n<li class=\"entypo-thermometer\" data-text=\"thermometer\"></li>\n<li class=\"entypo-thumbs-down\" data-text=\"thumbs-down\"></li>\n<li class=\"entypo-thumbs-up\" data-text=\"thumbs-up\"></li>\n<li class=\"entypo-ticket\" data-text=\"ticket\"></li>\n<li class=\"entypo-to-end\" data-text=\"to-end\"></li>\n<li class=\"entypo-to-start\" data-text=\"to-start\"></li>\n<li class=\"entypo-tools\" data-text=\"tools\"></li>\n<li class=\"entypo-traffic-cone\" data-text=\"traffic-cone\"></li>\n<li class=\"entypo-trash\" data-text=\"trash\"></li>\n<li class=\"entypo-trophy\" data-text=\"trophy\"></li>\n<li class=\"entypo-tumblr\" data-text=\"tumblr\"></li>\n<li class=\"entypo-tumblr-circled\" data-text=\"tumblr-circled\"></li>\n<li class=\"entypo-twitter\" data-text=\"twitter\"></li>\n<li class=\"entypo-twitter-circled\" data-text=\"twitter-circled\"></li>\n<li class=\"entypo-up\" data-text=\"up\"></li>\n<li class=\"entypo-up-bold\" data-text=\"up-bold\"></li>\n<li class=\"entypo-up-circled\" data-text=\"up-circled\"></li>\n<li class=\"entypo-up-dir\" data-text=\"up-dir\"></li>\n<li class=\"entypo-up-open\" data-text=\"up-open\"></li>\n<li class=\"entypo-up-open-big\" data-text=\"up-open-big\"></li>\n<li class=\"entypo-up-open-mini\" data-text=\"up-open-mini\"></li>\n<li class=\"entypo-up-thin\" data-text=\"up-thin\"></li>\n<li class=\"entypo-upload\" data-text=\"upload\"></li>\n<li class=\"entypo-upload-cloud\" data-text=\"upload-cloud\"></li>\n<li class=\"entypo-user\" data-text=\"user\"></li>\n<li class=\"entypo-user-add\" data-text=\"user-add\"></li>\n<li class=\"entypo-users\" data-text=\"users\"></li>\n<li class=\"entypo-vcard\" data-text=\"vcard\"></li>\n<li class=\"entypo-video\" data-text=\"video\"></li>\n<li class=\"entypo-vimeo\" data-text=\"vimeo\"></li>\n<li class=\"entypo-vimeo-circled\" data-text=\"vimeo-circled\"></li>\n<li class=\"entypo-vkontakte\" data-text=\"vkontakte\"></li>\n<li class=\"entypo-volume\" data-text=\"volume\"></li>\n<li class=\"entypo-water\" data-text=\"water\"></li>\n<li class=\"entypo-window\" data-text=\"window\"></li>\n</ul>\n<hr/>\n\n<h2>OS X / iOS ONLY</h2>\n<p>If your target audience is strictly Mac/iOS you can make use of Apples \"Apple Color Emoji\" Font. On a Mac with Safari you will\n    see lots of Icons here:</p>\n<div class=\"emoji-font\">\n↖\n↗\n↘\n↙\n⏩\n⏪\n▶\n◀\n☀\n☁\n☎\n☔\n☕\n☝\n☺\n♈\n♉\n♊\n♋\n♌\n♍\n♎\n♏\n♐\n♑\n♒\n♓\n♠\n♣\n♥\n♦\n♨\n♿\n⚠\n⚡\n⚽\n⚾\n⛄\n⛎\n⛪\n⛲\n⛳\n⛵\n⛺\n⛽\n✂\n✈\n✊\n✋\n✌\n✨\n✳\n✴\n❌\n❎\n❓\n❔\n❕\n❗\n❤\n➡\n➿\n⬅\n⬆\n⬇\n⭐\n⭕\n〽\n㊗\n㊙\n\n🀄\n🅰\n🅱\n🅾\n🅿\n🆎\n🆒\n🆔\n🆕\n🆗\n🆙\n🆚\n🈁\n🈂\n🈚\n🈯\n🈳\n🈵\n🈶\n🈷\n🈸\n🈹\n🈺\n🉐\n🌀\n🌂\n🌃\n🌄\n🌅\n🌆\n🌇\n🌈\n🌊\n🌙\n🌟\n🌴\n🌵\n🌷\n🌸\n🌹\n🌺\n🌻\n🌾\n🍀\n🍁\n🍂\n🍃\n🍅\n🍆\n🍉\n🍊\n🍎\n🍓\n🍔\n🍘\n🍙\n🍚\n🍛\n🍜\n🍝\n🍞\n🍟\n🍡\n🍢\n🍣\n🍦\n🍧\n🍰\n🍱\n🍲\n🍳\n🍴\n🍵\n🍶\n🍸\n🍺\n🍻\n🎀\n🎁\n🎂\n🎃\n🎄\n🎅\n🎆\n🎇\n🎈\n🎉\n🎌\n🎍\n🎎\n🎏\n🎐\n🎑\n🎒\n🎓\n🎡\n🎢\n🎤\n🎥\n🎦\n🎧\n🎨\n🎩\n🎫\n🎬\n🎯\n🎰\n🎱\n🎵\n🎶\n🎷\n🎸\n🎺\n🎾\n🎿\n🏀\n🏁\n🏃\n🏄\n🏆\n🏈\n🏊\n🏠\n🏢\n🏣\n🏥\n🏦\n🏧\n🏨\n🏩\n🏪\n🏫\n🏬\n🏭\n🏯\n🏰\n🐍\n🐎\n🐑\n🐒\n🐔\n🐗\n🐘\n🐙\n🐚\n🐛\n🐟\n🐠\n🐤\n🐦\n🐧\n🐨\n🐫\n🐬\n🐭\n🐮\n🐯\n🐰\n🐱\n🐳\n🐴\n🐵\n🐶\n🐷\n🐸\n🐹\n🐺\n🐻\n👀\n👂\n👃\n👄\n👆\n👇\n👈\n👉\n👊\n👋\n👌\n👍\n👎\n👏\n👐\n👑\n👒\n👔\n👕\n👗\n👘\n👙\n👜\n👟\n👠\n👡\n👢\n👣\n👦\n👧\n👨\n👩\n👫\n👮\n👯\n👱\n👲\n👳\n👴\n👵\n👶\n👷\n👸\n👻\n👼\n👽\n👾\n👿\n💀\n💁\n💂\n💃\n💄\n💅\n💆\n💇\n💈\n💉\n💊\n💋\n💍\n💎\n💏\n💐\n💑\n💒\n💓\n💔\n💗\n💘\n💙\n💚\n💛\n💜\n💝\n💟\n💡\n💢\n💣\n💤\n💦\n💨\n💩\n💪\n💰\n💱\n💹\n💺\n💻\n💼\n💽\n💿\n📀\n📖\n📝\n📠\n📡\n📢\n📣\n📩\n📫\n📮\n📱\n📲\n📳\n📴\n📶\n📷\n📺\n📻\n📼\n🔊\n🔍\n🔑\n🔒\n🔓\n🔔\n🔝\n🔞\n🔥\n🔨\n🔫\n🔯\n🔰\n🔱\n🔲\n🔳\n🔴\n🕐\n🕑\n🕒\n🕓\n🕔\n🕕\n🕖\n🕗\n🕘\n🕙\n🕚\n🕛\n🗻\n🗼\n🗽\n😁\n😂\n😃\n😄\n😉\n😊\n😌\n😍\n😏\n😒\n😓\n😔\n😖\n😘\n😚\n😜\n😝\n😞\n😠\n😡\n😢\n😣\n😥\n😨\n😪\n😭\n😰\n😱\n😲\n😳\n😷\n🙅\n🙆\n🙇\n🙌\n🙏\n🚀\n🚃\n🚄\n🚅\n🚇\n🚉\n🚌\n🚏\n🚑\n🚒\n🚓\n🚕\n🚗\n🚙\n🚚\n🚢\n🚤\n🚥\n🚧\n🚬\n🚭\n🚲\n🚶\n🚹\n🚺\n🚻\n🚼\n🚽\n🚾\n🛀\n⏫\n⏬\n⏰\n⏳\n✅\n➕\n➖\n➗\n➰\n🃏\n🆑\n🆓\n🆖\n🆘\n🇦\n🇧\n🇨\n🇩\n🇪\n🇫\n🇬\n🇭\n🇮\n🇯\n🇰\n🇱\n🇲\n🇳\n🇴\n🇵\n🇶\n🇷\n🇸\n🇹\n🇺\n🇻\n🇼\n🇽\n🇾\n🇿\n🈲\n🈴\n🉑\n🌁\n🌉\n🌋\n🌌\n🌏\n🌑\n🌓\n🌔\n🌕\n🌛\n🌠\n🌰\n🌱\n🌼\n🌽\n🌿\n🍄\n🍇\n🍈\n🍌\n🍍\n🍏\n🍑\n🍒\n🍕\n🍖\n🍗\n🍠\n🍤\n🍥\n🍨\n🍩\n🍪\n🍫\n🍬\n🍭\n🍮\n🍯\n🍷\n🍹\n🎊\n🎋\n🎠\n🎣\n🎪\n🎭\n🎮\n🎲\n🎳\n🎴\n🎹\n🎻\n🎼\n🎽\n🏂\n🏡\n🏮\n🐌\n🐜\n🐝\n🐞\n🐡\n🐢\n🐣\n🐥\n🐩\n🐲\n🐼\n🐽\n🐾\n👅\n👓\n👖\n👚\n👛\n👝\n👞\n👤\n👪\n👰\n👹\n👺\n💌\n💕\n💖\n💞\n💠\n💥\n💧\n💫\n💬\n💮\n💯\n💲\n💳\n💴\n💵\n💸\n💾\n📁\n📂\n📃\n📄\n📅\n📆\n📇\n📈\n📉\n📊\n📋\n📌\n📍\n📎\n📏\n📐\n📑\n📒\n📓\n📔\n📕\n📗\n📘\n📙\n📚\n📛\n📜\n📞\n📟\n📤\n📥\n📦\n📧\n📨\n📪\n📰\n📹\n🔃\n🔋\n🔌\n🔎\n🔏\n🔐\n🔖\n🔗\n🔘\n🔙\n🔚\n🔛\n🔜\n🔟\n🔠\n🔡\n🔢\n🔣\n🔤\n🔦\n🔧\n🔩\n🔪\n🔮\n🔵\n🔶\n🔷\n🔸\n🔹\n🔼\n🔽\n🗾\n🗿\n😅\n😆\n😋\n😤\n😩\n😫\n😵\n😸\n😹\n😺\n😻\n😼\n😽\n😾\n😿\n🙀\n🙈\n🙉\n🙊\n🙋\n🙍\n🙎\n🚨\n🚩\n🚪\n🚫\n👥\n</div>"
  },
  {
    "path": "maverix-theme/app/partials/maverix.html",
    "content": "<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <h2>What is Maverix?</h2>\n\n        <p class=\"indent\">Maverix is a maccish bootstrap theme and application boilerplate. It gives your web-apps a\n            native look and feel and bundles\n            <a href=\"https://angularjs.org/\">AngularJS</a> and other components such as <a href=\"http://jquery.com/\">jQuery</a>,\n            <a href=\"http://www.flotcharts.org/\">Flot</a> and <a href=\"http://andreruffert.github.io/rangeslider.js/\">rangeslider.js</a>\n        </p>\n\n        <p class=\"indent\">It is perfect to be used for apps that are based on HTML App Containers such as:\n        <ul>\n            <li><a href=\"https://github.com/maccman/macgap\">MacGap</a></li>\n            <li><a href=\"https://github.com/rogerwang/node-webkit\">Node-Webkit</a></li>\n            <li><a href=\"https://github.com/atom/atom-shell\">Github Atom Shell</a></li>\n            <li><a href=\"https://github.com/adobe/brackets-shell\">Adobe Brackets Shell</a></li>\n        </ul>\n        </p>\n        <hr/>\n        <h2>Design Decisions</h2>\n\n        <div class=\"indent\">\n            <h3>Closest possible to native</h3>\n\n\n            <p>All controls and Elements are carefully designed to perfectly fit into the native mac environment.</p>\n\n            <h3>Non Responsive (for now...)</h3>\n\n            <p>Desktop Apps don't need to run on thousands of different devices and\n                viewports. You are the master of setting a minimum-viewport and the app won't get smaller than this. If\n                you\n                are\n                using Maverix Theme in a traditional web-app it is also okay for Admin Backends that don't need\n                responsive\n                layout.\n            </p>\n\n            <h3>Built on Bootstrap and Less</h3>\n\n            <p>Twitters Bootstrap comes bundled with tons of useful styles and add ons and\n                allows beginners and masters to get started quickly (grid positioning, etc.). The maverix styles are\n                enhancing bootstrap and are written in\n                <a href=\"http://lesscss.org/\">less.css</a>\n            </p>\n\n            <h3>Webkit first</h3>\n\n            <p>\n                Maverix Theme is primarily made to enable app container based web-apps to look like native OS X Apps.\n                So webkit is the primary engine when releasing new components. However this doesn't mean that other\n                browsers\n                are totally unsupported. Maverix Theme is tested on Safari, Firefox and Chrome on OS X.\n            </p>\n            <hr/>\n        </div>\n        <h2>Bundled with AngularJS</h2>\n\n        <p class=\"indent\"><a href=\"https://angularjs.org/\">AngularJS</a> is one of the best Javascript App Frameworks\n            available today and so Maverix Theme comes bundled with AngularJS including fully working routing to get you\n            started fast. Anyways, AngularJS usage is optional.</p>\n\n        <hr/>\n        <h2>Roadmap</h2>\n\n        <p class=\"indent\">\n        <ul>\n            <li>Bugfix requests are priority one.</li>\n            <li>New Features will be added as far as they make sense.</li>\n            <li>If demand is high for responsive design I will add it.</li>\n        </ul>\n        </p>\n\n        <hr/>\n        <h2>Bugs & Feature Requests</h2>\n        <p class=\"indent\">Use the <a href=\"https://github.com/tschundeee/maverix/issues\">Maverix Github Issue Tracker</a>.\n            You can also reach out to me via Mail <a href=\"mailto:b.rahnema@gmail.com?subject=Maverix\">b.rahnema@gmail.com</a> or Twitter\n                <a href=\"https://twitter.com/tschundeee\">@tschundeee</a></p>\n        <hr/>\n        <h2>Feedback</h2>\n        <p class=\"indent\">\n            Feedback is always welcome.\n        </p>\n    </div>\n</div>"
  },
  {
    "path": "maverix-theme/app/partials/modals.html",
    "content": "<!-- Button trigger modal -->\n        <div class=\"text-center\">\n            <button class=\"btn btn-default\" data-toggle=\"modal\" data-target=\"#myModal\">\n                Launch demo modal\n            </button>\n\n        </div>\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\"><span class=\"entypo-users\"></span> Modal title</h4>\n                <span class=\"modal-subtitle\">This is a Modal Subtitle</span>\n            </div>\n            <div class=\"modal-body\">\n                <h2>Content</h2>\n                <div class=\"table-cell\">\n                    <table class=\"table-maverix table-maverix-small\">\n                        <tr>\n                            <td class=\"td-icon\"><span class=\"entypo-users\"></span></td>\n                            <td>Everyone</td>\n                            <td class=\"text-right\">\n                                <select class=\"on-white-select\">\n                                    <option selected>No Access</option>\n                                    <option>Read</option>\n                                    <option>Read & Write</option>\n                                </select>\n                                <span class=\"entypo-arrow-combo\"></span>\n                            </td>\n                        </tr>\n                        <tr class=\"selected\">\n                            <td class=\"td-icon\"><span class=\"entypo-user\"></span></td>\n                            <td>Admin</td>\n                            <td class=\"text-right\">\n                                <select class=\"on-white-select\">\n                                    <option>No Access</option>\n                                    <option>Read</option>\n                                    <option selected>Read & Write</option>\n                                </select>\n                                <span class=\"entypo-arrow-combo\"></span>\n                            </td>\n\n                        </tr>\n                        <tr>\n                            <td class=\"td-icon\"><span class=\"entypo-network\"></span></td>\n                            <td>Staff</td>\n                            <td class=\"text-right\">\n                                <select class=\"on-white-select\">\n                                    <option>No Access</option>\n                                    <option selected>Read</option>\n                                    <option>Read & Write</option>\n                                </select>\n                                <span class=\"entypo-arrow-combo\"></span>\n                            </td>\n                        </tr>\n                    </table>\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-on-grey\" data-dismiss=\"modal\">Close</button>\n                <button type=\"button\" class=\"btn btn-on-grey\" data-dismiss=\"modal\">OK</button>\n            </div>\n        </div>\n    </div>\n</div>\n\n"
  },
  {
    "path": "maverix-theme/app/partials/partial1.html",
    "content": "<div class=\"sub-nav\">\n    <ul>\n        <li ng-class=\"{selected : $parent.subNav1 === 0}\"><a href=\"\" ng-click=\"$parent.subNav1 = 0\">Overview</a></li>\n        <li ng-class=\"{selected : $parent.subNav1 === 1}\"><a href=\"\" ng-click=\"$parent.subNav1 = 1\">Settings</a></li>\n        <li ng-class=\"{selected : $parent.subNav1 === 2}\"><a href=\"\" ng-click=\"$parent.subNav1 = 2\">Memory</a></li>\n    </ul>\n</div>\n\n<div class=\"sub-nav-content-container\">\n    <div ng-show=\"$parent.subNav1 === 0\">\n\n        <h2>Access</h2>\n\n        <table class=\"table-content-block\">\n            <tr>\n                <td class=\"td-label\">Hostname:</td>\n                <td><span class=\"on-badge\"></span></td>\n                <td>maverix.local<br>\n                    <span class=\"nfo\">\n                        Here you'll find Access Information to this Server over the Internet.\n                    </span>\n                </td>\n                <td class=\"td-actions\">\n                    <button>Edit ...</button>\n                </td>\n            </tr>\n\n            <tr>\n                <td class=\"td-label\">Computername:</td>\n                <td><span class=\"on-badge\"></span></td>\n                <td>maverix<br>\n                    <span class=\"nfo\">\n                        Your Server is reachable under this address in the local network. <a href=\"\"><span\n                            class=\"entypo-right maverix-circle\"></span></a>\n                    </span>\n                </td>\n                <td class=\"td-actions\">\n                    <button>Edit ...</button>\n                </td>\n            </tr>\n\n        </table>\n\n\n        <h2>Server</h2>\n        <table class=\"table-content-block\">\n            <tr>\n                <td class=\"td-label\">Active for:</td>\n                <td>25 Days, 3 Hours, 49 Minutes</td>\n            </tr>\n            <tr>\n                <td class=\"td-label\">Theme:</td>\n                <td>Maverix Bootstrap (Version 1.0.0)</td>\n            </tr>\n\n            <tr>\n                <td class=\"td-label\">Author:</td>\n                <td>Bijan Rahnema <a href=\"mailto:b.rahnema@gmail.com\">b.rahnema@gmail.com</a></td>\n            </tr>\n\n        </table>\n\n        <h2>Networks</h2>\n        <table class=\"table-content-block\">\n            <tr>\n                <td class=\"td-label\">Wrapbootstrap:</td>\n                <td>Maverix Theme</td>\n            </tr>\n\n        </table>\n\n    </div>\n\n\n    <div ng-show=\"$parent.subNav1 === 1\">\n        <h2>Settings</h2>\n\n        <ul class=\"list-unstyled indent\">\n            <li>\n                <input type=\"checkbox\"> Allow Remote Access via SSH for\n                <select>\n                    <option>Administrators</option>\n                    <option>All Users</option>\n                </select>\n            </li>\n            <li>\n                <input type=\"checkbox\"> Activate Screen Sharing and Remote Access\n            </li>\n            <li>\n                <input type=\"checkbox\"> Allow Remote Administration through Server\n            </li>\n            <li>\n                <input type=\"checkbox\"> Allow Push Notifications\n            </li>\n        </ul>\n\n    </div>\n\n    <div ng-show=\"$parent.subNav1 === 2\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <h2>Memory Usage</h2>\n                <div class=\"demo-container\">\n                    <div id=\"placeholder\" class=\"demo-placeholder\" style=\"width: 600px; height: 300px;\"></div>\n                </div>\n            </div>\n        </div>\n\n        <script>\n\n\n\n\n                // We use an inline data source in the example, usually data would\n                // be fetched from a server\n\n                var data = [],\n                        totalPoints = 300;\n\n                function getRandomData() {\n\n                    if (data.length > 0)\n                        data = data.slice(1);\n\n                    // Do a random walk\n\n                    while (data.length < totalPoints) {\n\n                        var prev = data.length > 0 ? data[data.length - 1] : 50,\n                                y = prev + Math.random() * 10 - 5;\n\n                        if (y < 0) {\n                            y = 0;\n                        } else if (y > 100) {\n                            y = 100;\n                        }\n\n                        data.push(y);\n                    }\n\n                    // Zip the generated y values with the x values\n\n                    var res = [];\n                    for (var i = 0; i < data.length; ++i) {\n                        res.push([i, data[i]])\n                    }\n\n                    return res;\n                }\n\n                // Set up the control widget\n\n                var updateInterval = 24;\n\n                var plot = $.plot(\"#placeholder\", [ getRandomData() ], {\n                    series: {\n                        shadowSize: 0,\t// Drawing is faster without shadows\n                        color: \"#77B1DE\"\n                    },\n                    yaxis: {\n                        min: 0,\n                        max: 100\n                    },\n                    xaxis: {\n                        show: false\n                    },\n                    grid: {\n                        backgroundColor: \"#F5F5F5\",\n                        borderWidth: 1,\n                        borderColor: \"#E0E0E0\"\n                    }\n                });\n\n                function update() {\n\n                    plot.setData([getRandomData()]);\n\n                    // Since the axes don't change, we don't need to call plot.setupGrid()\n\n                    plot.draw();\n                    clearTimeout(update);\n                    setTimeout(update, updateInterval);\n                }\n\n               update();\n        </script>\n\n\n\n            <p class=\"indent\">Maverix Theme is integrated with the awesome <a href=\"http://www.flotcharts.org\" target=\"_blank\">Flot Charts</a> Library. <a class=\"btn btn-help\" href=\"https://github.com/flot/flot/blob/master/API.md\" target=\"_blank\"><span class=\"entypo-help\"></span></a></p>\n\n\n\n\n\n    </div>\n</div>\n\n"
  },
  {
    "path": "maverix-theme/app/partials/partial2.html",
    "content": "<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <div class=\"table-cell\" style=\"height: 500px\">\n            <table class=\"table table-maverix table-maverix-large\">\n                <tr>\n                    <td class=\"td-icon\"><span class=\"entypo-attention\"></span></td>\n                    <td><p class=\"info-main\">Server did not react.</p>\n\n                        <p class=\"info-sub\">15.04.14 23:14</p></td>\n                </tr>\n                <tr>\n                    <td class=\"td-icon\"><span class=\"entypo-attention\"></span></td>\n                    <td><p class=\"info-main\">Server did not react.</p>\n\n                        <p class=\"info-sub\">15.04.14 23:14</p></td>\n                </tr>\n                <tr>\n                    <td class=\"td-icon\"><span class=\"entypo-attention\"></span></td>\n                    <td><p class=\"info-main\">Server did not react.</p>\n\n                        <p class=\"info-sub\">15.04.14 23:14</p></td>\n                </tr>\n                <tr>\n                    <td class=\"td-icon\"><span class=\"entypo-attention\"></span></td>\n                    <td><p class=\"info-main\">Server did not react.</p>\n\n                        <p class=\"info-sub\">15.04.14 23:14</p></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n            </table>\n        </div>\n    </div>\n\n</div>\n\n<div class=\"row\">\n    <div class=\"col-sm-2\">\n\n        <div class=\"dropdown btn-group\">\n            <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\" href=\"\">\n                <span class=\"entypo-cog\"></span>\n                <span class=\"caret\"></span>\n            </a>\n            <ul class=\"dropdown-menu\">\n                <li class=\"disabled\"><a href=\"\">Show Warning Details</a></li>\n                <li><a href=\"\">Clear Warnings</a></li>\n            </ul>\n        </div>\n\n    </div>\n    <div class=\"col-sm-10 text-right\"><span class=\"search-input\"><span class=\"entypo-search\"></span><input type=\"text\" class=\"mvx-search\"\n                                                                                                           placeholder=\"Filter Warnings\"/></span>\n        <a class=\"btn btn-help\" href=\"\" style=\"margin-left: 10px\"><span class=\"entypo-help\"></span></a>\n    </div>\n\n</div>"
  },
  {
    "path": "maverix-theme/app/partials/tables.html",
    "content": "<div class=\"row content-block\">\n    <div class=\"col-sm-12\">\n        <h2>Table Small</h2>\n\n        <div class=\"table-cell\">\n            <table class=\"table-maverix table-maverix-small\">\n                <tr>\n                    <td class=\"td-icon\"><span class=\"entypo-users\"></span></td>\n                    <td>Everyone</td>\n                    <td class=\"text-right\">\n                        <select class=\"on-white-select\">\n                            <option selected>No Access</option>\n                            <option>Read</option>\n                            <option>Read & Write</option>\n                        </select>\n                        <span class=\"entypo-arrow-combo\"></span>\n                    </td>\n                </tr>\n                <tr class=\"selected\">\n                    <td class=\"td-icon\"><span class=\"entypo-user\"></span></td>\n                    <td>Admin</td>\n                    <td class=\"text-right\">\n                        <select class=\"on-white-select\">\n                            <option>No Access</option>\n                            <option>Read</option>\n                            <option selected>Read & Write</option>\n                        </select>\n                        <span class=\"entypo-arrow-combo\"></span>\n                    </td>\n\n                </tr>\n                <tr>\n                    <td class=\"td-icon\"><span class=\"entypo-network\"></span></td>\n                    <td>Staff</td>\n                    <td class=\"text-right\">\n                        <select>\n                            <option>No Access</option>\n                            <option selected>Standard Select for non Webkit Browser</option>\n                            <option>Read & Write</option>\n                        </select>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-sm-12\">\n        <h2>Table Large</h2>\n\n        <div class=\"table-cell\" style=\"height: 300px\">\n            <table class=\"table table-maverix table-maverix-large\">\n                <tr>\n                    <td class=\"td-icon\"><span class=\"entypo-attention\"></span></td>\n                    <td><p class=\"info-main\">Server did not react.</p>\n\n                        <p class=\"info-sub\">15.04.14 23:14</p></td>\n                </tr>\n                <tr class=\"selected\">\n                    <td class=\"td-icon\"><span class=\"entypo-attention\"></span></td>\n                    <td><p class=\"info-main\">Server did not react.</p>\n\n                        <p class=\"info-sub\">15.04.14 23:14</p></td>\n                </tr>\n                <tr>\n                    <td class=\"td-icon\"><span class=\"entypo-attention\"></span></td>\n                    <td><p class=\"info-main\">Server did not react.</p>\n\n                        <p class=\"info-sub\">15.04.14 23:14</p></td>\n                </tr>\n                <tr>\n                    <td class=\"td-icon\"><span class=\"entypo-attention\"></span></td>\n                    <td><p class=\"info-main\">Server did not react.</p>\n\n                        <p class=\"info-sub\">15.04.14 23:14</p></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n                <tr>\n                    <td>\n                        <div class=\"placeholder\"></div>\n                    </td>\n                    <td></td>\n                </tr>\n            </table>\n        </div>\n    </div>\n\n</div>\n\n<div class=\"row content-block\">\n    <div class=\"col-sm-2\">\n\n        <div class=\"dropdown btn-group\">\n            <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\" href=\"\">\n                <span class=\"entypo-cog\"></span>\n                <span class=\"caret\"></span>\n            </a>\n            <ul class=\"dropdown-menu\">\n                <li class=\"disabled\"><a href=\"\">Show Warning Details</a></li>\n                <li><a href=\"\">Clear Warnings</a></li>\n            </ul>\n        </div>\n\n    </div>\n    <div class=\"col-sm-10 text-right\"><span class=\"search-input\"><span class=\"entypo-search\"></span><input type=\"text\" class=\"mvx-search\"\n                                                                                                           placeholder=\"Filter Warnings\"/></span>\n        <a class=\"btn btn-help\" href=\"\" style=\"margin-left: 10px\"><span class=\"entypo-help\"></span></a>\n    </div>\n\n</div>\n\n<div class=\"row content-block\">\n    <div class=\"col-sm-12\">\n        <hr/>\n        <h2>Content Block Table</h2>\n\n        <table class=\"table-content-block\">\n            <tr>\n                <td class=\"td-label\">Hostname:</td>\n                <td><span class=\"on-badge\"></span></td>\n                <td>maverix.local<br>\n                    <span class=\"nfo\">\n                        Here you'll find Access Information to this Server over the Internet.\n                    </span>\n                </td>\n                <td class=\"td-actions\">\n                    <button>Edit ...</button>\n                </td>\n            </tr>\n\n            <tr>\n                <td class=\"td-label\">Computername:</td>\n                <td><span class=\"on-badge\"></span></td>\n                <td>maverix<br>\n                    <span class=\"nfo\">\n                        Your Server is reachable under this address in the local network. <a href=\"\"><span\n                            class=\"entypo-right maverix-circle\"></span></a>\n                    </span>\n                </td>\n                <td class=\"td-actions\">\n                    <button>Edit ...</button>\n                </td>\n            </tr>\n\n        </table>\n        <hr/>\n    </div>\n</div>"
  },
  {
    "path": "maverix-theme/app/partials/type.html",
    "content": "<h1>Heading One</h1>\n<p>The Heading One style should be used rarely and only on specifically crafted pages. Make Sure it fits well if you\n    decide to make use of it ;).</p>\n<h2>Heading Two</h2>\n<p>Headind Two is the default heading for this Theme. If you only present text after Heading Two you can also add an\n    \".indent\" class to the text container(e.g. p-tag).</p>\n<h2>This looks like this</h2>\n<p class=\"indent\">This text is intended and looks awesome below a Heading Two.</p>\n<hr/>\n<h3>Heading Three</h3>\n<p>Use heading three only if necessary and only to add some extra grouping below a Heading Two. Usually it fits better\n    to use nav-tabs to for grouping and then make use of Heading Twos.</p>"
  },
  {
    "path": "maverix-theme/bower_components/angular/.bower.json",
    "content": "{\n  \"name\": \"angular\",\n  \"version\": \"1.2.16\",\n  \"main\": \"./angular.js\",\n  \"dependencies\": {},\n  \"homepage\": \"https://github.com/angular/bower-angular\",\n  \"_release\": \"1.2.16\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.2.16\",\n    \"commit\": \"7ae38b4a0cfced157e3486a0d6e2d299601723bb\"\n  },\n  \"_source\": \"git://github.com/angular/bower-angular.git\",\n  \"_target\": \"~1.2.16\",\n  \"_originalSource\": \"angular\",\n  \"_direct\": true\n}"
  },
  {
    "path": "maverix-theme/bower_components/angular/README.md",
    "content": "# bower-angular\n\nThis repo is for distribution on `bower`. The source for this module is in the\n[main AngularJS repo](https://github.com/angular/angular.js).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nInstall with `bower`:\n\n```shell\nbower install angular\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/angular/angular.js\"></script>\n```\n\n## Documentation\n\nDocumentation is available on the\n[AngularJS docs site](http://docs.angularjs.org/).\n\n## License\n\nThe MIT License\n\nCopyright (c) 2010-2012 Google, Inc. http://angularjs.org\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": "maverix-theme/bower_components/angular/angular-csp.css",
    "content": "/* Include this file in your html if you are using the CSP mode. */\n\n@charset \"UTF-8\";\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],\n.ng-cloak, .x-ng-cloak,\n.ng-hide {\n  display: none !important;\n}\n\nng\\:form {\n  display: block;\n}\n\n.ng-animate-block-transitions {\n  transition:0s all!important;\n  -webkit-transition:0s all!important;\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/angular/angular.js",
    "content": "/**\n * @license AngularJS v1.2.16\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, document, undefined) {'use strict';\n\n/**\n * @description\n *\n * This object provides a utility for producing rich Error messages within\n * Angular. It can be called as follows:\n *\n * var exampleMinErr = minErr('example');\n * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);\n *\n * The above creates an instance of minErr in the example namespace. The\n * resulting error will have a namespaced error code of example.one.  The\n * resulting error will replace {0} with the value of foo, and {1} with the\n * value of bar. The object is not restricted in the number of arguments it can\n * take.\n *\n * If fewer arguments are specified than necessary for interpolation, the extra\n * interpolation markers will be preserved in the final string.\n *\n * Since data will be parsed statically during a build step, some restrictions\n * are applied with respect to how minErr instances are created and called.\n * Instances should have names of the form namespaceMinErr for a minErr created\n * using minErr('namespace') . Error codes, namespaces and template strings\n * should all be static strings, not variables or general expressions.\n *\n * @param {string} module The namespace to use for the new minErr instance.\n * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance\n */\n\nfunction minErr(module) {\n  return function () {\n    var code = arguments[0],\n      prefix = '[' + (module ? module + ':' : '') + code + '] ',\n      template = arguments[1],\n      templateArgs = arguments,\n      stringify = function (obj) {\n        if (typeof obj === 'function') {\n          return obj.toString().replace(/ \\{[\\s\\S]*$/, '');\n        } else if (typeof obj === 'undefined') {\n          return 'undefined';\n        } else if (typeof obj !== 'string') {\n          return JSON.stringify(obj);\n        }\n        return obj;\n      },\n      message, i;\n\n    message = prefix + template.replace(/\\{\\d+\\}/g, function (match) {\n      var index = +match.slice(1, -1), arg;\n\n      if (index + 2 < templateArgs.length) {\n        arg = templateArgs[index + 2];\n        if (typeof arg === 'function') {\n          return arg.toString().replace(/ ?\\{[\\s\\S]*$/, '');\n        } else if (typeof arg === 'undefined') {\n          return 'undefined';\n        } else if (typeof arg !== 'string') {\n          return toJson(arg);\n        }\n        return arg;\n      }\n      return match;\n    });\n\n    message = message + '\\nhttp://errors.angularjs.org/1.2.16/' +\n      (module ? module + '/' : '') + code;\n    for (i = 2; i < arguments.length; i++) {\n      message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +\n        encodeURIComponent(stringify(arguments[i]));\n    }\n\n    return new Error(message);\n  };\n}\n\n/* We need to tell jshint what variables are being exported */\n/* global\n    -angular,\n    -msie,\n    -jqLite,\n    -jQuery,\n    -slice,\n    -push,\n    -toString,\n    -ngMinErr,\n    -_angular,\n    -angularModule,\n    -nodeName_,\n    -uid,\n\n    -lowercase,\n    -uppercase,\n    -manualLowercase,\n    -manualUppercase,\n    -nodeName_,\n    -isArrayLike,\n    -forEach,\n    -sortedKeys,\n    -forEachSorted,\n    -reverseParams,\n    -nextUid,\n    -setHashKey,\n    -extend,\n    -int,\n    -inherit,\n    -noop,\n    -identity,\n    -valueFn,\n    -isUndefined,\n    -isDefined,\n    -isObject,\n    -isString,\n    -isNumber,\n    -isDate,\n    -isArray,\n    -isFunction,\n    -isRegExp,\n    -isWindow,\n    -isScope,\n    -isFile,\n    -isBlob,\n    -isBoolean,\n    -trim,\n    -isElement,\n    -makeMap,\n    -map,\n    -size,\n    -includes,\n    -indexOf,\n    -arrayRemove,\n    -isLeafNode,\n    -copy,\n    -shallowCopy,\n    -equals,\n    -csp,\n    -concat,\n    -sliceArgs,\n    -bind,\n    -toJsonReplacer,\n    -toJson,\n    -fromJson,\n    -toBoolean,\n    -startingTag,\n    -tryDecodeURIComponent,\n    -parseKeyValue,\n    -toKeyValue,\n    -encodeUriSegment,\n    -encodeUriQuery,\n    -angularInit,\n    -bootstrap,\n    -snake_case,\n    -bindJQuery,\n    -assertArg,\n    -assertArgFn,\n    -assertNotHasOwnProperty,\n    -getter,\n    -getBlockElements,\n    -hasOwnProperty,\n\n*/\n\n////////////////////////////////////\n\n/**\n * @ngdoc module\n * @name ng\n * @module ng\n * @description\n *\n * # ng (core module)\n * The ng module is loaded by default when an AngularJS application is started. The module itself\n * contains the essential components for an AngularJS application to function. The table below\n * lists a high level breakdown of each of the services/factories, filters, directives and testing\n * components available within this core module.\n *\n * <div doc-module-components=\"ng\"></div>\n */\n\n/**\n * @ngdoc function\n * @name angular.lowercase\n * @module ng\n * @function\n *\n * @description Converts the specified string to lowercase.\n * @param {string} string String to be converted to lowercase.\n * @returns {string} Lowercased string.\n */\nvar lowercase = function(string){return isString(string) ? string.toLowerCase() : string;};\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * @ngdoc function\n * @name angular.uppercase\n * @module ng\n * @function\n *\n * @description Converts the specified string to uppercase.\n * @param {string} string String to be converted to uppercase.\n * @returns {string} Uppercased string.\n */\nvar uppercase = function(string){return isString(string) ? string.toUpperCase() : string;};\n\n\nvar manualLowercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})\n      : s;\n};\nvar manualUppercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})\n      : s;\n};\n\n\n// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish\n// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods\n// with correct but slower alternatives.\nif ('i' !== 'I'.toLowerCase()) {\n  lowercase = manualLowercase;\n  uppercase = manualUppercase;\n}\n\n\nvar /** holds major version number for IE or NaN for real browsers */\n    msie,\n    jqLite,           // delay binding since jQuery could be loaded after us.\n    jQuery,           // delay binding\n    slice             = [].slice,\n    push              = [].push,\n    toString          = Object.prototype.toString,\n    ngMinErr          = minErr('ng'),\n\n\n    _angular          = window.angular,\n    /** @name angular */\n    angular           = window.angular || (window.angular = {}),\n    angularModule,\n    nodeName_,\n    uid               = ['0', '0', '0'];\n\n/**\n * IE 11 changed the format of the UserAgent string.\n * See http://msdn.microsoft.com/en-us/library/ms537503.aspx\n */\nmsie = int((/msie (\\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);\nif (isNaN(msie)) {\n  msie = int((/trident\\/.*; rv:(\\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);\n}\n\n\n/**\n * @private\n * @param {*} obj\n * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,\n *                   String ...)\n */\nfunction isArrayLike(obj) {\n  if (obj == null || isWindow(obj)) {\n    return false;\n  }\n\n  var length = obj.length;\n\n  if (obj.nodeType === 1 && length) {\n    return true;\n  }\n\n  return isString(obj) || isArray(obj) || length === 0 ||\n         typeof length === 'number' && length > 0 && (length - 1) in obj;\n}\n\n/**\n * @ngdoc function\n * @name angular.forEach\n * @module ng\n * @function\n *\n * @description\n * Invokes the `iterator` function once for each item in `obj` collection, which can be either an\n * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value`\n * is the value of an object property or an array element and `key` is the object property key or\n * array element index. Specifying a `context` for the function is optional.\n *\n * It is worth noting that `.forEach` does not iterate over inherited properties because it filters\n * using the `hasOwnProperty` method.\n *\n   ```js\n     var values = {name: 'misko', gender: 'male'};\n     var log = [];\n     angular.forEach(values, function(value, key){\n       this.push(key + ': ' + value);\n     }, log);\n     expect(log).toEqual(['name: misko', 'gender: male']);\n   ```\n *\n * @param {Object|Array} obj Object to iterate over.\n * @param {Function} iterator Iterator function.\n * @param {Object=} context Object to become context (`this`) for the iterator function.\n * @returns {Object|Array} Reference to `obj`.\n */\nfunction forEach(obj, iterator, context) {\n  var key;\n  if (obj) {\n    if (isFunction(obj)){\n      for (key in obj) {\n        // Need to check if hasOwnProperty exists,\n        // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function\n        if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {\n          iterator.call(context, obj[key], key);\n        }\n      }\n    } else if (obj.forEach && obj.forEach !== forEach) {\n      obj.forEach(iterator, context);\n    } else if (isArrayLike(obj)) {\n      for (key = 0; key < obj.length; key++)\n        iterator.call(context, obj[key], key);\n    } else {\n      for (key in obj) {\n        if (obj.hasOwnProperty(key)) {\n          iterator.call(context, obj[key], key);\n        }\n      }\n    }\n  }\n  return obj;\n}\n\nfunction sortedKeys(obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      keys.push(key);\n    }\n  }\n  return keys.sort();\n}\n\nfunction forEachSorted(obj, iterator, context) {\n  var keys = sortedKeys(obj);\n  for ( var i = 0; i < keys.length; i++) {\n    iterator.call(context, obj[keys[i]], keys[i]);\n  }\n  return keys;\n}\n\n\n/**\n * when using forEach the params are value, key, but it is often useful to have key, value.\n * @param {function(string, *)} iteratorFn\n * @returns {function(*, string)}\n */\nfunction reverseParams(iteratorFn) {\n  return function(value, key) { iteratorFn(key, value); };\n}\n\n/**\n * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric\n * characters such as '012ABC'. The reason why we are not using simply a number counter is that\n * the number string gets longer over time, and it can also overflow, where as the nextId\n * will grow much slower, it is a string, and it will never overflow.\n *\n * @returns {string} an unique alpha-numeric string\n */\nfunction nextUid() {\n  var index = uid.length;\n  var digit;\n\n  while(index) {\n    index--;\n    digit = uid[index].charCodeAt(0);\n    if (digit == 57 /*'9'*/) {\n      uid[index] = 'A';\n      return uid.join('');\n    }\n    if (digit == 90  /*'Z'*/) {\n      uid[index] = '0';\n    } else {\n      uid[index] = String.fromCharCode(digit + 1);\n      return uid.join('');\n    }\n  }\n  uid.unshift('0');\n  return uid.join('');\n}\n\n\n/**\n * Set or clear the hashkey for an object.\n * @param obj object\n * @param h the hashkey (!truthy to delete the hashkey)\n */\nfunction setHashKey(obj, h) {\n  if (h) {\n    obj.$$hashKey = h;\n  }\n  else {\n    delete obj.$$hashKey;\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.extend\n * @module ng\n * @function\n *\n * @description\n * Extends the destination object `dst` by copying all of the properties from the `src` object(s)\n * to `dst`. You can specify multiple `src` objects.\n *\n * @param {Object} dst Destination object.\n * @param {...Object} src Source object(s).\n * @returns {Object} Reference to `dst`.\n */\nfunction extend(dst) {\n  var h = dst.$$hashKey;\n  forEach(arguments, function(obj){\n    if (obj !== dst) {\n      forEach(obj, function(value, key){\n        dst[key] = value;\n      });\n    }\n  });\n\n  setHashKey(dst,h);\n  return dst;\n}\n\nfunction int(str) {\n  return parseInt(str, 10);\n}\n\n\nfunction inherit(parent, extra) {\n  return extend(new (extend(function() {}, {prototype:parent}))(), extra);\n}\n\n/**\n * @ngdoc function\n * @name angular.noop\n * @module ng\n * @function\n *\n * @description\n * A function that performs no operations. This function can be useful when writing code in the\n * functional style.\n   ```js\n     function foo(callback) {\n       var result = calculateResult();\n       (callback || angular.noop)(result);\n     }\n   ```\n */\nfunction noop() {}\nnoop.$inject = [];\n\n\n/**\n * @ngdoc function\n * @name angular.identity\n * @module ng\n * @function\n *\n * @description\n * A function that returns its first argument. This function is useful when writing code in the\n * functional style.\n *\n   ```js\n     function transformer(transformationFn, value) {\n       return (transformationFn || angular.identity)(value);\n     };\n   ```\n */\nfunction identity($) {return $;}\nidentity.$inject = [];\n\n\nfunction valueFn(value) {return function() {return value;};}\n\n/**\n * @ngdoc function\n * @name angular.isUndefined\n * @module ng\n * @function\n *\n * @description\n * Determines if a reference is undefined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is undefined.\n */\nfunction isUndefined(value){return typeof value === 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDefined\n * @module ng\n * @function\n *\n * @description\n * Determines if a reference is defined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is defined.\n */\nfunction isDefined(value){return typeof value !== 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isObject\n * @module ng\n * @function\n *\n * @description\n * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not\n * considered to be objects. Note that JavaScript arrays are objects.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Object` but not `null`.\n */\nfunction isObject(value){return value != null && typeof value === 'object';}\n\n\n/**\n * @ngdoc function\n * @name angular.isString\n * @module ng\n * @function\n *\n * @description\n * Determines if a reference is a `String`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `String`.\n */\nfunction isString(value){return typeof value === 'string';}\n\n\n/**\n * @ngdoc function\n * @name angular.isNumber\n * @module ng\n * @function\n *\n * @description\n * Determines if a reference is a `Number`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Number`.\n */\nfunction isNumber(value){return typeof value === 'number';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDate\n * @module ng\n * @function\n *\n * @description\n * Determines if a value is a date.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Date`.\n */\nfunction isDate(value){\n  return toString.call(value) === '[object Date]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isArray\n * @module ng\n * @function\n *\n * @description\n * Determines if a reference is an `Array`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Array`.\n */\nfunction isArray(value) {\n  return toString.call(value) === '[object Array]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isFunction\n * @module ng\n * @function\n *\n * @description\n * Determines if a reference is a `Function`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Function`.\n */\nfunction isFunction(value){return typeof value === 'function';}\n\n\n/**\n * Determines if a value is a regular expression object.\n *\n * @private\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `RegExp`.\n */\nfunction isRegExp(value) {\n  return toString.call(value) === '[object RegExp]';\n}\n\n\n/**\n * Checks if `obj` is a window object.\n *\n * @private\n * @param {*} obj Object to check\n * @returns {boolean} True if `obj` is a window obj.\n */\nfunction isWindow(obj) {\n  return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n}\n\n\nfunction isScope(obj) {\n  return obj && obj.$evalAsync && obj.$watch;\n}\n\n\nfunction isFile(obj) {\n  return toString.call(obj) === '[object File]';\n}\n\n\nfunction isBlob(obj) {\n  return toString.call(obj) === '[object Blob]';\n}\n\n\nfunction isBoolean(value) {\n  return typeof value === 'boolean';\n}\n\n\nvar trim = (function() {\n  // native trim is way faster: http://jsperf.com/angular-trim-test\n  // but IE doesn't have it... :-(\n  // TODO: we should move this into IE/ES5 polyfill\n  if (!String.prototype.trim) {\n    return function(value) {\n      return isString(value) ? value.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '') : value;\n    };\n  }\n  return function(value) {\n    return isString(value) ? value.trim() : value;\n  };\n})();\n\n\n/**\n * @ngdoc function\n * @name angular.isElement\n * @module ng\n * @function\n *\n * @description\n * Determines if a reference is a DOM element (or wrapped jQuery element).\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).\n */\nfunction isElement(node) {\n  return !!(node &&\n    (node.nodeName  // we are a direct element\n    || (node.prop && node.attr && node.find)));  // we have an on and find method part of jQuery API\n}\n\n/**\n * @param str 'key1,key2,...'\n * @returns {object} in the form of {key1:true, key2:true, ...}\n */\nfunction makeMap(str){\n  var obj = {}, items = str.split(\",\"), i;\n  for ( i = 0; i < items.length; i++ )\n    obj[ items[i] ] = true;\n  return obj;\n}\n\n\nif (msie < 9) {\n  nodeName_ = function(element) {\n    element = element.nodeName ? element : element[0];\n    return (element.scopeName && element.scopeName != 'HTML')\n      ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName;\n  };\n} else {\n  nodeName_ = function(element) {\n    return element.nodeName ? element.nodeName : element[0].nodeName;\n  };\n}\n\n\nfunction map(obj, iterator, context) {\n  var results = [];\n  forEach(obj, function(value, index, list) {\n    results.push(iterator.call(context, value, index, list));\n  });\n  return results;\n}\n\n\n/**\n * @description\n * Determines the number of elements in an array, the number of properties an object has, or\n * the length of a string.\n *\n * Note: This function is used to augment the Object type in Angular expressions. See\n * {@link angular.Object} for more information about Angular arrays.\n *\n * @param {Object|Array|string} obj Object, array, or string to inspect.\n * @param {boolean} [ownPropsOnly=false] Count only \"own\" properties in an object\n * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array.\n */\nfunction size(obj, ownPropsOnly) {\n  var count = 0, key;\n\n  if (isArray(obj) || isString(obj)) {\n    return obj.length;\n  } else if (isObject(obj)){\n    for (key in obj)\n      if (!ownPropsOnly || obj.hasOwnProperty(key))\n        count++;\n  }\n\n  return count;\n}\n\n\nfunction includes(array, obj) {\n  return indexOf(array, obj) != -1;\n}\n\nfunction indexOf(array, obj) {\n  if (array.indexOf) return array.indexOf(obj);\n\n  for (var i = 0; i < array.length; i++) {\n    if (obj === array[i]) return i;\n  }\n  return -1;\n}\n\nfunction arrayRemove(array, value) {\n  var index = indexOf(array, value);\n  if (index >=0)\n    array.splice(index, 1);\n  return value;\n}\n\nfunction isLeafNode (node) {\n  if (node) {\n    switch (node.nodeName) {\n    case \"OPTION\":\n    case \"PRE\":\n    case \"TITLE\":\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * @ngdoc function\n * @name angular.copy\n * @module ng\n * @function\n *\n * @description\n * Creates a deep copy of `source`, which should be an object or an array.\n *\n * * If no destination is supplied, a copy of the object or array is created.\n * * If a destination is provided, all of its elements (for array) or properties (for objects)\n *   are deleted and then all elements/properties from the source are copied to it.\n * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.\n * * If `source` is identical to 'destination' an exception will be thrown.\n *\n * @param {*} source The source that will be used to make a copy.\n *                   Can be any type, including primitives, `null`, and `undefined`.\n * @param {(Object|Array)=} destination Destination into which the source is copied. If\n *     provided, must be of the same type as `source`.\n * @returns {*} The copy or updated `destination`, if `destination` was specified.\n *\n * @example\n <example>\n <file name=\"index.html\">\n <div ng-controller=\"Controller\">\n <form novalidate class=\"simple-form\">\n Name: <input type=\"text\" ng-model=\"user.name\" /><br />\n E-mail: <input type=\"email\" ng-model=\"user.email\" /><br />\n Gender: <input type=\"radio\" ng-model=\"user.gender\" value=\"male\" />male\n <input type=\"radio\" ng-model=\"user.gender\" value=\"female\" />female<br />\n <button ng-click=\"reset()\">RESET</button>\n <button ng-click=\"update(user)\">SAVE</button>\n </form>\n <pre>form = {{user | json}}</pre>\n <pre>master = {{master | json}}</pre>\n </div>\n\n <script>\n function Controller($scope) {\n    $scope.master= {};\n\n    $scope.update = function(user) {\n      // Example with 1 argument\n      $scope.master= angular.copy(user);\n    };\n\n    $scope.reset = function() {\n      // Example with 2 arguments\n      angular.copy($scope.master, $scope.user);\n    };\n\n    $scope.reset();\n  }\n </script>\n </file>\n </example>\n */\nfunction copy(source, destination){\n  if (isWindow(source) || isScope(source)) {\n    throw ngMinErr('cpws',\n      \"Can't copy! Making copies of Window or Scope instances is not supported.\");\n  }\n\n  if (!destination) {\n    destination = source;\n    if (source) {\n      if (isArray(source)) {\n        destination = copy(source, []);\n      } else if (isDate(source)) {\n        destination = new Date(source.getTime());\n      } else if (isRegExp(source)) {\n        destination = new RegExp(source.source);\n      } else if (isObject(source)) {\n        destination = copy(source, {});\n      }\n    }\n  } else {\n    if (source === destination) throw ngMinErr('cpi',\n      \"Can't copy! Source and destination are identical.\");\n    if (isArray(source)) {\n      destination.length = 0;\n      for ( var i = 0; i < source.length; i++) {\n        destination.push(copy(source[i]));\n      }\n    } else {\n      var h = destination.$$hashKey;\n      forEach(destination, function(value, key){\n        delete destination[key];\n      });\n      for ( var key in source) {\n        destination[key] = copy(source[key]);\n      }\n      setHashKey(destination,h);\n    }\n  }\n  return destination;\n}\n\n/**\n * Create a shallow copy of an object\n */\nfunction shallowCopy(src, dst) {\n  dst = dst || {};\n\n  for(var key in src) {\n    // shallowCopy is only ever called by $compile nodeLinkFn, which has control over src\n    // so we don't need to worry about using our custom hasOwnProperty here\n    if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n      dst[key] = src[key];\n    }\n  }\n\n  return dst;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.equals\n * @module ng\n * @function\n *\n * @description\n * Determines if two objects or two values are equivalent. Supports value types, regular\n * expressions, arrays and objects.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `angular.equals`.\n * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)\n * * Both values represent the same regular expression (In JavasScript,\n *   /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual\n *   representation matches).\n *\n * During a property comparison, properties of `function` type and properties with names\n * that begin with `$` are ignored.\n *\n * Scope and DOMWindow objects are being compared only by identify (`===`).\n *\n * @param {*} o1 Object or value to compare.\n * @param {*} o2 Object or value to compare.\n * @returns {boolean} True if arguments are equal.\n */\nfunction equals(o1, o2) {\n  if (o1 === o2) return true;\n  if (o1 === null || o2 === null) return false;\n  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN\n  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;\n  if (t1 == t2) {\n    if (t1 == 'object') {\n      if (isArray(o1)) {\n        if (!isArray(o2)) return false;\n        if ((length = o1.length) == o2.length) {\n          for(key=0; key<length; key++) {\n            if (!equals(o1[key], o2[key])) return false;\n          }\n          return true;\n        }\n      } else if (isDate(o1)) {\n        return isDate(o2) && o1.getTime() == o2.getTime();\n      } else if (isRegExp(o1) && isRegExp(o2)) {\n        return o1.toString() == o2.toString();\n      } else {\n        if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;\n        keySet = {};\n        for(key in o1) {\n          if (key.charAt(0) === '$' || isFunction(o1[key])) continue;\n          if (!equals(o1[key], o2[key])) return false;\n          keySet[key] = true;\n        }\n        for(key in o2) {\n          if (!keySet.hasOwnProperty(key) &&\n              key.charAt(0) !== '$' &&\n              o2[key] !== undefined &&\n              !isFunction(o2[key])) return false;\n        }\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n\nfunction csp() {\n  return (document.securityPolicy && document.securityPolicy.isActive) ||\n      (document.querySelector &&\n      !!(document.querySelector('[ng-csp]') || document.querySelector('[data-ng-csp]')));\n}\n\n\nfunction concat(array1, array2, index) {\n  return array1.concat(slice.call(array2, index));\n}\n\nfunction sliceArgs(args, startIndex) {\n  return slice.call(args, startIndex || 0);\n}\n\n\n/* jshint -W101 */\n/**\n * @ngdoc function\n * @name angular.bind\n * @module ng\n * @function\n *\n * @description\n * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for\n * `fn`). You can supply optional `args` that are prebound to the function. This feature is also\n * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as\n * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).\n *\n * @param {Object} self Context which `fn` should be evaluated in.\n * @param {function()} fn Function to be bound.\n * @param {...*} args Optional arguments to be prebound to the `fn` function call.\n * @returns {function()} Function that wraps the `fn` with all the specified bindings.\n */\n/* jshint +W101 */\nfunction bind(self, fn) {\n  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];\n  if (isFunction(fn) && !(fn instanceof RegExp)) {\n    return curryArgs.length\n      ? function() {\n          return arguments.length\n            ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0)))\n            : fn.apply(self, curryArgs);\n        }\n      : function() {\n          return arguments.length\n            ? fn.apply(self, arguments)\n            : fn.call(self);\n        };\n  } else {\n    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)\n    return fn;\n  }\n}\n\n\nfunction toJsonReplacer(key, value) {\n  var val = value;\n\n  if (typeof key === 'string' && key.charAt(0) === '$') {\n    val = undefined;\n  } else if (isWindow(value)) {\n    val = '$WINDOW';\n  } else if (value &&  document === value) {\n    val = '$DOCUMENT';\n  } else if (isScope(value)) {\n    val = '$SCOPE';\n  }\n\n  return val;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.toJson\n * @module ng\n * @function\n *\n * @description\n * Serializes input into a JSON-formatted string. Properties with leading $ characters will be\n * stripped since angular uses this notation internally.\n *\n * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.\n * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.\n * @returns {string|undefined} JSON-ified string representing `obj`.\n */\nfunction toJson(obj, pretty) {\n  if (typeof obj === 'undefined') return undefined;\n  return JSON.stringify(obj, toJsonReplacer, pretty ? '  ' : null);\n}\n\n\n/**\n * @ngdoc function\n * @name angular.fromJson\n * @module ng\n * @function\n *\n * @description\n * Deserializes a JSON string.\n *\n * @param {string} json JSON string to deserialize.\n * @returns {Object|Array|string|number} Deserialized thingy.\n */\nfunction fromJson(json) {\n  return isString(json)\n      ? JSON.parse(json)\n      : json;\n}\n\n\nfunction toBoolean(value) {\n  if (typeof value === 'function') {\n    value = true;\n  } else if (value && value.length !== 0) {\n    var v = lowercase(\"\" + value);\n    value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');\n  } else {\n    value = false;\n  }\n  return value;\n}\n\n/**\n * @returns {string} Returns the string representation of the element.\n */\nfunction startingTag(element) {\n  element = jqLite(element).clone();\n  try {\n    // turns out IE does not let you set .html() on elements which\n    // are not allowed to have children. So we just ignore it.\n    element.empty();\n  } catch(e) {}\n  // As Per DOM Standards\n  var TEXT_NODE = 3;\n  var elemHtml = jqLite('<div>').append(element).html();\n  try {\n    return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) :\n        elemHtml.\n          match(/^(<[^>]+>)/)[1].\n          replace(/^<([\\w\\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });\n  } catch(e) {\n    return lowercase(elemHtml);\n  }\n\n}\n\n\n/////////////////////////////////////////////////\n\n/**\n * Tries to decode the URI component without throwing an exception.\n *\n * @private\n * @param str value potential URI component to check.\n * @returns {boolean} True if `value` can be decoded\n * with the decodeURIComponent function.\n */\nfunction tryDecodeURIComponent(value) {\n  try {\n    return decodeURIComponent(value);\n  } catch(e) {\n    // Ignore any invalid uri component\n  }\n}\n\n\n/**\n * Parses an escaped url query string into key-value pairs.\n * @returns {Object.<string,boolean|Array>}\n */\nfunction parseKeyValue(/**string*/keyValue) {\n  var obj = {}, key_value, key;\n  forEach((keyValue || \"\").split('&'), function(keyValue){\n    if ( keyValue ) {\n      key_value = keyValue.split('=');\n      key = tryDecodeURIComponent(key_value[0]);\n      if ( isDefined(key) ) {\n        var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;\n        if (!obj[key]) {\n          obj[key] = val;\n        } else if(isArray(obj[key])) {\n          obj[key].push(val);\n        } else {\n          obj[key] = [obj[key],val];\n        }\n      }\n    }\n  });\n  return obj;\n}\n\nfunction toKeyValue(obj) {\n  var parts = [];\n  forEach(obj, function(value, key) {\n    if (isArray(value)) {\n      forEach(value, function(arrayValue) {\n        parts.push(encodeUriQuery(key, true) +\n                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));\n      });\n    } else {\n    parts.push(encodeUriQuery(key, true) +\n               (value === true ? '' : '=' + encodeUriQuery(value, true)));\n    }\n  });\n  return parts.length ? parts.join('&') : '';\n}\n\n\n/**\n * We need our custom method because encodeURIComponent is too aggressive and doesn't follow\n * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path\n * segments:\n *    segment       = *pchar\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriSegment(val) {\n  return encodeUriQuery(val, true).\n             replace(/%26/gi, '&').\n             replace(/%3D/gi, '=').\n             replace(/%2B/gi, '+');\n}\n\n\n/**\n * This method is intended for encoding *key* or *value* parts of query component. We need a custom\n * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be\n * encoded per http://tools.ietf.org/html/rfc3986:\n *    query       = *( pchar / \"/\" / \"?\" )\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriQuery(val, pctEncodeSpaces) {\n  return encodeURIComponent(val).\n             replace(/%40/gi, '@').\n             replace(/%3A/gi, ':').\n             replace(/%24/g, '$').\n             replace(/%2C/gi, ',').\n             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));\n}\n\n\n/**\n * @ngdoc directive\n * @name ngApp\n * @module ng\n *\n * @element ANY\n * @param {angular.Module} ngApp an optional application\n *   {@link angular.module module} name to load.\n *\n * @description\n *\n * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive\n * designates the **root element** of the application and is typically placed near the root element\n * of the page - e.g. on the `<body>` or `<html>` tags.\n *\n * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`\n * found in the document will be used to define the root element to auto-bootstrap as an\n * application. To run multiple applications in an HTML document you must manually bootstrap them using\n * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.\n *\n * You can specify an **AngularJS module** to be used as the root module for the application.  This\n * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and\n * should contain the application code needed or have dependencies on other modules that will\n * contain the code. See {@link angular.module} for more information.\n *\n * In the example below if the `ngApp` directive were not placed on the `html` element then the\n * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`\n * would not be resolved to `3`.\n *\n * `ngApp` is the easiest, and most common, way to bootstrap an application.\n *\n <example module=\"ngAppDemo\">\n   <file name=\"index.html\">\n   <div ng-controller=\"ngAppDemoController\">\n     I can add: {{a}} + {{b}} =  {{ a+b }}\n   </div>\n   </file>\n   <file name=\"script.js\">\n   angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {\n     $scope.a = 1;\n     $scope.b = 2;\n   });\n   </file>\n </example>\n *\n */\nfunction angularInit(element, bootstrap) {\n  var elements = [element],\n      appElement,\n      module,\n      names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],\n      NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/;\n\n  function append(element) {\n    element && elements.push(element);\n  }\n\n  forEach(names, function(name) {\n    names[name] = true;\n    append(document.getElementById(name));\n    name = name.replace(':', '\\\\:');\n    if (element.querySelectorAll) {\n      forEach(element.querySelectorAll('.' + name), append);\n      forEach(element.querySelectorAll('.' + name + '\\\\:'), append);\n      forEach(element.querySelectorAll('[' + name + ']'), append);\n    }\n  });\n\n  forEach(elements, function(element) {\n    if (!appElement) {\n      var className = ' ' + element.className + ' ';\n      var match = NG_APP_CLASS_REGEXP.exec(className);\n      if (match) {\n        appElement = element;\n        module = (match[2] || '').replace(/\\s+/g, ',');\n      } else {\n        forEach(element.attributes, function(attr) {\n          if (!appElement && names[attr.name]) {\n            appElement = element;\n            module = attr.value;\n          }\n        });\n      }\n    }\n  });\n  if (appElement) {\n    bootstrap(appElement, module ? [module] : []);\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.bootstrap\n * @module ng\n * @description\n * Use this function to manually start up angular application.\n *\n * See: {@link guide/bootstrap Bootstrap}\n *\n * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually.\n * They must use {@link ng.directive:ngApp ngApp}.\n *\n * Angular will detect if it has been loaded into the browser more than once and only allow the\n * first loaded script to be bootstrapped and will report a warning to the browser console for\n * each of the subsequent scripts.   This prevents strange results in applications, where otherwise\n * multiple instances of Angular try to work on the DOM.\n *\n * <example name=\"multi-bootstrap\" module=\"multi-bootstrap\">\n * <file name=\"index.html\">\n * <script src=\"../../../angular.js\"></script>\n * <div ng-controller=\"BrokenTable\">\n *   <table>\n *   <tr>\n *     <th ng-repeat=\"heading in headings\">{{heading}}</th>\n *   </tr>\n *   <tr ng-repeat=\"filling in fillings\">\n *     <td ng-repeat=\"fill in filling\">{{fill}}</td>\n *   </tr>\n * </table>\n * </div>\n * </file>\n * <file name=\"controller.js\">\n * var app = angular.module('multi-bootstrap', [])\n *\n * .controller('BrokenTable', function($scope) {\n *     $scope.headings = ['One', 'Two', 'Three'];\n *     $scope.fillings = [[1, 2, 3], ['A', 'B', 'C'], [7, 8, 9]];\n * });\n * </file>\n * <file name=\"protractor.js\" type=\"protractor\">\n * it('should only insert one table cell for each item in $scope.fillings', function() {\n *  expect(element.all(by.css('td')).count())\n *      .toBe(9);\n * });\n * </file>\n * </example>\n *\n * @param {DOMElement} element DOM element which is the root of angular application.\n * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.\n *     Each item in the array should be the name of a predefined module or a (DI annotated)\n *     function that will be invoked by the injector as a run block.\n *     See: {@link angular.module modules}\n * @returns {auto.$injector} Returns the newly created injector for this app.\n */\nfunction bootstrap(element, modules) {\n  var doBootstrap = function() {\n    element = jqLite(element);\n\n    if (element.injector()) {\n      var tag = (element[0] === document) ? 'document' : startingTag(element);\n      throw ngMinErr('btstrpd', \"App Already Bootstrapped with this Element '{0}'\", tag);\n    }\n\n    modules = modules || [];\n    modules.unshift(['$provide', function($provide) {\n      $provide.value('$rootElement', element);\n    }]);\n    modules.unshift('ng');\n    var injector = createInjector(modules);\n    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate',\n       function(scope, element, compile, injector, animate) {\n        scope.$apply(function() {\n          element.data('$injector', injector);\n          compile(element)(scope);\n        });\n      }]\n    );\n    return injector;\n  };\n\n  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;\n\n  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {\n    return doBootstrap();\n  }\n\n  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');\n  angular.resumeBootstrap = function(extraModules) {\n    forEach(extraModules, function(module) {\n      modules.push(module);\n    });\n    doBootstrap();\n  };\n}\n\nvar SNAKE_CASE_REGEXP = /[A-Z]/g;\nfunction snake_case(name, separator){\n  separator = separator || '_';\n  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n    return (pos ? separator : '') + letter.toLowerCase();\n  });\n}\n\nfunction bindJQuery() {\n  // bind to jQuery if present;\n  jQuery = window.jQuery;\n  // reset to jQuery or default to us.\n  if (jQuery) {\n    jqLite = jQuery;\n    extend(jQuery.fn, {\n      scope: JQLitePrototype.scope,\n      isolateScope: JQLitePrototype.isolateScope,\n      controller: JQLitePrototype.controller,\n      injector: JQLitePrototype.injector,\n      inheritedData: JQLitePrototype.inheritedData\n    });\n    // Method signature:\n    //     jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments)\n    jqLitePatchJQueryRemove('remove', true, true, false);\n    jqLitePatchJQueryRemove('empty', false, false, false);\n    jqLitePatchJQueryRemove('html', false, false, true);\n  } else {\n    jqLite = JQLite;\n  }\n  angular.element = jqLite;\n}\n\n/**\n * throw error if the argument is falsy.\n */\nfunction assertArg(arg, name, reason) {\n  if (!arg) {\n    throw ngMinErr('areq', \"Argument '{0}' is {1}\", (name || '?'), (reason || \"required\"));\n  }\n  return arg;\n}\n\nfunction assertArgFn(arg, name, acceptArrayAnnotation) {\n  if (acceptArrayAnnotation && isArray(arg)) {\n      arg = arg[arg.length - 1];\n  }\n\n  assertArg(isFunction(arg), name, 'not a function, got ' +\n      (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg));\n  return arg;\n}\n\n/**\n * throw error if the name given is hasOwnProperty\n * @param  {String} name    the name to test\n * @param  {String} context the context in which the name is used, such as module or directive\n */\nfunction assertNotHasOwnProperty(name, context) {\n  if (name === 'hasOwnProperty') {\n    throw ngMinErr('badname', \"hasOwnProperty is not a valid {0} name\", context);\n  }\n}\n\n/**\n * Return the value accessible from the object by path. Any undefined traversals are ignored\n * @param {Object} obj starting object\n * @param {String} path path to traverse\n * @param {boolean} [bindFnToScope=true]\n * @returns {Object} value as accessible by path\n */\n//TODO(misko): this function needs to be removed\nfunction getter(obj, path, bindFnToScope) {\n  if (!path) return obj;\n  var keys = path.split('.');\n  var key;\n  var lastInstance = obj;\n  var len = keys.length;\n\n  for (var i = 0; i < len; i++) {\n    key = keys[i];\n    if (obj) {\n      obj = (lastInstance = obj)[key];\n    }\n  }\n  if (!bindFnToScope && isFunction(obj)) {\n    return bind(lastInstance, obj);\n  }\n  return obj;\n}\n\n/**\n * Return the DOM siblings between the first and last node in the given array.\n * @param {Array} array like object\n * @returns {DOMElement} object containing the elements\n */\nfunction getBlockElements(nodes) {\n  var startNode = nodes[0],\n      endNode = nodes[nodes.length - 1];\n  if (startNode === endNode) {\n    return jqLite(startNode);\n  }\n\n  var element = startNode;\n  var elements = [element];\n\n  do {\n    element = element.nextSibling;\n    if (!element) break;\n    elements.push(element);\n  } while (element !== endNode);\n\n  return jqLite(elements);\n}\n\n/**\n * @ngdoc type\n * @name angular.Module\n * @module ng\n * @description\n *\n * Interface for configuring angular {@link angular.module modules}.\n */\n\nfunction setupModuleLoader(window) {\n\n  var $injectorMinErr = minErr('$injector');\n  var ngMinErr = minErr('ng');\n\n  function ensure(obj, name, factory) {\n    return obj[name] || (obj[name] = factory());\n  }\n\n  var angular = ensure(window, 'angular', Object);\n\n  // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap\n  angular.$$minErr = angular.$$minErr || minErr;\n\n  return ensure(angular, 'module', function() {\n    /** @type {Object.<string, angular.Module>} */\n    var modules = {};\n\n    /**\n     * @ngdoc function\n     * @name angular.module\n     * @module ng\n     * @description\n     *\n     * The `angular.module` is a global place for creating, registering and retrieving Angular\n     * modules.\n     * All modules (angular core or 3rd party) that should be available to an application must be\n     * registered using this mechanism.\n     *\n     * When passed two or more arguments, a new module is created.  If passed only one argument, an\n     * existing module (the name passed as the first argument to `module`) is retrieved.\n     *\n     *\n     * # Module\n     *\n     * A module is a collection of services, directives, filters, and configuration information.\n     * `angular.module` is used to configure the {@link auto.$injector $injector}.\n     *\n     * ```js\n     * // Create a new module\n     * var myModule = angular.module('myModule', []);\n     *\n     * // register a new service\n     * myModule.value('appName', 'MyCoolApp');\n     *\n     * // configure existing services inside initialization blocks.\n     * myModule.config(['$locationProvider', function($locationProvider) {\n     *   // Configure existing providers\n     *   $locationProvider.hashPrefix('!');\n     * }]);\n     * ```\n     *\n     * Then you can create an injector and load your modules like this:\n     *\n     * ```js\n     * var injector = angular.injector(['ng', 'myModule'])\n     * ```\n     *\n     * However it's more likely that you'll just use\n     * {@link ng.directive:ngApp ngApp} or\n     * {@link angular.bootstrap} to simplify this process for you.\n     *\n     * @param {!string} name The name of the module to create or retrieve.\n<<<<<* @param {!Array.<string>=} requires If specified then new module is being created. If\n>>>>>*        unspecified then the module is being retrieved for further configuration.\n     * @param {Function} configFn Optional configuration function for the module. Same as\n     *        {@link angular.Module#config Module#config()}.\n     * @returns {module} new module with the {@link angular.Module} api.\n     */\n    return function module(name, requires, configFn) {\n      var assertNotHasOwnProperty = function(name, context) {\n        if (name === 'hasOwnProperty') {\n          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);\n        }\n      };\n\n      assertNotHasOwnProperty(name, 'module');\n      if (requires && modules.hasOwnProperty(name)) {\n        modules[name] = null;\n      }\n      return ensure(modules, name, function() {\n        if (!requires) {\n          throw $injectorMinErr('nomod', \"Module '{0}' is not available! You either misspelled \" +\n             \"the module name or forgot to load it. If registering a module ensure that you \" +\n             \"specify the dependencies as the second argument.\", name);\n        }\n\n        /** @type {!Array.<Array.<*>>} */\n        var invokeQueue = [];\n\n        /** @type {!Array.<Function>} */\n        var runBlocks = [];\n\n        var config = invokeLater('$injector', 'invoke');\n\n        /** @type {angular.Module} */\n        var moduleInstance = {\n          // Private state\n          _invokeQueue: invokeQueue,\n          _runBlocks: runBlocks,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#requires\n           * @module ng\n           * @returns {Array.<string>} List of module names which must be loaded before this module.\n           * @description\n           * Holds the list of modules which the injector will load before the current module is\n           * loaded.\n           */\n          requires: requires,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#name\n           * @module ng\n           * @returns {string} Name of the module.\n           * @description\n           */\n          name: name,\n\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#provider\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerType Construction function for creating new instance of the\n           *                                service.\n           * @description\n           * See {@link auto.$provide#provider $provide.provider()}.\n           */\n          provider: invokeLater('$provide', 'provider'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#factory\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerFunction Function for creating new instance of the service.\n           * @description\n           * See {@link auto.$provide#factory $provide.factory()}.\n           */\n          factory: invokeLater('$provide', 'factory'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#service\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} constructor A constructor function that will be instantiated.\n           * @description\n           * See {@link auto.$provide#service $provide.service()}.\n           */\n          service: invokeLater('$provide', 'service'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#value\n           * @module ng\n           * @param {string} name service name\n           * @param {*} object Service instance object.\n           * @description\n           * See {@link auto.$provide#value $provide.value()}.\n           */\n          value: invokeLater('$provide', 'value'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#constant\n           * @module ng\n           * @param {string} name constant name\n           * @param {*} object Constant value.\n           * @description\n           * Because the constant are fixed, they get applied before other provide methods.\n           * See {@link auto.$provide#constant $provide.constant()}.\n           */\n          constant: invokeLater('$provide', 'constant', 'unshift'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#animation\n           * @module ng\n           * @param {string} name animation name\n           * @param {Function} animationFactory Factory function for creating new instance of an\n           *                                    animation.\n           * @description\n           *\n           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.\n           *\n           *\n           * Defines an animation hook that can be later used with\n           * {@link ngAnimate.$animate $animate} service and directives that use this service.\n           *\n           * ```js\n           * module.animation('.animation-name', function($inject1, $inject2) {\n           *   return {\n           *     eventName : function(element, done) {\n           *       //code to run the animation\n           *       //once complete, then run done()\n           *       return function cancellationFunction(element) {\n           *         //code to cancel the animation\n           *       }\n           *     }\n           *   }\n           * })\n           * ```\n           *\n           * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and\n           * {@link ngAnimate ngAnimate module} for more information.\n           */\n          animation: invokeLater('$animateProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#filter\n           * @module ng\n           * @param {string} name Filter name.\n           * @param {Function} filterFactory Factory function for creating new instance of filter.\n           * @description\n           * See {@link ng.$filterProvider#register $filterProvider.register()}.\n           */\n          filter: invokeLater('$filterProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#controller\n           * @module ng\n           * @param {string|Object} name Controller name, or an object map of controllers where the\n           *    keys are the names and the values are the constructors.\n           * @param {Function} constructor Controller constructor function.\n           * @description\n           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.\n           */\n          controller: invokeLater('$controllerProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#directive\n           * @module ng\n           * @param {string|Object} name Directive name, or an object map of directives where the\n           *    keys are the names and the values are the factories.\n           * @param {Function} directiveFactory Factory function for creating new instance of\n           * directives.\n           * @description\n           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.\n           */\n          directive: invokeLater('$compileProvider', 'directive'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#config\n           * @module ng\n           * @param {Function} configFn Execute this function on module load. Useful for service\n           *    configuration.\n           * @description\n           * Use this method to register work which needs to be performed on module loading.\n           */\n          config: config,\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#run\n           * @module ng\n           * @param {Function} initializationFn Execute this function after injector creation.\n           *    Useful for application initialization.\n           * @description\n           * Use this method to register work which should be performed when the injector is done\n           * loading all modules.\n           */\n          run: function(block) {\n            runBlocks.push(block);\n            return this;\n          }\n        };\n\n        if (configFn) {\n          config(configFn);\n        }\n\n        return  moduleInstance;\n\n        /**\n         * @param {string} provider\n         * @param {string} method\n         * @param {String=} insertMethod\n         * @returns {angular.Module}\n         */\n        function invokeLater(provider, method, insertMethod) {\n          return function() {\n            invokeQueue[insertMethod || 'push']([provider, method, arguments]);\n            return moduleInstance;\n          };\n        }\n      });\n    };\n  });\n\n}\n\n/* global\n    angularModule: true,\n    version: true,\n\n    $LocaleProvider,\n    $CompileProvider,\n\n    htmlAnchorDirective,\n    inputDirective,\n    inputDirective,\n    formDirective,\n    scriptDirective,\n    selectDirective,\n    styleDirective,\n    optionDirective,\n    ngBindDirective,\n    ngBindHtmlDirective,\n    ngBindTemplateDirective,\n    ngClassDirective,\n    ngClassEvenDirective,\n    ngClassOddDirective,\n    ngCspDirective,\n    ngCloakDirective,\n    ngControllerDirective,\n    ngFormDirective,\n    ngHideDirective,\n    ngIfDirective,\n    ngIncludeDirective,\n    ngIncludeFillContentDirective,\n    ngInitDirective,\n    ngNonBindableDirective,\n    ngPluralizeDirective,\n    ngRepeatDirective,\n    ngShowDirective,\n    ngStyleDirective,\n    ngSwitchDirective,\n    ngSwitchWhenDirective,\n    ngSwitchDefaultDirective,\n    ngOptionsDirective,\n    ngTranscludeDirective,\n    ngModelDirective,\n    ngListDirective,\n    ngChangeDirective,\n    requiredDirective,\n    requiredDirective,\n    ngValueDirective,\n    ngAttributeAliasDirectives,\n    ngEventDirectives,\n\n    $AnchorScrollProvider,\n    $AnimateProvider,\n    $BrowserProvider,\n    $CacheFactoryProvider,\n    $ControllerProvider,\n    $DocumentProvider,\n    $ExceptionHandlerProvider,\n    $FilterProvider,\n    $InterpolateProvider,\n    $IntervalProvider,\n    $HttpProvider,\n    $HttpBackendProvider,\n    $LocationProvider,\n    $LogProvider,\n    $ParseProvider,\n    $RootScopeProvider,\n    $QProvider,\n    $$SanitizeUriProvider,\n    $SceProvider,\n    $SceDelegateProvider,\n    $SnifferProvider,\n    $TemplateCacheProvider,\n    $TimeoutProvider,\n    $$RAFProvider,\n    $$AsyncCallbackProvider,\n    $WindowProvider\n*/\n\n\n/**\n * @ngdoc object\n * @name angular.version\n * @module ng\n * @description\n * An object that contains information about the current AngularJS version. This object has the\n * following properties:\n *\n * - `full` – `{string}` – Full version string, such as \"0.9.18\".\n * - `major` – `{number}` – Major version number, such as \"0\".\n * - `minor` – `{number}` – Minor version number, such as \"9\".\n * - `dot` – `{number}` – Dot version number, such as \"18\".\n * - `codeName` – `{string}` – Code name of the release, such as \"jiggling-armfat\".\n */\nvar version = {\n  full: '1.2.16',    // all of these placeholder strings will be replaced by grunt's\n  major: 1,    // package task\n  minor: 2,\n  dot: 16,\n  codeName: 'badger-enumeration'\n};\n\n\nfunction publishExternalAPI(angular){\n  extend(angular, {\n    'bootstrap': bootstrap,\n    'copy': copy,\n    'extend': extend,\n    'equals': equals,\n    'element': jqLite,\n    'forEach': forEach,\n    'injector': createInjector,\n    'noop':noop,\n    'bind':bind,\n    'toJson': toJson,\n    'fromJson': fromJson,\n    'identity':identity,\n    'isUndefined': isUndefined,\n    'isDefined': isDefined,\n    'isString': isString,\n    'isFunction': isFunction,\n    'isObject': isObject,\n    'isNumber': isNumber,\n    'isElement': isElement,\n    'isArray': isArray,\n    'version': version,\n    'isDate': isDate,\n    'lowercase': lowercase,\n    'uppercase': uppercase,\n    'callbacks': {counter: 0},\n    '$$minErr': minErr,\n    '$$csp': csp\n  });\n\n  angularModule = setupModuleLoader(window);\n  try {\n    angularModule('ngLocale');\n  } catch (e) {\n    angularModule('ngLocale', []).provider('$locale', $LocaleProvider);\n  }\n\n  angularModule('ng', ['ngLocale'], ['$provide',\n    function ngModule($provide) {\n      // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.\n      $provide.provider({\n        $$sanitizeUri: $$SanitizeUriProvider\n      });\n      $provide.provider('$compile', $CompileProvider).\n        directive({\n            a: htmlAnchorDirective,\n            input: inputDirective,\n            textarea: inputDirective,\n            form: formDirective,\n            script: scriptDirective,\n            select: selectDirective,\n            style: styleDirective,\n            option: optionDirective,\n            ngBind: ngBindDirective,\n            ngBindHtml: ngBindHtmlDirective,\n            ngBindTemplate: ngBindTemplateDirective,\n            ngClass: ngClassDirective,\n            ngClassEven: ngClassEvenDirective,\n            ngClassOdd: ngClassOddDirective,\n            ngCloak: ngCloakDirective,\n            ngController: ngControllerDirective,\n            ngForm: ngFormDirective,\n            ngHide: ngHideDirective,\n            ngIf: ngIfDirective,\n            ngInclude: ngIncludeDirective,\n            ngInit: ngInitDirective,\n            ngNonBindable: ngNonBindableDirective,\n            ngPluralize: ngPluralizeDirective,\n            ngRepeat: ngRepeatDirective,\n            ngShow: ngShowDirective,\n            ngStyle: ngStyleDirective,\n            ngSwitch: ngSwitchDirective,\n            ngSwitchWhen: ngSwitchWhenDirective,\n            ngSwitchDefault: ngSwitchDefaultDirective,\n            ngOptions: ngOptionsDirective,\n            ngTransclude: ngTranscludeDirective,\n            ngModel: ngModelDirective,\n            ngList: ngListDirective,\n            ngChange: ngChangeDirective,\n            required: requiredDirective,\n            ngRequired: requiredDirective,\n            ngValue: ngValueDirective\n        }).\n        directive({\n          ngInclude: ngIncludeFillContentDirective\n        }).\n        directive(ngAttributeAliasDirectives).\n        directive(ngEventDirectives);\n      $provide.provider({\n        $anchorScroll: $AnchorScrollProvider,\n        $animate: $AnimateProvider,\n        $browser: $BrowserProvider,\n        $cacheFactory: $CacheFactoryProvider,\n        $controller: $ControllerProvider,\n        $document: $DocumentProvider,\n        $exceptionHandler: $ExceptionHandlerProvider,\n        $filter: $FilterProvider,\n        $interpolate: $InterpolateProvider,\n        $interval: $IntervalProvider,\n        $http: $HttpProvider,\n        $httpBackend: $HttpBackendProvider,\n        $location: $LocationProvider,\n        $log: $LogProvider,\n        $parse: $ParseProvider,\n        $rootScope: $RootScopeProvider,\n        $q: $QProvider,\n        $sce: $SceProvider,\n        $sceDelegate: $SceDelegateProvider,\n        $sniffer: $SnifferProvider,\n        $templateCache: $TemplateCacheProvider,\n        $timeout: $TimeoutProvider,\n        $window: $WindowProvider,\n        $$rAF: $$RAFProvider,\n        $$asyncCallback : $$AsyncCallbackProvider\n      });\n    }\n  ]);\n}\n\n/* global\n\n  -JQLitePrototype,\n  -addEventListenerFn,\n  -removeEventListenerFn,\n  -BOOLEAN_ATTR\n*/\n\n//////////////////////////////////\n//JQLite\n//////////////////////////////////\n\n/**\n * @ngdoc function\n * @name angular.element\n * @module ng\n * @function\n *\n * @description\n * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.\n *\n * If jQuery is available, `angular.element` is an alias for the\n * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`\n * delegates to Angular's built-in subset of jQuery, called \"jQuery lite\" or \"jqLite.\"\n *\n * <div class=\"alert alert-success\">jqLite is a tiny, API-compatible subset of jQuery that allows\n * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most\n * commonly needed functionality with the goal of having a very small footprint.</div>\n *\n * To use jQuery, simply load it before `DOMContentLoaded` event fired.\n *\n * <div class=\"alert\">**Note:** all element references in Angular are always wrapped with jQuery or\n * jqLite; they are never raw DOM references.</div>\n *\n * ## Angular's jqLite\n * jqLite provides only the following jQuery methods:\n *\n * - [`addClass()`](http://api.jquery.com/addClass/)\n * - [`after()`](http://api.jquery.com/after/)\n * - [`append()`](http://api.jquery.com/append/)\n * - [`attr()`](http://api.jquery.com/attr/)\n * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData\n * - [`children()`](http://api.jquery.com/children/) - Does not support selectors\n * - [`clone()`](http://api.jquery.com/clone/)\n * - [`contents()`](http://api.jquery.com/contents/)\n * - [`css()`](http://api.jquery.com/css/)\n * - [`data()`](http://api.jquery.com/data/)\n * - [`empty()`](http://api.jquery.com/empty/)\n * - [`eq()`](http://api.jquery.com/eq/)\n * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name\n * - [`hasClass()`](http://api.jquery.com/hasClass/)\n * - [`html()`](http://api.jquery.com/html/)\n * - [`next()`](http://api.jquery.com/next/) - Does not support selectors\n * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData\n * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors\n * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors\n * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors\n * - [`prepend()`](http://api.jquery.com/prepend/)\n * - [`prop()`](http://api.jquery.com/prop/)\n * - [`ready()`](http://api.jquery.com/ready/)\n * - [`remove()`](http://api.jquery.com/remove/)\n * - [`removeAttr()`](http://api.jquery.com/removeAttr/)\n * - [`removeClass()`](http://api.jquery.com/removeClass/)\n * - [`removeData()`](http://api.jquery.com/removeData/)\n * - [`replaceWith()`](http://api.jquery.com/replaceWith/)\n * - [`text()`](http://api.jquery.com/text/)\n * - [`toggleClass()`](http://api.jquery.com/toggleClass/)\n * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.\n * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces\n * - [`val()`](http://api.jquery.com/val/)\n * - [`wrap()`](http://api.jquery.com/wrap/)\n *\n * ## jQuery/jqLite Extras\n * Angular also provides the following additional methods and events to both jQuery and jqLite:\n *\n * ### Events\n * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event\n *    on all DOM nodes being removed.  This can be used to clean up any 3rd party bindings to the DOM\n *    element before it is removed.\n *\n * ### Methods\n * - `controller(name)` - retrieves the controller of the current element or its parent. By default\n *   retrieves controller associated with the `ngController` directive. If `name` is provided as\n *   camelCase directive name, then the controller for this directive will be retrieved (e.g.\n *   `'ngModel'`).\n * - `injector()` - retrieves the injector of the current element or its parent.\n * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current\n *   element or its parent.\n * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the\n *   current element. This getter should be used only on elements that contain a directive which starts a new isolate\n *   scope. Calling `scope()` on this element always returns the original non-isolate scope.\n * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top\n *   parent element is reached.\n *\n * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.\n * @returns {Object} jQuery object.\n */\n\nvar jqCache = JQLite.cache = {},\n    jqName = JQLite.expando = 'ng-' + new Date().getTime(),\n    jqId = 1,\n    addEventListenerFn = (window.document.addEventListener\n      ? function(element, type, fn) {element.addEventListener(type, fn, false);}\n      : function(element, type, fn) {element.attachEvent('on' + type, fn);}),\n    removeEventListenerFn = (window.document.removeEventListener\n      ? function(element, type, fn) {element.removeEventListener(type, fn, false); }\n      : function(element, type, fn) {element.detachEvent('on' + type, fn); });\n\n/*\n * !!! This is an undocumented \"private\" function !!!\n */\nvar jqData = JQLite._data = function(node) {\n  //jQuery always returns an object on cache miss\n  return this.cache[node[this.expando]] || {};\n};\n\nfunction jqNextId() { return ++jqId; }\n\n\nvar SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nvar MOZ_HACK_REGEXP = /^moz([A-Z])/;\nvar jqLiteMinErr = minErr('jqLite');\n\n/**\n * Converts snake_case to camelCase.\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction camelCase(name) {\n  return name.\n    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {\n      return offset ? letter.toUpperCase() : letter;\n    }).\n    replace(MOZ_HACK_REGEXP, 'Moz$1');\n}\n\n/////////////////////////////////////////////\n// jQuery mutation patch\n//\n// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a\n// $destroy event on all DOM nodes being removed.\n//\n/////////////////////////////////////////////\n\nfunction jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) {\n  var originalJqFn = jQuery.fn[name];\n  originalJqFn = originalJqFn.$original || originalJqFn;\n  removePatch.$original = originalJqFn;\n  jQuery.fn[name] = removePatch;\n\n  function removePatch(param) {\n    // jshint -W040\n    var list = filterElems && param ? [this.filter(param)] : [this],\n        fireEvent = dispatchThis,\n        set, setIndex, setLength,\n        element, childIndex, childLength, children;\n\n    if (!getterIfNoArguments || param != null) {\n      while(list.length) {\n        set = list.shift();\n        for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) {\n          element = jqLite(set[setIndex]);\n          if (fireEvent) {\n            element.triggerHandler('$destroy');\n          } else {\n            fireEvent = !fireEvent;\n          }\n          for(childIndex = 0, childLength = (children = element.children()).length;\n              childIndex < childLength;\n              childIndex++) {\n            list.push(jQuery(children[childIndex]));\n          }\n        }\n      }\n    }\n    return originalJqFn.apply(this, arguments);\n  }\n}\n\nvar SINGLE_TAG_REGEXP = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/;\nvar HTML_REGEXP = /<|&#?\\w+;/;\nvar TAG_NAME_REGEXP = /<([\\w:]+)/;\nvar XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi;\n\nvar wrapMap = {\n  'option': [1, '<select multiple=\"multiple\">', '</select>'],\n\n  'thead': [1, '<table>', '</table>'],\n  'col': [2, '<table><colgroup>', '</colgroup></table>'],\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\n  'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],\n  '_default': [0, \"\", \"\"]\n};\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction jqLiteIsTextNode(html) {\n  return !HTML_REGEXP.test(html);\n}\n\nfunction jqLiteBuildFragment(html, context) {\n  var elem, tmp, tag, wrap,\n      fragment = context.createDocumentFragment(),\n      nodes = [], i, j, jj;\n\n  if (jqLiteIsTextNode(html)) {\n    // Convert non-html into a text node\n    nodes.push(context.createTextNode(html));\n  } else {\n    tmp = fragment.appendChild(context.createElement('div'));\n    // Convert html into DOM nodes\n    tag = (TAG_NAME_REGEXP.exec(html) || [\"\", \"\"])[1].toLowerCase();\n    wrap = wrapMap[tag] || wrapMap._default;\n    tmp.innerHTML = '<div>&#160;</div>' +\n      wrap[1] + html.replace(XHTML_TAG_REGEXP, \"<$1></$2>\") + wrap[2];\n    tmp.removeChild(tmp.firstChild);\n\n    // Descend through wrappers to the right content\n    i = wrap[0];\n    while (i--) {\n      tmp = tmp.lastChild;\n    }\n\n    for (j=0, jj=tmp.childNodes.length; j<jj; ++j) nodes.push(tmp.childNodes[j]);\n\n    tmp = fragment.firstChild;\n    tmp.textContent = \"\";\n  }\n\n  // Remove wrapper from fragment\n  fragment.textContent = \"\";\n  fragment.innerHTML = \"\"; // Clear inner HTML\n  return nodes;\n}\n\nfunction jqLiteParseHTML(html, context) {\n  context = context || document;\n  var parsed;\n\n  if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {\n    return [context.createElement(parsed[1])];\n  }\n\n  return jqLiteBuildFragment(html, context);\n}\n\n/////////////////////////////////////////////\nfunction JQLite(element) {\n  if (element instanceof JQLite) {\n    return element;\n  }\n  if (isString(element)) {\n    element = trim(element);\n  }\n  if (!(this instanceof JQLite)) {\n    if (isString(element) && element.charAt(0) != '<') {\n      throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');\n    }\n    return new JQLite(element);\n  }\n\n  if (isString(element)) {\n    jqLiteAddNodes(this, jqLiteParseHTML(element));\n    var fragment = jqLite(document.createDocumentFragment());\n    fragment.append(this);\n  } else {\n    jqLiteAddNodes(this, element);\n  }\n}\n\nfunction jqLiteClone(element) {\n  return element.cloneNode(true);\n}\n\nfunction jqLiteDealoc(element){\n  jqLiteRemoveData(element);\n  for ( var i = 0, children = element.childNodes || []; i < children.length; i++) {\n    jqLiteDealoc(children[i]);\n  }\n}\n\nfunction jqLiteOff(element, type, fn, unsupported) {\n  if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');\n\n  var events = jqLiteExpandoStore(element, 'events'),\n      handle = jqLiteExpandoStore(element, 'handle');\n\n  if (!handle) return; //no listeners registered\n\n  if (isUndefined(type)) {\n    forEach(events, function(eventHandler, type) {\n      removeEventListenerFn(element, type, eventHandler);\n      delete events[type];\n    });\n  } else {\n    forEach(type.split(' '), function(type) {\n      if (isUndefined(fn)) {\n        removeEventListenerFn(element, type, events[type]);\n        delete events[type];\n      } else {\n        arrayRemove(events[type] || [], fn);\n      }\n    });\n  }\n}\n\nfunction jqLiteRemoveData(element, name) {\n  var expandoId = element[jqName],\n      expandoStore = jqCache[expandoId];\n\n  if (expandoStore) {\n    if (name) {\n      delete jqCache[expandoId].data[name];\n      return;\n    }\n\n    if (expandoStore.handle) {\n      expandoStore.events.$destroy && expandoStore.handle({}, '$destroy');\n      jqLiteOff(element);\n    }\n    delete jqCache[expandoId];\n    element[jqName] = undefined; // ie does not allow deletion of attributes on elements.\n  }\n}\n\nfunction jqLiteExpandoStore(element, key, value) {\n  var expandoId = element[jqName],\n      expandoStore = jqCache[expandoId || -1];\n\n  if (isDefined(value)) {\n    if (!expandoStore) {\n      element[jqName] = expandoId = jqNextId();\n      expandoStore = jqCache[expandoId] = {};\n    }\n    expandoStore[key] = value;\n  } else {\n    return expandoStore && expandoStore[key];\n  }\n}\n\nfunction jqLiteData(element, key, value) {\n  var data = jqLiteExpandoStore(element, 'data'),\n      isSetter = isDefined(value),\n      keyDefined = !isSetter && isDefined(key),\n      isSimpleGetter = keyDefined && !isObject(key);\n\n  if (!data && !isSimpleGetter) {\n    jqLiteExpandoStore(element, 'data', data = {});\n  }\n\n  if (isSetter) {\n    data[key] = value;\n  } else {\n    if (keyDefined) {\n      if (isSimpleGetter) {\n        // don't create data in this case.\n        return data && data[key];\n      } else {\n        extend(data, key);\n      }\n    } else {\n      return data;\n    }\n  }\n}\n\nfunction jqLiteHasClass(element, selector) {\n  if (!element.getAttribute) return false;\n  return ((\" \" + (element.getAttribute('class') || '') + \" \").replace(/[\\n\\t]/g, \" \").\n      indexOf( \" \" + selector + \" \" ) > -1);\n}\n\nfunction jqLiteRemoveClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    forEach(cssClasses.split(' '), function(cssClass) {\n      element.setAttribute('class', trim(\n          (\" \" + (element.getAttribute('class') || '') + \" \")\n          .replace(/[\\n\\t]/g, \" \")\n          .replace(\" \" + trim(cssClass) + \" \", \" \"))\n      );\n    });\n  }\n}\n\nfunction jqLiteAddClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')\n                            .replace(/[\\n\\t]/g, \" \");\n\n    forEach(cssClasses.split(' '), function(cssClass) {\n      cssClass = trim(cssClass);\n      if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {\n        existingClasses += cssClass + ' ';\n      }\n    });\n\n    element.setAttribute('class', trim(existingClasses));\n  }\n}\n\nfunction jqLiteAddNodes(root, elements) {\n  if (elements) {\n    elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements))\n      ? elements\n      : [ elements ];\n    for(var i=0; i < elements.length; i++) {\n      root.push(elements[i]);\n    }\n  }\n}\n\nfunction jqLiteController(element, name) {\n  return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller');\n}\n\nfunction jqLiteInheritedData(element, name, value) {\n  element = jqLite(element);\n\n  // if element is the document object work with the html element instead\n  // this makes $(document).scope() possible\n  if(element[0].nodeType == 9) {\n    element = element.find('html');\n  }\n  var names = isArray(name) ? name : [name];\n\n  while (element.length) {\n    var node = element[0];\n    for (var i = 0, ii = names.length; i < ii; i++) {\n      if ((value = element.data(names[i])) !== undefined) return value;\n    }\n\n    // If dealing with a document fragment node with a host element, and no parent, use the host\n    // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM\n    // to lookup parent controllers.\n    element = jqLite(node.parentNode || (node.nodeType === 11 && node.host));\n  }\n}\n\nfunction jqLiteEmpty(element) {\n  for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {\n    jqLiteDealoc(childNodes[i]);\n  }\n  while (element.firstChild) {\n    element.removeChild(element.firstChild);\n  }\n}\n\n//////////////////////////////////////////\n// Functions which are declared directly.\n//////////////////////////////////////////\nvar JQLitePrototype = JQLite.prototype = {\n  ready: function(fn) {\n    var fired = false;\n\n    function trigger() {\n      if (fired) return;\n      fired = true;\n      fn();\n    }\n\n    // check if document already is loaded\n    if (document.readyState === 'complete'){\n      setTimeout(trigger);\n    } else {\n      this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9\n      // we can not use jqLite since we are not done loading and jQuery could be loaded later.\n      // jshint -W064\n      JQLite(window).on('load', trigger); // fallback to window.onload for others\n      // jshint +W064\n    }\n  },\n  toString: function() {\n    var value = [];\n    forEach(this, function(e){ value.push('' + e);});\n    return '[' + value.join(', ') + ']';\n  },\n\n  eq: function(index) {\n      return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);\n  },\n\n  length: 0,\n  push: push,\n  sort: [].sort,\n  splice: [].splice\n};\n\n//////////////////////////////////////////\n// Functions iterating getter/setters.\n// these functions return self on setter and\n// value on get.\n//////////////////////////////////////////\nvar BOOLEAN_ATTR = {};\nforEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {\n  BOOLEAN_ATTR[lowercase(value)] = value;\n});\nvar BOOLEAN_ELEMENTS = {};\nforEach('input,select,option,textarea,button,form,details'.split(','), function(value) {\n  BOOLEAN_ELEMENTS[uppercase(value)] = true;\n});\n\nfunction getBooleanAttrName(element, name) {\n  // check dom last since we will most likely fail on name\n  var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];\n\n  // booleanAttr is here twice to minimize DOM access\n  return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr;\n}\n\nforEach({\n  data: jqLiteData,\n  inheritedData: jqLiteInheritedData,\n\n  scope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite(element).data('$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);\n  },\n\n  isolateScope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite(element).data('$isolateScope') || jqLite(element).data('$isolateScopeNoTemplate');\n  },\n\n  controller: jqLiteController,\n\n  injector: function(element) {\n    return jqLiteInheritedData(element, '$injector');\n  },\n\n  removeAttr: function(element,name) {\n    element.removeAttribute(name);\n  },\n\n  hasClass: jqLiteHasClass,\n\n  css: function(element, name, value) {\n    name = camelCase(name);\n\n    if (isDefined(value)) {\n      element.style[name] = value;\n    } else {\n      var val;\n\n      if (msie <= 8) {\n        // this is some IE specific weirdness that jQuery 1.6.4 does not sure why\n        val = element.currentStyle && element.currentStyle[name];\n        if (val === '') val = 'auto';\n      }\n\n      val = val || element.style[name];\n\n      if (msie <= 8) {\n        // jquery weirdness :-/\n        val = (val === '') ? undefined : val;\n      }\n\n      return  val;\n    }\n  },\n\n  attr: function(element, name, value){\n    var lowercasedName = lowercase(name);\n    if (BOOLEAN_ATTR[lowercasedName]) {\n      if (isDefined(value)) {\n        if (!!value) {\n          element[name] = true;\n          element.setAttribute(name, lowercasedName);\n        } else {\n          element[name] = false;\n          element.removeAttribute(lowercasedName);\n        }\n      } else {\n        return (element[name] ||\n                 (element.attributes.getNamedItem(name)|| noop).specified)\n               ? lowercasedName\n               : undefined;\n      }\n    } else if (isDefined(value)) {\n      element.setAttribute(name, value);\n    } else if (element.getAttribute) {\n      // the extra argument \"2\" is to get the right thing for a.href in IE, see jQuery code\n      // some elements (e.g. Document) don't have get attribute, so return undefined\n      var ret = element.getAttribute(name, 2);\n      // normalize non-existing attributes to undefined (as jQuery)\n      return ret === null ? undefined : ret;\n    }\n  },\n\n  prop: function(element, name, value) {\n    if (isDefined(value)) {\n      element[name] = value;\n    } else {\n      return element[name];\n    }\n  },\n\n  text: (function() {\n    var NODE_TYPE_TEXT_PROPERTY = [];\n    if (msie < 9) {\n      NODE_TYPE_TEXT_PROPERTY[1] = 'innerText';    /** Element **/\n      NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue';    /** Text **/\n    } else {\n      NODE_TYPE_TEXT_PROPERTY[1] =                 /** Element **/\n      NODE_TYPE_TEXT_PROPERTY[3] = 'textContent';  /** Text **/\n    }\n    getText.$dv = '';\n    return getText;\n\n    function getText(element, value) {\n      var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType];\n      if (isUndefined(value)) {\n        return textProp ? element[textProp] : '';\n      }\n      element[textProp] = value;\n    }\n  })(),\n\n  val: function(element, value) {\n    if (isUndefined(value)) {\n      if (nodeName_(element) === 'SELECT' && element.multiple) {\n        var result = [];\n        forEach(element.options, function (option) {\n          if (option.selected) {\n            result.push(option.value || option.text);\n          }\n        });\n        return result.length === 0 ? null : result;\n      }\n      return element.value;\n    }\n    element.value = value;\n  },\n\n  html: function(element, value) {\n    if (isUndefined(value)) {\n      return element.innerHTML;\n    }\n    for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {\n      jqLiteDealoc(childNodes[i]);\n    }\n    element.innerHTML = value;\n  },\n\n  empty: jqLiteEmpty\n}, function(fn, name){\n  /**\n   * Properties: writes return selection, reads return first value\n   */\n  JQLite.prototype[name] = function(arg1, arg2) {\n    var i, key;\n\n    // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it\n    // in a way that survives minification.\n    // jqLiteEmpty takes no arguments but is a setter.\n    if (fn !== jqLiteEmpty &&\n        (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {\n      if (isObject(arg1)) {\n\n        // we are a write, but the object properties are the key/values\n        for (i = 0; i < this.length; i++) {\n          if (fn === jqLiteData) {\n            // data() takes the whole object in jQuery\n            fn(this[i], arg1);\n          } else {\n            for (key in arg1) {\n              fn(this[i], key, arg1[key]);\n            }\n          }\n        }\n        // return self for chaining\n        return this;\n      } else {\n        // we are a read, so read the first child.\n        var value = fn.$dv;\n        // Only if we have $dv do we iterate over all, otherwise it is just the first element.\n        var jj = (value === undefined) ? Math.min(this.length, 1) : this.length;\n        for (var j = 0; j < jj; j++) {\n          var nodeValue = fn(this[j], arg1, arg2);\n          value = value ? value + nodeValue : nodeValue;\n        }\n        return value;\n      }\n    } else {\n      // we are a write, so apply to all children\n      for (i = 0; i < this.length; i++) {\n        fn(this[i], arg1, arg2);\n      }\n      // return self for chaining\n      return this;\n    }\n  };\n});\n\nfunction createEventHandler(element, events) {\n  var eventHandler = function (event, type) {\n    if (!event.preventDefault) {\n      event.preventDefault = function() {\n        event.returnValue = false; //ie\n      };\n    }\n\n    if (!event.stopPropagation) {\n      event.stopPropagation = function() {\n        event.cancelBubble = true; //ie\n      };\n    }\n\n    if (!event.target) {\n      event.target = event.srcElement || document;\n    }\n\n    if (isUndefined(event.defaultPrevented)) {\n      var prevent = event.preventDefault;\n      event.preventDefault = function() {\n        event.defaultPrevented = true;\n        prevent.call(event);\n      };\n      event.defaultPrevented = false;\n    }\n\n    event.isDefaultPrevented = function() {\n      return event.defaultPrevented || event.returnValue === false;\n    };\n\n    // Copy event handlers in case event handlers array is modified during execution.\n    var eventHandlersCopy = shallowCopy(events[type || event.type] || []);\n\n    forEach(eventHandlersCopy, function(fn) {\n      fn.call(element, event);\n    });\n\n    // Remove monkey-patched methods (IE),\n    // as they would cause memory leaks in IE8.\n    if (msie <= 8) {\n      // IE7/8 does not allow to delete property on native object\n      event.preventDefault = null;\n      event.stopPropagation = null;\n      event.isDefaultPrevented = null;\n    } else {\n      // It shouldn't affect normal browsers (native methods are defined on prototype).\n      delete event.preventDefault;\n      delete event.stopPropagation;\n      delete event.isDefaultPrevented;\n    }\n  };\n  eventHandler.elem = element;\n  return eventHandler;\n}\n\n//////////////////////////////////////////\n// Functions iterating traversal.\n// These functions chain results into a single\n// selector.\n//////////////////////////////////////////\nforEach({\n  removeData: jqLiteRemoveData,\n\n  dealoc: jqLiteDealoc,\n\n  on: function onFn(element, type, fn, unsupported){\n    if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');\n\n    var events = jqLiteExpandoStore(element, 'events'),\n        handle = jqLiteExpandoStore(element, 'handle');\n\n    if (!events) jqLiteExpandoStore(element, 'events', events = {});\n    if (!handle) jqLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events));\n\n    forEach(type.split(' '), function(type){\n      var eventFns = events[type];\n\n      if (!eventFns) {\n        if (type == 'mouseenter' || type == 'mouseleave') {\n          var contains = document.body.contains || document.body.compareDocumentPosition ?\n          function( a, b ) {\n            // jshint bitwise: false\n            var adown = a.nodeType === 9 ? a.documentElement : a,\n            bup = b && b.parentNode;\n            return a === bup || !!( bup && bup.nodeType === 1 && (\n              adown.contains ?\n              adown.contains( bup ) :\n              a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n              ));\n            } :\n            function( a, b ) {\n              if ( b ) {\n                while ( (b = b.parentNode) ) {\n                  if ( b === a ) {\n                    return true;\n                  }\n                }\n              }\n              return false;\n            };\n\n          events[type] = [];\n\n          // Refer to jQuery's implementation of mouseenter & mouseleave\n          // Read about mouseenter and mouseleave:\n          // http://www.quirksmode.org/js/events_mouse.html#link8\n          var eventmap = { mouseleave : \"mouseout\", mouseenter : \"mouseover\"};\n\n          onFn(element, eventmap[type], function(event) {\n            var target = this, related = event.relatedTarget;\n            // For mousenter/leave call the handler if related is outside the target.\n            // NB: No relatedTarget if the mouse left/entered the browser window\n            if ( !related || (related !== target && !contains(target, related)) ){\n              handle(event, type);\n            }\n          });\n\n        } else {\n          addEventListenerFn(element, type, handle);\n          events[type] = [];\n        }\n        eventFns = events[type];\n      }\n      eventFns.push(fn);\n    });\n  },\n\n  off: jqLiteOff,\n\n  one: function(element, type, fn) {\n    element = jqLite(element);\n\n    //add the listener twice so that when it is called\n    //you can remove the original function and still be\n    //able to call element.off(ev, fn) normally\n    element.on(type, function onFn() {\n      element.off(type, fn);\n      element.off(type, onFn);\n    });\n    element.on(type, fn);\n  },\n\n  replaceWith: function(element, replaceNode) {\n    var index, parent = element.parentNode;\n    jqLiteDealoc(element);\n    forEach(new JQLite(replaceNode), function(node){\n      if (index) {\n        parent.insertBefore(node, index.nextSibling);\n      } else {\n        parent.replaceChild(node, element);\n      }\n      index = node;\n    });\n  },\n\n  children: function(element) {\n    var children = [];\n    forEach(element.childNodes, function(element){\n      if (element.nodeType === 1)\n        children.push(element);\n    });\n    return children;\n  },\n\n  contents: function(element) {\n    return element.contentDocument || element.childNodes || [];\n  },\n\n  append: function(element, node) {\n    forEach(new JQLite(node), function(child){\n      if (element.nodeType === 1 || element.nodeType === 11) {\n        element.appendChild(child);\n      }\n    });\n  },\n\n  prepend: function(element, node) {\n    if (element.nodeType === 1) {\n      var index = element.firstChild;\n      forEach(new JQLite(node), function(child){\n        element.insertBefore(child, index);\n      });\n    }\n  },\n\n  wrap: function(element, wrapNode) {\n    wrapNode = jqLite(wrapNode)[0];\n    var parent = element.parentNode;\n    if (parent) {\n      parent.replaceChild(wrapNode, element);\n    }\n    wrapNode.appendChild(element);\n  },\n\n  remove: function(element) {\n    jqLiteDealoc(element);\n    var parent = element.parentNode;\n    if (parent) parent.removeChild(element);\n  },\n\n  after: function(element, newElement) {\n    var index = element, parent = element.parentNode;\n    forEach(new JQLite(newElement), function(node){\n      parent.insertBefore(node, index.nextSibling);\n      index = node;\n    });\n  },\n\n  addClass: jqLiteAddClass,\n  removeClass: jqLiteRemoveClass,\n\n  toggleClass: function(element, selector, condition) {\n    if (selector) {\n      forEach(selector.split(' '), function(className){\n        var classCondition = condition;\n        if (isUndefined(classCondition)) {\n          classCondition = !jqLiteHasClass(element, className);\n        }\n        (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);\n      });\n    }\n  },\n\n  parent: function(element) {\n    var parent = element.parentNode;\n    return parent && parent.nodeType !== 11 ? parent : null;\n  },\n\n  next: function(element) {\n    if (element.nextElementSibling) {\n      return element.nextElementSibling;\n    }\n\n    // IE8 doesn't have nextElementSibling\n    var elm = element.nextSibling;\n    while (elm != null && elm.nodeType !== 1) {\n      elm = elm.nextSibling;\n    }\n    return elm;\n  },\n\n  find: function(element, selector) {\n    if (element.getElementsByTagName) {\n      return element.getElementsByTagName(selector);\n    } else {\n      return [];\n    }\n  },\n\n  clone: jqLiteClone,\n\n  triggerHandler: function(element, eventName, eventData) {\n    var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName];\n\n    eventData = eventData || [];\n\n    var event = [{\n      preventDefault: noop,\n      stopPropagation: noop\n    }];\n\n    forEach(eventFns, function(fn) {\n      fn.apply(element, event.concat(eventData));\n    });\n  }\n}, function(fn, name){\n  /**\n   * chaining functions\n   */\n  JQLite.prototype[name] = function(arg1, arg2, arg3) {\n    var value;\n    for(var i=0; i < this.length; i++) {\n      if (isUndefined(value)) {\n        value = fn(this[i], arg1, arg2, arg3);\n        if (isDefined(value)) {\n          // any function which returns a value needs to be wrapped\n          value = jqLite(value);\n        }\n      } else {\n        jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));\n      }\n    }\n    return isDefined(value) ? value : this;\n  };\n\n  // bind legacy bind/unbind to on/off\n  JQLite.prototype.bind = JQLite.prototype.on;\n  JQLite.prototype.unbind = JQLite.prototype.off;\n});\n\n/**\n * Computes a hash of an 'obj'.\n * Hash of a:\n *  string is string\n *  number is number as string\n *  object is either result of calling $$hashKey function on the object or uniquely generated id,\n *         that is also assigned to the $$hashKey property of the object.\n *\n * @param obj\n * @returns {string} hash string such that the same input will have the same hash string.\n *         The resulting string key is in 'type:hashKey' format.\n */\nfunction hashKey(obj) {\n  var objType = typeof obj,\n      key;\n\n  if (objType == 'object' && obj !== null) {\n    if (typeof (key = obj.$$hashKey) == 'function') {\n      // must invoke on object to keep the right this\n      key = obj.$$hashKey();\n    } else if (key === undefined) {\n      key = obj.$$hashKey = nextUid();\n    }\n  } else {\n    key = obj;\n  }\n\n  return objType + ':' + key;\n}\n\n/**\n * HashMap which can use objects as keys\n */\nfunction HashMap(array){\n  forEach(array, this.put, this);\n}\nHashMap.prototype = {\n  /**\n   * Store key value pair\n   * @param key key to store can be any type\n   * @param value value to store can be any type\n   */\n  put: function(key, value) {\n    this[hashKey(key)] = value;\n  },\n\n  /**\n   * @param key\n   * @returns {Object} the value for the key\n   */\n  get: function(key) {\n    return this[hashKey(key)];\n  },\n\n  /**\n   * Remove the key/value pair\n   * @param key\n   */\n  remove: function(key) {\n    var value = this[key = hashKey(key)];\n    delete this[key];\n    return value;\n  }\n};\n\n/**\n * @ngdoc function\n * @module ng\n * @name angular.injector\n * @function\n *\n * @description\n * Creates an injector function that can be used for retrieving services as well as for\n * dependency injection (see {@link guide/di dependency injection}).\n *\n\n * @param {Array.<string|Function>} modules A list of module functions or their aliases. See\n *        {@link angular.module}. The `ng` module must be explicitly added.\n * @returns {function()} Injector function. See {@link auto.$injector $injector}.\n *\n * @example\n * Typical usage\n * ```js\n *   // create an injector\n *   var $injector = angular.injector(['ng']);\n *\n *   // use the injector to kick off your application\n *   // use the type inference to auto inject arguments, or use implicit injection\n *   $injector.invoke(function($rootScope, $compile, $document){\n *     $compile($document)($rootScope);\n *     $rootScope.$digest();\n *   });\n * ```\n *\n * Sometimes you want to get access to the injector of a currently running Angular app\n * from outside Angular. Perhaps, you want to inject and compile some markup after the\n * application has been bootstrapped. You can do this using extra `injector()` added\n * to JQuery/jqLite elements. See {@link angular.element}.\n *\n * *This is fairly rare but could be the case if a third party library is injecting the\n * markup.*\n *\n * In the following example a new block of HTML containing a `ng-controller`\n * directive is added to the end of the document body by JQuery. We then compile and link\n * it into the current AngularJS scope.\n *\n * ```js\n * var $div = $('<div ng-controller=\"MyCtrl\">{{content.label}}</div>');\n * $(document.body).append($div);\n *\n * angular.element(document).injector().invoke(function($compile) {\n *   var scope = angular.element($div).scope();\n *   $compile($div)(scope);\n * });\n * ```\n */\n\n\n/**\n * @ngdoc module\n * @name auto\n * @description\n *\n * Implicit module which gets automatically added to each {@link auto.$injector $injector}.\n */\n\nvar FN_ARGS = /^function\\s*[^\\(]*\\(\\s*([^\\)]*)\\)/m;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nvar STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nvar $injectorMinErr = minErr('$injector');\nfunction annotate(fn) {\n  var $inject,\n      fnText,\n      argDecl,\n      last;\n\n  if (typeof fn == 'function') {\n    if (!($inject = fn.$inject)) {\n      $inject = [];\n      if (fn.length) {\n        fnText = fn.toString().replace(STRIP_COMMENTS, '');\n        argDecl = fnText.match(FN_ARGS);\n        forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){\n          arg.replace(FN_ARG, function(all, underscore, name){\n            $inject.push(name);\n          });\n        });\n      }\n      fn.$inject = $inject;\n    }\n  } else if (isArray(fn)) {\n    last = fn.length - 1;\n    assertArgFn(fn[last], 'fn');\n    $inject = fn.slice(0, last);\n  } else {\n    assertArgFn(fn, 'fn', true);\n  }\n  return $inject;\n}\n\n///////////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $injector\n * @function\n *\n * @description\n *\n * `$injector` is used to retrieve object instances as defined by\n * {@link auto.$provide provider}, instantiate types, invoke methods,\n * and load modules.\n *\n * The following always holds true:\n *\n * ```js\n *   var $injector = angular.injector();\n *   expect($injector.get('$injector')).toBe($injector);\n *   expect($injector.invoke(function($injector){\n *     return $injector;\n *   }).toBe($injector);\n * ```\n *\n * # Injection Function Annotation\n *\n * JavaScript does not have annotations, and annotations are needed for dependency injection. The\n * following are all valid ways of annotating function with injection arguments and are equivalent.\n *\n * ```js\n *   // inferred (only works if code not minified/obfuscated)\n *   $injector.invoke(function(serviceA){});\n *\n *   // annotated\n *   function explicit(serviceA) {};\n *   explicit.$inject = ['serviceA'];\n *   $injector.invoke(explicit);\n *\n *   // inline\n *   $injector.invoke(['serviceA', function(serviceA){}]);\n * ```\n *\n * ## Inference\n *\n * In JavaScript calling `toString()` on a function returns the function definition. The definition\n * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with\n * minification, and obfuscation tools since these tools change the argument names.\n *\n * ## `$inject` Annotation\n * By adding a `$inject` property onto a function the injection parameters can be specified.\n *\n * ## Inline\n * As an array of injection names, where the last item in the array is the function to call.\n */\n\n/**\n * @ngdoc method\n * @name $injector#get\n *\n * @description\n * Return an instance of the service.\n *\n * @param {string} name The name of the instance to retrieve.\n * @return {*} The instance.\n */\n\n/**\n * @ngdoc method\n * @name $injector#invoke\n *\n * @description\n * Invoke the method and supply the method arguments from the `$injector`.\n *\n * @param {!Function} fn The function to invoke. Function parameters are injected according to the\n *   {@link guide/di $inject Annotation} rules.\n * @param {Object=} self The `this` for the invoked method.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n *                         object first, before the `$injector` is consulted.\n * @returns {*} the value returned by the invoked `fn` function.\n */\n\n/**\n * @ngdoc method\n * @name $injector#has\n *\n * @description\n * Allows the user to query if the particular service exist.\n *\n * @param {string} Name of the service to query.\n * @returns {boolean} returns true if injector has given service.\n */\n\n/**\n * @ngdoc method\n * @name $injector#instantiate\n * @description\n * Create a new instance of JS type. The method takes a constructor function invokes the new\n * operator and supplies all of the arguments to the constructor function as specified by the\n * constructor annotation.\n *\n * @param {Function} Type Annotated constructor function.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n * object first, before the `$injector` is consulted.\n * @returns {Object} new instance of `Type`.\n */\n\n/**\n * @ngdoc method\n * @name $injector#annotate\n *\n * @description\n * Returns an array of service names which the function is requesting for injection. This API is\n * used by the injector to determine which services need to be injected into the function when the\n * function is invoked. There are three ways in which the function can be annotated with the needed\n * dependencies.\n *\n * # Argument names\n *\n * The simplest form is to extract the dependencies from the arguments of the function. This is done\n * by converting the function into a string using `toString()` method and extracting the argument\n * names.\n * ```js\n *   // Given\n *   function MyController($scope, $route) {\n *     // ...\n *   }\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * This method does not work with code minification / obfuscation. For this reason the following\n * annotation strategies are supported.\n *\n * # The `$inject` property\n *\n * If a function has an `$inject` property and its value is an array of strings, then the strings\n * represent names of services to be injected into the function.\n * ```js\n *   // Given\n *   var MyController = function(obfuscatedScope, obfuscatedRoute) {\n *     // ...\n *   }\n *   // Define function dependencies\n *   MyController['$inject'] = ['$scope', '$route'];\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * # The array notation\n *\n * It is often desirable to inline Injected functions and that's when setting the `$inject` property\n * is very inconvenient. In these situations using the array notation to specify the dependencies in\n * a way that survives minification is a better choice:\n *\n * ```js\n *   // We wish to write this (not minification / obfuscation safe)\n *   injector.invoke(function($compile, $rootScope) {\n *     // ...\n *   });\n *\n *   // We are forced to write break inlining\n *   var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {\n *     // ...\n *   };\n *   tmpFn.$inject = ['$compile', '$rootScope'];\n *   injector.invoke(tmpFn);\n *\n *   // To better support inline function the inline annotation is supported\n *   injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {\n *     // ...\n *   }]);\n *\n *   // Therefore\n *   expect(injector.annotate(\n *      ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])\n *    ).toEqual(['$compile', '$rootScope']);\n * ```\n *\n * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to\n * be retrieved as described above.\n *\n * @returns {Array.<string>} The names of the services which the function requires.\n */\n\n\n\n\n/**\n * @ngdoc object\n * @name $provide\n *\n * @description\n *\n * The {@link auto.$provide $provide} service has a number of methods for registering components\n * with the {@link auto.$injector $injector}. Many of these functions are also exposed on\n * {@link angular.Module}.\n *\n * An Angular **service** is a singleton object created by a **service factory**.  These **service\n * factories** are functions which, in turn, are created by a **service provider**.\n * The **service providers** are constructor functions. When instantiated they must contain a\n * property called `$get`, which holds the **service factory** function.\n *\n * When you request a service, the {@link auto.$injector $injector} is responsible for finding the\n * correct **service provider**, instantiating it and then calling its `$get` **service factory**\n * function to get the instance of the **service**.\n *\n * Often services have no configuration options and there is no need to add methods to the service\n * provider.  The provider will be no more than a constructor function with a `$get` property. For\n * these cases the {@link auto.$provide $provide} service has additional helper methods to register\n * services without specifying a provider.\n *\n * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the\n *     {@link auto.$injector $injector}\n * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by\n *     providers and services.\n * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by\n *     services, not providers.\n * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,\n *     that will be wrapped in a **service provider** object, whose `$get` property will contain the\n *     given factory function.\n * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`\n *     that will be wrapped in a **service provider** object, whose `$get` property will instantiate\n *      a new object using the given constructor function.\n *\n * See the individual methods for more information and examples.\n */\n\n/**\n * @ngdoc method\n * @name $provide#provider\n * @description\n *\n * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions\n * are constructor functions, whose instances are responsible for \"providing\" a factory for a\n * service.\n *\n * Service provider names start with the name of the service they provide followed by `Provider`.\n * For example, the {@link ng.$log $log} service has a provider called\n * {@link ng.$logProvider $logProvider}.\n *\n * Service provider objects can have additional methods which allow configuration of the provider\n * and its service. Importantly, you can configure what kind of service is created by the `$get`\n * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a\n * method {@link ng.$logProvider#debugEnabled debugEnabled}\n * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the\n * console or not.\n *\n * @param {string} name The name of the instance. NOTE: the provider will be available under `name +\n                        'Provider'` key.\n * @param {(Object|function())} provider If the provider is:\n *\n *   - `Object`: then it should have a `$get` method. The `$get` method will be invoked using\n *     {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.\n *   - `Constructor`: a new instance of the provider will be created using\n *     {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.\n *\n * @returns {Object} registered provider instance\n\n * @example\n *\n * The following example shows how to create a simple event tracking service and register it using\n * {@link auto.$provide#provider $provide.provider()}.\n *\n * ```js\n *  // Define the eventTracker provider\n *  function EventTrackerProvider() {\n *    var trackingUrl = '/track';\n *\n *    // A provider method for configuring where the tracked events should been saved\n *    this.setTrackingUrl = function(url) {\n *      trackingUrl = url;\n *    };\n *\n *    // The service factory function\n *    this.$get = ['$http', function($http) {\n *      var trackedEvents = {};\n *      return {\n *        // Call this to track an event\n *        event: function(event) {\n *          var count = trackedEvents[event] || 0;\n *          count += 1;\n *          trackedEvents[event] = count;\n *          return count;\n *        },\n *        // Call this to save the tracked events to the trackingUrl\n *        save: function() {\n *          $http.post(trackingUrl, trackedEvents);\n *        }\n *      };\n *    }];\n *  }\n *\n *  describe('eventTracker', function() {\n *    var postSpy;\n *\n *    beforeEach(module(function($provide) {\n *      // Register the eventTracker provider\n *      $provide.provider('eventTracker', EventTrackerProvider);\n *    }));\n *\n *    beforeEach(module(function(eventTrackerProvider) {\n *      // Configure eventTracker provider\n *      eventTrackerProvider.setTrackingUrl('/custom-track');\n *    }));\n *\n *    it('tracks events', inject(function(eventTracker) {\n *      expect(eventTracker.event('login')).toEqual(1);\n *      expect(eventTracker.event('login')).toEqual(2);\n *    }));\n *\n *    it('saves to the tracking url', inject(function(eventTracker, $http) {\n *      postSpy = spyOn($http, 'post');\n *      eventTracker.event('login');\n *      eventTracker.save();\n *      expect(postSpy).toHaveBeenCalled();\n *      expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');\n *      expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');\n *      expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });\n *    }));\n *  });\n * ```\n */\n\n/**\n * @ngdoc method\n * @name $provide#factory\n * @description\n *\n * Register a **service factory**, which will be called to return the service instance.\n * This is short for registering a service where its provider consists of only a `$get` property,\n * which is the given service factory function.\n * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to\n * configure your service in a provider.\n *\n * @param {string} name The name of the instance.\n * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand\n *                            for `$provide.provider(name, {$get: $getFn})`.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service\n * ```js\n *   $provide.factory('ping', ['$http', function($http) {\n *     return function ping() {\n *       return $http.send('/ping');\n *     };\n *   }]);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#service\n * @description\n *\n * Register a **service constructor**, which will be invoked with `new` to create the service\n * instance.\n * This is short for registering a service where its provider's `$get` property is the service\n * constructor function that will be used to instantiate the service instance.\n *\n * You should use {@link auto.$provide#service $provide.service(class)} if you define your service\n * as a type/class.\n *\n * @param {string} name The name of the instance.\n * @param {Function} constructor A class (constructor function) that will be instantiated.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service using\n * {@link auto.$provide#service $provide.service(class)}.\n * ```js\n *   var Ping = function($http) {\n *     this.$http = $http;\n *   };\n *\n *   Ping.$inject = ['$http'];\n *\n *   Ping.prototype.send = function() {\n *     return this.$http.get('/ping');\n *   };\n *   $provide.service('ping', Ping);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping.send();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#value\n * @description\n *\n * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a\n * number, an array, an object or a function.  This is short for registering a service where its\n * provider's `$get` property is a factory function that takes no arguments and returns the **value\n * service**.\n *\n * Value services are similar to constant services, except that they cannot be injected into a\n * module configuration function (see {@link angular.Module#config}) but they can be overridden by\n * an Angular\n * {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the instance.\n * @param {*} value The value.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here are some examples of creating value services.\n * ```js\n *   $provide.value('ADMIN_USER', 'admin');\n *\n *   $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });\n *\n *   $provide.value('halfOf', function(value) {\n *     return value / 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#constant\n * @description\n *\n * Register a **constant service**, such as a string, a number, an array, an object or a function,\n * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be\n * injected into a module configuration function (see {@link angular.Module#config}) and it cannot\n * be overridden by an Angular {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the constant.\n * @param {*} value The constant value.\n * @returns {Object} registered instance\n *\n * @example\n * Here a some examples of creating constants:\n * ```js\n *   $provide.constant('SHARD_HEIGHT', 306);\n *\n *   $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);\n *\n *   $provide.constant('double', function(value) {\n *     return value * 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#decorator\n * @description\n *\n * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator\n * intercepts the creation of a service, allowing it to override or modify the behaviour of the\n * service. The object returned by the decorator may be the original service, or a new service\n * object which replaces or wraps and delegates to the original service.\n *\n * @param {string} name The name of the service to decorate.\n * @param {function()} decorator This function will be invoked when the service needs to be\n *    instantiated and should return the decorated service instance. The function is called using\n *    the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.\n *    Local injection arguments:\n *\n *    * `$delegate` - The original service instance, which can be monkey patched, configured,\n *      decorated or delegated to.\n *\n * @example\n * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting\n * calls to {@link ng.$log#error $log.warn()}.\n * ```js\n *   $provide.decorator('$log', ['$delegate', function($delegate) {\n *     $delegate.warn = $delegate.error;\n *     return $delegate;\n *   }]);\n * ```\n */\n\n\nfunction createInjector(modulesToLoad) {\n  var INSTANTIATING = {},\n      providerSuffix = 'Provider',\n      path = [],\n      loadedModules = new HashMap(),\n      providerCache = {\n        $provide: {\n            provider: supportObject(provider),\n            factory: supportObject(factory),\n            service: supportObject(service),\n            value: supportObject(value),\n            constant: supportObject(constant),\n            decorator: decorator\n          }\n      },\n      providerInjector = (providerCache.$injector =\n          createInternalInjector(providerCache, function() {\n            throw $injectorMinErr('unpr', \"Unknown provider: {0}\", path.join(' <- '));\n          })),\n      instanceCache = {},\n      instanceInjector = (instanceCache.$injector =\n          createInternalInjector(instanceCache, function(servicename) {\n            var provider = providerInjector.get(servicename + providerSuffix);\n            return instanceInjector.invoke(provider.$get, provider);\n          }));\n\n\n  forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });\n\n  return instanceInjector;\n\n  ////////////////////////////////////\n  // $provider\n  ////////////////////////////////////\n\n  function supportObject(delegate) {\n    return function(key, value) {\n      if (isObject(key)) {\n        forEach(key, reverseParams(delegate));\n      } else {\n        return delegate(key, value);\n      }\n    };\n  }\n\n  function provider(name, provider_) {\n    assertNotHasOwnProperty(name, 'service');\n    if (isFunction(provider_) || isArray(provider_)) {\n      provider_ = providerInjector.instantiate(provider_);\n    }\n    if (!provider_.$get) {\n      throw $injectorMinErr('pget', \"Provider '{0}' must define $get factory method.\", name);\n    }\n    return providerCache[name + providerSuffix] = provider_;\n  }\n\n  function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); }\n\n  function service(name, constructor) {\n    return factory(name, ['$injector', function($injector) {\n      return $injector.instantiate(constructor);\n    }]);\n  }\n\n  function value(name, val) { return factory(name, valueFn(val)); }\n\n  function constant(name, value) {\n    assertNotHasOwnProperty(name, 'constant');\n    providerCache[name] = value;\n    instanceCache[name] = value;\n  }\n\n  function decorator(serviceName, decorFn) {\n    var origProvider = providerInjector.get(serviceName + providerSuffix),\n        orig$get = origProvider.$get;\n\n    origProvider.$get = function() {\n      var origInstance = instanceInjector.invoke(orig$get, origProvider);\n      return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});\n    };\n  }\n\n  ////////////////////////////////////\n  // Module Loading\n  ////////////////////////////////////\n  function loadModules(modulesToLoad){\n    var runBlocks = [], moduleFn, invokeQueue, i, ii;\n    forEach(modulesToLoad, function(module) {\n      if (loadedModules.get(module)) return;\n      loadedModules.put(module, true);\n\n      try {\n        if (isString(module)) {\n          moduleFn = angularModule(module);\n          runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);\n\n          for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) {\n            var invokeArgs = invokeQueue[i],\n                provider = providerInjector.get(invokeArgs[0]);\n\n            provider[invokeArgs[1]].apply(provider, invokeArgs[2]);\n          }\n        } else if (isFunction(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else if (isArray(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else {\n          assertArgFn(module, 'module');\n        }\n      } catch (e) {\n        if (isArray(module)) {\n          module = module[module.length - 1];\n        }\n        if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {\n          // Safari & FF's stack traces don't contain error.message content\n          // unlike those of Chrome and IE\n          // So if stack doesn't contain message, we create a new string that contains both.\n          // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.\n          /* jshint -W022 */\n          e = e.message + '\\n' + e.stack;\n        }\n        throw $injectorMinErr('modulerr', \"Failed to instantiate module {0} due to:\\n{1}\",\n                  module, e.stack || e.message || e);\n      }\n    });\n    return runBlocks;\n  }\n\n  ////////////////////////////////////\n  // internal Injector\n  ////////////////////////////////////\n\n  function createInternalInjector(cache, factory) {\n\n    function getService(serviceName) {\n      if (cache.hasOwnProperty(serviceName)) {\n        if (cache[serviceName] === INSTANTIATING) {\n          throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- '));\n        }\n        return cache[serviceName];\n      } else {\n        try {\n          path.unshift(serviceName);\n          cache[serviceName] = INSTANTIATING;\n          return cache[serviceName] = factory(serviceName);\n        } catch (err) {\n          if (cache[serviceName] === INSTANTIATING) {\n            delete cache[serviceName];\n          }\n          throw err;\n        } finally {\n          path.shift();\n        }\n      }\n    }\n\n    function invoke(fn, self, locals){\n      var args = [],\n          $inject = annotate(fn),\n          length, i,\n          key;\n\n      for(i = 0, length = $inject.length; i < length; i++) {\n        key = $inject[i];\n        if (typeof key !== 'string') {\n          throw $injectorMinErr('itkn',\n                  'Incorrect injection token! Expected service name as string, got {0}', key);\n        }\n        args.push(\n          locals && locals.hasOwnProperty(key)\n          ? locals[key]\n          : getService(key)\n        );\n      }\n      if (!fn.$inject) {\n        // this means that we must be an array.\n        fn = fn[length];\n      }\n\n      // http://jsperf.com/angularjs-invoke-apply-vs-switch\n      // #5388\n      return fn.apply(self, args);\n    }\n\n    function instantiate(Type, locals) {\n      var Constructor = function() {},\n          instance, returnedValue;\n\n      // Check if Type is annotated and use just the given function at n-1 as parameter\n      // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);\n      Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype;\n      instance = new Constructor();\n      returnedValue = invoke(Type, instance, locals);\n\n      return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;\n    }\n\n    return {\n      invoke: invoke,\n      instantiate: instantiate,\n      get: getService,\n      annotate: annotate,\n      has: function(name) {\n        return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);\n      }\n    };\n  }\n}\n\n/**\n * @ngdoc service\n * @name $anchorScroll\n * @kind function\n * @requires $window\n * @requires $location\n * @requires $rootScope\n *\n * @description\n * When called, it checks current value of `$location.hash()` and scroll to related element,\n * according to rules specified in\n * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).\n *\n * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor.\n * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div id=\"scrollArea\" ng-controller=\"ScrollCtrl\">\n         <a ng-click=\"gotoBottom()\">Go to bottom</a>\n         <a id=\"bottom\"></a> You're at the bottom!\n       </div>\n     </file>\n     <file name=\"script.js\">\n       function ScrollCtrl($scope, $location, $anchorScroll) {\n         $scope.gotoBottom = function (){\n           // set the location.hash to the id of\n           // the element you wish to scroll to.\n           $location.hash('bottom');\n\n           // call $anchorScroll()\n           $anchorScroll();\n         };\n       }\n     </file>\n     <file name=\"style.css\">\n       #scrollArea {\n         height: 350px;\n         overflow: auto;\n       }\n\n       #bottom {\n         display: block;\n         margin-top: 2000px;\n       }\n     </file>\n   </example>\n */\nfunction $AnchorScrollProvider() {\n\n  var autoScrollingEnabled = true;\n\n  this.disableAutoScrolling = function() {\n    autoScrollingEnabled = false;\n  };\n\n  this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {\n    var document = $window.document;\n\n    // helper function to get first anchor from a NodeList\n    // can't use filter.filter, as it accepts only instances of Array\n    // and IE can't convert NodeList to an array using [].slice\n    // TODO(vojta): use filter if we change it to accept lists as well\n    function getFirstAnchor(list) {\n      var result = null;\n      forEach(list, function(element) {\n        if (!result && lowercase(element.nodeName) === 'a') result = element;\n      });\n      return result;\n    }\n\n    function scroll() {\n      var hash = $location.hash(), elm;\n\n      // empty hash, scroll to the top of the page\n      if (!hash) $window.scrollTo(0, 0);\n\n      // element with given id\n      else if ((elm = document.getElementById(hash))) elm.scrollIntoView();\n\n      // first anchor with given name :-D\n      else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView();\n\n      // no element and hash == 'top', scroll to the top of the page\n      else if (hash === 'top') $window.scrollTo(0, 0);\n    }\n\n    // does not scroll when user clicks on anchor link that is currently on\n    // (no url change, no $location.hash() change), browser native does scroll\n    if (autoScrollingEnabled) {\n      $rootScope.$watch(function autoScrollWatch() {return $location.hash();},\n        function autoScrollWatchAction() {\n          $rootScope.$evalAsync(scroll);\n        });\n    }\n\n    return scroll;\n  }];\n}\n\nvar $animateMinErr = minErr('$animate');\n\n/**\n * @ngdoc provider\n * @name $animateProvider\n *\n * @description\n * Default implementation of $animate that doesn't perform any animations, instead just\n * synchronously performs DOM\n * updates and calls done() callbacks.\n *\n * In order to enable animations the ngAnimate module has to be loaded.\n *\n * To see the functional implementation check out src/ngAnimate/animate.js\n */\nvar $AnimateProvider = ['$provide', function($provide) {\n\n\n  this.$$selectors = {};\n\n\n  /**\n   * @ngdoc method\n   * @name $animateProvider#register\n   *\n   * @description\n   * Registers a new injectable animation factory function. The factory function produces the\n   * animation object which contains callback functions for each event that is expected to be\n   * animated.\n   *\n   *   * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`\n   *   must be called once the element animation is complete. If a function is returned then the\n   *   animation service will use this function to cancel the animation whenever a cancel event is\n   *   triggered.\n   *\n   *\n   * ```js\n   *   return {\n     *     eventFn : function(element, done) {\n     *       //code to run the animation\n     *       //once complete, then run done()\n     *       return function cancellationFunction() {\n     *         //code to cancel the animation\n     *       }\n     *     }\n     *   }\n   * ```\n   *\n   * @param {string} name The name of the animation.\n   * @param {Function} factory The factory function that will be executed to return the animation\n   *                           object.\n   */\n  this.register = function(name, factory) {\n    var key = name + '-animation';\n    if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',\n        \"Expecting class selector starting with '.' got '{0}'.\", name);\n    this.$$selectors[name.substr(1)] = key;\n    $provide.factory(key, factory);\n  };\n\n  /**\n   * @ngdoc method\n   * @name $animateProvider#classNameFilter\n   *\n   * @description\n   * Sets and/or returns the CSS class regular expression that is checked when performing\n   * an animation. Upon bootstrap the classNameFilter value is not set at all and will\n   * therefore enable $animate to attempt to perform an animation on any element.\n   * When setting the classNameFilter value, animations will only be performed on elements\n   * that successfully match the filter expression. This in turn can boost performance\n   * for low-powered devices as well as applications containing a lot of structural operations.\n   * @param {RegExp=} expression The className expression which will be checked against all animations\n   * @return {RegExp} The current CSS className expression value. If null then there is no expression value\n   */\n  this.classNameFilter = function(expression) {\n    if(arguments.length === 1) {\n      this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;\n    }\n    return this.$$classNameFilter;\n  };\n\n  this.$get = ['$timeout', '$$asyncCallback', function($timeout, $$asyncCallback) {\n\n    function async(fn) {\n      fn && $$asyncCallback(fn);\n    }\n\n    /**\n     *\n     * @ngdoc service\n     * @name $animate\n     * @description The $animate service provides rudimentary DOM manipulation functions to\n     * insert, remove and move elements within the DOM, as well as adding and removing classes.\n     * This service is the core service used by the ngAnimate $animator service which provides\n     * high-level animation hooks for CSS and JavaScript.\n     *\n     * $animate is available in the AngularJS core, however, the ngAnimate module must be included\n     * to enable full out animation support. Otherwise, $animate will only perform simple DOM\n     * manipulation operations.\n     *\n     * To learn more about enabling animation support, click here to visit the {@link ngAnimate\n     * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service\n     * page}.\n     */\n    return {\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#enter\n       * @function\n       * @description Inserts the element into the DOM either after the `after` element or within\n       *   the `parent` element. Once complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will be inserted into the DOM\n       * @param {DOMElement} parent the parent element which will append the element as\n       *   a child (if the after element is not present)\n       * @param {DOMElement} after the sibling element which will append the element\n       *   after itself\n       * @param {Function=} done callback function that will be called after the element has been\n       *   inserted into the DOM\n       */\n      enter : function(element, parent, after, done) {\n        if (after) {\n          after.after(element);\n        } else {\n          if (!parent || !parent[0]) {\n            parent = after.parent();\n          }\n          parent.append(element);\n        }\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#leave\n       * @function\n       * @description Removes the element from the DOM. Once complete, the done() callback will be\n       *   fired (if provided).\n       * @param {DOMElement} element the element which will be removed from the DOM\n       * @param {Function=} done callback function that will be called after the element has been\n       *   removed from the DOM\n       */\n      leave : function(element, done) {\n        element.remove();\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#move\n       * @function\n       * @description Moves the position of the provided element within the DOM to be placed\n       * either after the `after` element or inside of the `parent` element. Once complete, the\n       * done() callback will be fired (if provided).\n       *\n       * @param {DOMElement} element the element which will be moved around within the\n       *   DOM\n       * @param {DOMElement} parent the parent element where the element will be\n       *   inserted into (if the after element is not present)\n       * @param {DOMElement} after the sibling element where the element will be\n       *   positioned next to\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   element has been moved to its new position\n       */\n      move : function(element, parent, after, done) {\n        // Do not remove element before insert. Removing will cause data associated with the\n        // element to be dropped. Insert will implicitly do the remove.\n        this.enter(element, parent, after, done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#addClass\n       * @function\n       * @description Adds the provided className CSS class value to the provided element. Once\n       * complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will have the className value\n       *   added to it\n       * @param {string} className the CSS class which will be added to the element\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   className value has been added to the element\n       */\n      addClass : function(element, className, done) {\n        className = isString(className) ?\n                      className :\n                      isArray(className) ? className.join(' ') : '';\n        forEach(element, function (element) {\n          jqLiteAddClass(element, className);\n        });\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#removeClass\n       * @function\n       * @description Removes the provided className CSS class value from the provided element.\n       * Once complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will have the className value\n       *   removed from it\n       * @param {string} className the CSS class which will be removed from the element\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   className value has been removed from the element\n       */\n      removeClass : function(element, className, done) {\n        className = isString(className) ?\n                      className :\n                      isArray(className) ? className.join(' ') : '';\n        forEach(element, function (element) {\n          jqLiteRemoveClass(element, className);\n        });\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#setClass\n       * @function\n       * @description Adds and/or removes the given CSS classes to and from the element.\n       * Once complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will it's CSS classes changed\n       *   removed from it\n       * @param {string} add the CSS classes which will be added to the element\n       * @param {string} remove the CSS class which will be removed from the element\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   CSS classes have been set on the element\n       */\n      setClass : function(element, add, remove, done) {\n        forEach(element, function (element) {\n          jqLiteAddClass(element, add);\n          jqLiteRemoveClass(element, remove);\n        });\n        async(done);\n      },\n\n      enabled : noop\n    };\n  }];\n}];\n\nfunction $$AsyncCallbackProvider(){\n  this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {\n    return $$rAF.supported\n      ? function(fn) { return $$rAF(fn); }\n      : function(fn) {\n        return $timeout(fn, 0, false);\n      };\n  }];\n}\n\n/**\n * ! This is a private undocumented service !\n *\n * @name $browser\n * @requires $log\n * @description\n * This object has two goals:\n *\n * - hide all the global state in the browser caused by the window object\n * - abstract away all the browser specific features and inconsistencies\n *\n * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`\n * service, which can be used for convenient testing of the application without the interaction with\n * the real browser apis.\n */\n/**\n * @param {object} window The global window object.\n * @param {object} document jQuery wrapped document.\n * @param {function()} XHR XMLHttpRequest constructor.\n * @param {object} $log console.log or an object with the same interface.\n * @param {object} $sniffer $sniffer service\n */\nfunction Browser(window, document, $log, $sniffer) {\n  var self = this,\n      rawDocument = document[0],\n      location = window.location,\n      history = window.history,\n      setTimeout = window.setTimeout,\n      clearTimeout = window.clearTimeout,\n      pendingDeferIds = {};\n\n  self.isMock = false;\n\n  var outstandingRequestCount = 0;\n  var outstandingRequestCallbacks = [];\n\n  // TODO(vojta): remove this temporary api\n  self.$$completeOutstandingRequest = completeOutstandingRequest;\n  self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };\n\n  /**\n   * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`\n   * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.\n   */\n  function completeOutstandingRequest(fn) {\n    try {\n      fn.apply(null, sliceArgs(arguments, 1));\n    } finally {\n      outstandingRequestCount--;\n      if (outstandingRequestCount === 0) {\n        while(outstandingRequestCallbacks.length) {\n          try {\n            outstandingRequestCallbacks.pop()();\n          } catch (e) {\n            $log.error(e);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * @private\n   * Note: this method is used only by scenario runner\n   * TODO(vojta): prefix this method with $$ ?\n   * @param {function()} callback Function that will be called when no outstanding request\n   */\n  self.notifyWhenNoOutstandingRequests = function(callback) {\n    // force browser to execute all pollFns - this is needed so that cookies and other pollers fire\n    // at some deterministic time in respect to the test runner's actions. Leaving things up to the\n    // regular poller would result in flaky tests.\n    forEach(pollFns, function(pollFn){ pollFn(); });\n\n    if (outstandingRequestCount === 0) {\n      callback();\n    } else {\n      outstandingRequestCallbacks.push(callback);\n    }\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Poll Watcher API\n  //////////////////////////////////////////////////////////////\n  var pollFns = [],\n      pollTimeout;\n\n  /**\n   * @name $browser#addPollFn\n   *\n   * @param {function()} fn Poll function to add\n   *\n   * @description\n   * Adds a function to the list of functions that poller periodically executes,\n   * and starts polling if not started yet.\n   *\n   * @returns {function()} the added function\n   */\n  self.addPollFn = function(fn) {\n    if (isUndefined(pollTimeout)) startPoller(100, setTimeout);\n    pollFns.push(fn);\n    return fn;\n  };\n\n  /**\n   * @param {number} interval How often should browser call poll functions (ms)\n   * @param {function()} setTimeout Reference to a real or fake `setTimeout` function.\n   *\n   * @description\n   * Configures the poller to run in the specified intervals, using the specified\n   * setTimeout fn and kicks it off.\n   */\n  function startPoller(interval, setTimeout) {\n    (function check() {\n      forEach(pollFns, function(pollFn){ pollFn(); });\n      pollTimeout = setTimeout(check, interval);\n    })();\n  }\n\n  //////////////////////////////////////////////////////////////\n  // URL API\n  //////////////////////////////////////////////////////////////\n\n  var lastBrowserUrl = location.href,\n      baseElement = document.find('base'),\n      newLocation = null;\n\n  /**\n   * @name $browser#url\n   *\n   * @description\n   * GETTER:\n   * Without any argument, this method just returns current value of location.href.\n   *\n   * SETTER:\n   * With at least one argument, this method sets url to new value.\n   * If html5 history api supported, pushState/replaceState is used, otherwise\n   * location.href/location.replace is used.\n   * Returns its own instance to allow chaining\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to change url.\n   *\n   * @param {string} url New url (when used as setter)\n   * @param {boolean=} replace Should new url replace current history record ?\n   */\n  self.url = function(url, replace) {\n    // Android Browser BFCache causes location, history reference to become stale.\n    if (location !== window.location) location = window.location;\n    if (history !== window.history) history = window.history;\n\n    // setter\n    if (url) {\n      if (lastBrowserUrl == url) return;\n      lastBrowserUrl = url;\n      if ($sniffer.history) {\n        if (replace) history.replaceState(null, '', url);\n        else {\n          history.pushState(null, '', url);\n          // Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462\n          baseElement.attr('href', baseElement.attr('href'));\n        }\n      } else {\n        newLocation = url;\n        if (replace) {\n          location.replace(url);\n        } else {\n          location.href = url;\n        }\n      }\n      return self;\n    // getter\n    } else {\n      // - newLocation is a workaround for an IE7-9 issue with location.replace and location.href\n      //   methods not updating location.href synchronously.\n      // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172\n      return newLocation || location.href.replace(/%27/g,\"'\");\n    }\n  };\n\n  var urlChangeListeners = [],\n      urlChangeInit = false;\n\n  function fireUrlChange() {\n    newLocation = null;\n    if (lastBrowserUrl == self.url()) return;\n\n    lastBrowserUrl = self.url();\n    forEach(urlChangeListeners, function(listener) {\n      listener(self.url());\n    });\n  }\n\n  /**\n   * @name $browser#onUrlChange\n   *\n   * @description\n   * Register callback function that will be called, when url changes.\n   *\n   * It's only called when the url is changed from outside of angular:\n   * - user types different url into address bar\n   * - user clicks on history (forward/back) button\n   * - user clicks on a link\n   *\n   * It's not called when url is changed by $browser.url() method\n   *\n   * The listener gets called with new url as parameter.\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to monitor url changes in angular apps.\n   *\n   * @param {function(string)} listener Listener function to be called when url changes.\n   * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.\n   */\n  self.onUrlChange = function(callback) {\n    // TODO(vojta): refactor to use node's syntax for events\n    if (!urlChangeInit) {\n      // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)\n      // don't fire popstate when user change the address bar and don't fire hashchange when url\n      // changed by push/replaceState\n\n      // html5 history api - popstate event\n      if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange);\n      // hashchange event\n      if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange);\n      // polling\n      else self.addPollFn(fireUrlChange);\n\n      urlChangeInit = true;\n    }\n\n    urlChangeListeners.push(callback);\n    return callback;\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Misc API\n  //////////////////////////////////////////////////////////////\n\n  /**\n   * @name $browser#baseHref\n   *\n   * @description\n   * Returns current <base href>\n   * (always relative - without domain)\n   *\n   * @returns {string} The current base href\n   */\n  self.baseHref = function() {\n    var href = baseElement.attr('href');\n    return href ? href.replace(/^(https?\\:)?\\/\\/[^\\/]*/, '') : '';\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Cookies API\n  //////////////////////////////////////////////////////////////\n  var lastCookies = {};\n  var lastCookieString = '';\n  var cookiePath = self.baseHref();\n\n  /**\n   * @name $browser#cookies\n   *\n   * @param {string=} name Cookie name\n   * @param {string=} value Cookie value\n   *\n   * @description\n   * The cookies method provides a 'private' low level access to browser cookies.\n   * It is not meant to be used directly, use the $cookie service instead.\n   *\n   * The return values vary depending on the arguments that the method was called with as follows:\n   *\n   * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify\n   *   it\n   * - cookies(name, value) -> set name to value, if value is undefined delete the cookie\n   * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that\n   *   way)\n   *\n   * @returns {Object} Hash of all cookies (if called without any parameter)\n   */\n  self.cookies = function(name, value) {\n    /* global escape: false, unescape: false */\n    var cookieLength, cookieArray, cookie, i, index;\n\n    if (name) {\n      if (value === undefined) {\n        rawDocument.cookie = escape(name) + \"=;path=\" + cookiePath +\n                                \";expires=Thu, 01 Jan 1970 00:00:00 GMT\";\n      } else {\n        if (isString(value)) {\n          cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) +\n                                ';path=' + cookiePath).length + 1;\n\n          // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n          // - 300 cookies\n          // - 20 cookies per unique domain\n          // - 4096 bytes per cookie\n          if (cookieLength > 4096) {\n            $log.warn(\"Cookie '\"+ name +\n              \"' possibly not set or overflowed because it was too large (\"+\n              cookieLength + \" > 4096 bytes)!\");\n          }\n        }\n      }\n    } else {\n      if (rawDocument.cookie !== lastCookieString) {\n        lastCookieString = rawDocument.cookie;\n        cookieArray = lastCookieString.split(\"; \");\n        lastCookies = {};\n\n        for (i = 0; i < cookieArray.length; i++) {\n          cookie = cookieArray[i];\n          index = cookie.indexOf('=');\n          if (index > 0) { //ignore nameless cookies\n            name = unescape(cookie.substring(0, index));\n            // the first value that is seen for a cookie is the most\n            // specific one.  values for the same cookie name that\n            // follow are for less specific paths.\n            if (lastCookies[name] === undefined) {\n              lastCookies[name] = unescape(cookie.substring(index + 1));\n            }\n          }\n        }\n      }\n      return lastCookies;\n    }\n  };\n\n\n  /**\n   * @name $browser#defer\n   * @param {function()} fn A function, who's execution should be deferred.\n   * @param {number=} [delay=0] of milliseconds to defer the function execution.\n   * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.\n   *\n   * @description\n   * Executes a fn asynchronously via `setTimeout(fn, delay)`.\n   *\n   * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using\n   * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed\n   * via `$browser.defer.flush()`.\n   *\n   */\n  self.defer = function(fn, delay) {\n    var timeoutId;\n    outstandingRequestCount++;\n    timeoutId = setTimeout(function() {\n      delete pendingDeferIds[timeoutId];\n      completeOutstandingRequest(fn);\n    }, delay || 0);\n    pendingDeferIds[timeoutId] = true;\n    return timeoutId;\n  };\n\n\n  /**\n   * @name $browser#defer.cancel\n   *\n   * @description\n   * Cancels a deferred task identified with `deferId`.\n   *\n   * @param {*} deferId Token returned by the `$browser.defer` function.\n   * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n   *                    canceled.\n   */\n  self.defer.cancel = function(deferId) {\n    if (pendingDeferIds[deferId]) {\n      delete pendingDeferIds[deferId];\n      clearTimeout(deferId);\n      completeOutstandingRequest(noop);\n      return true;\n    }\n    return false;\n  };\n\n}\n\nfunction $BrowserProvider(){\n  this.$get = ['$window', '$log', '$sniffer', '$document',\n      function( $window,   $log,   $sniffer,   $document){\n        return new Browser($window, $document, $log, $sniffer);\n      }];\n}\n\n/**\n * @ngdoc service\n * @name $cacheFactory\n *\n * @description\n * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to\n * them.\n *\n * ```js\n *\n *  var cache = $cacheFactory('cacheId');\n *  expect($cacheFactory.get('cacheId')).toBe(cache);\n *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();\n *\n *  cache.put(\"key\", \"value\");\n *  cache.put(\"another key\", \"another value\");\n *\n *  // We've specified no options on creation\n *  expect(cache.info()).toEqual({id: 'cacheId', size: 2});\n *\n * ```\n *\n *\n * @param {string} cacheId Name or id of the newly created cache.\n * @param {object=} options Options object that specifies the cache behavior. Properties:\n *\n *   - `{number=}` `capacity` — turns the cache into LRU cache.\n *\n * @returns {object} Newly created cache object with the following set of methods:\n *\n * - `{object}` `info()` — Returns id, size, and options of cache.\n * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns\n *   it.\n * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.\n * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.\n * - `{void}` `removeAll()` — Removes all cached values.\n * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.\n *\n * @example\n   <example module=\"cacheExampleApp\">\n     <file name=\"index.html\">\n       <div ng-controller=\"CacheController\">\n         <input ng-model=\"newCacheKey\" placeholder=\"Key\">\n         <input ng-model=\"newCacheValue\" placeholder=\"Value\">\n         <button ng-click=\"put(newCacheKey, newCacheValue)\">Cache</button>\n\n         <p ng-if=\"keys.length\">Cached Values</p>\n         <div ng-repeat=\"key in keys\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"cache.get(key)\"></b>\n         </div>\n\n         <p>Cache Info</p>\n         <div ng-repeat=\"(key, value) in cache.info()\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"value\"></b>\n         </div>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('cacheExampleApp', []).\n         controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {\n           $scope.keys = [];\n           $scope.cache = $cacheFactory('cacheId');\n           $scope.put = function(key, value) {\n             $scope.cache.put(key, value);\n             $scope.keys.push(key);\n           };\n         }]);\n     </file>\n     <file name=\"style.css\">\n       p {\n         margin: 10px 0 3px;\n       }\n     </file>\n   </example>\n */\nfunction $CacheFactoryProvider() {\n\n  this.$get = function() {\n    var caches = {};\n\n    function cacheFactory(cacheId, options) {\n      if (cacheId in caches) {\n        throw minErr('$cacheFactory')('iid', \"CacheId '{0}' is already taken!\", cacheId);\n      }\n\n      var size = 0,\n          stats = extend({}, options, {id: cacheId}),\n          data = {},\n          capacity = (options && options.capacity) || Number.MAX_VALUE,\n          lruHash = {},\n          freshEnd = null,\n          staleEnd = null;\n\n      /**\n       * @ngdoc type\n       * @name $cacheFactory.Cache\n       *\n       * @description\n       * A cache object used to store and retrieve data, primarily used by\n       * {@link $http $http} and the {@link ng.directive:script script} directive to cache\n       * templates and other data.\n       *\n       * ```js\n       *  angular.module('superCache')\n       *    .factory('superCache', ['$cacheFactory', function($cacheFactory) {\n       *      return $cacheFactory('super-cache');\n       *    }]);\n       * ```\n       *\n       * Example test:\n       *\n       * ```js\n       *  it('should behave like a cache', inject(function(superCache) {\n       *    superCache.put('key', 'value');\n       *    superCache.put('another key', 'another value');\n       *\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 2\n       *    });\n       *\n       *    superCache.remove('another key');\n       *    expect(superCache.get('another key')).toBeUndefined();\n       *\n       *    superCache.removeAll();\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 0\n       *    });\n       *  }));\n       * ```\n       */\n      return caches[cacheId] = {\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#put\n         * @function\n         *\n         * @description\n         * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be\n         * retrieved later, and incrementing the size of the cache if the key was not already\n         * present in the cache. If behaving like an LRU cache, it will also remove stale\n         * entries from the set.\n         *\n         * It will not insert undefined values into the cache.\n         *\n         * @param {string} key the key under which the cached data is stored.\n         * @param {*} value the value to store alongside the key. If it is undefined, the key\n         *    will not be stored.\n         * @returns {*} the value stored.\n         */\n        put: function(key, value) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key] || (lruHash[key] = {key: key});\n\n            refresh(lruEntry);\n          }\n\n          if (isUndefined(value)) return;\n          if (!(key in data)) size++;\n          data[key] = value;\n\n          if (size > capacity) {\n            this.remove(staleEnd.key);\n          }\n\n          return value;\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#get\n         * @function\n         *\n         * @description\n         * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the data to be retrieved\n         * @returns {*} the value stored.\n         */\n        get: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            refresh(lruEntry);\n          }\n\n          return data[key];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#remove\n         * @function\n         *\n         * @description\n         * Removes an entry from the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the entry to be removed\n         */\n        remove: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            if (lruEntry == freshEnd) freshEnd = lruEntry.p;\n            if (lruEntry == staleEnd) staleEnd = lruEntry.n;\n            link(lruEntry.n,lruEntry.p);\n\n            delete lruHash[key];\n          }\n\n          delete data[key];\n          size--;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#removeAll\n         * @function\n         *\n         * @description\n         * Clears the cache object of any entries.\n         */\n        removeAll: function() {\n          data = {};\n          size = 0;\n          lruHash = {};\n          freshEnd = staleEnd = null;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#destroy\n         * @function\n         *\n         * @description\n         * Destroys the {@link $cacheFactory.Cache Cache} object entirely,\n         * removing it from the {@link $cacheFactory $cacheFactory} set.\n         */\n        destroy: function() {\n          data = null;\n          stats = null;\n          lruHash = null;\n          delete caches[cacheId];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#info\n         * @function\n         *\n         * @description\n         * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.\n         *\n         * @returns {object} an object with the following properties:\n         *   <ul>\n         *     <li>**id**: the id of the cache instance</li>\n         *     <li>**size**: the number of entries kept in the cache instance</li>\n         *     <li>**...**: any additional properties from the options object when creating the\n         *       cache.</li>\n         *   </ul>\n         */\n        info: function() {\n          return extend({}, stats, {size: size});\n        }\n      };\n\n\n      /**\n       * makes the `entry` the freshEnd of the LRU linked list\n       */\n      function refresh(entry) {\n        if (entry != freshEnd) {\n          if (!staleEnd) {\n            staleEnd = entry;\n          } else if (staleEnd == entry) {\n            staleEnd = entry.n;\n          }\n\n          link(entry.n, entry.p);\n          link(entry, freshEnd);\n          freshEnd = entry;\n          freshEnd.n = null;\n        }\n      }\n\n\n      /**\n       * bidirectionally links two entries of the LRU linked list\n       */\n      function link(nextEntry, prevEntry) {\n        if (nextEntry != prevEntry) {\n          if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify\n          if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify\n        }\n      }\n    }\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#info\n   *\n   * @description\n   * Get information about all the of the caches that have been created\n   *\n   * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`\n   */\n    cacheFactory.info = function() {\n      var info = {};\n      forEach(caches, function(cache, cacheId) {\n        info[cacheId] = cache.info();\n      });\n      return info;\n    };\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#get\n   *\n   * @description\n   * Get access to a cache object by the `cacheId` used when it was created.\n   *\n   * @param {string} cacheId Name or id of a cache to access.\n   * @returns {object} Cache object identified by the cacheId or undefined if no such cache.\n   */\n    cacheFactory.get = function(cacheId) {\n      return caches[cacheId];\n    };\n\n\n    return cacheFactory;\n  };\n}\n\n/**\n * @ngdoc service\n * @name $templateCache\n *\n * @description\n * The first time a template is used, it is loaded in the template cache for quick retrieval. You\n * can load templates directly into the cache in a `script` tag, or by consuming the\n * `$templateCache` service directly.\n *\n * Adding via the `script` tag:\n *\n * ```html\n *   <script type=\"text/ng-template\" id=\"templateId.html\">\n *     <p>This is the content of the template</p>\n *   </script>\n * ```\n *\n * **Note:** the `script` tag containing the template does not need to be included in the `head` of\n * the document, but it must be below the `ng-app` definition.\n *\n * Adding via the $templateCache service:\n *\n * ```js\n * var myApp = angular.module('myApp', []);\n * myApp.run(function($templateCache) {\n *   $templateCache.put('templateId.html', 'This is the content of the template');\n * });\n * ```\n *\n * To retrieve the template later, simply use it in your HTML:\n * ```html\n * <div ng-include=\" 'templateId.html' \"></div>\n * ```\n *\n * or get it via Javascript:\n * ```js\n * $templateCache.get('templateId.html')\n * ```\n *\n * See {@link ng.$cacheFactory $cacheFactory}.\n *\n */\nfunction $TemplateCacheProvider() {\n  this.$get = ['$cacheFactory', function($cacheFactory) {\n    return $cacheFactory('templates');\n  }];\n}\n\n/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!\n *\n * DOM-related variables:\n *\n * - \"node\" - DOM Node\n * - \"element\" - DOM Element or Node\n * - \"$node\" or \"$element\" - jqLite-wrapped node or element\n *\n *\n * Compiler related stuff:\n *\n * - \"linkFn\" - linking fn of a single directive\n * - \"nodeLinkFn\" - function that aggregates all linking fns for a particular node\n * - \"childLinkFn\" -  function that aggregates all linking fns for child nodes of a particular node\n * - \"compositeLinkFn\" - function that aggregates all linking fns for a compilation root (nodeList)\n */\n\n\n/**\n * @ngdoc service\n * @name $compile\n * @function\n *\n * @description\n * Compiles an HTML string or DOM into a template and produces a template function, which\n * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.\n *\n * The compilation is a process of walking the DOM tree and matching DOM elements to\n * {@link ng.$compileProvider#directive directives}.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** This document is an in-depth reference of all directive options.\n * For a gentle introduction to directives with examples of common use cases,\n * see the {@link guide/directive directive guide}.\n * </div>\n *\n * ## Comprehensive Directive API\n *\n * There are many different options for a directive.\n *\n * The difference resides in the return value of the factory function.\n * You can either return a \"Directive Definition Object\" (see below) that defines the directive properties,\n * or just the `postLink` function (all other properties will have the default values).\n *\n * <div class=\"alert alert-success\">\n * **Best Practice:** It's recommended to use the \"directive definition object\" form.\n * </div>\n *\n * Here's an example directive declared with a Directive Definition Object:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       priority: 0,\n *       template: '<div></div>', // or // function(tElement, tAttrs) { ... },\n *       // or\n *       // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },\n *       replace: false,\n *       transclude: false,\n *       restrict: 'A',\n *       scope: false,\n *       controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },\n *       controllerAs: 'stringAlias',\n *       require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],\n *       compile: function compile(tElement, tAttrs, transclude) {\n *         return {\n *           pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *           post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *         }\n *         // or\n *         // return function postLink( ... ) { ... }\n *       },\n *       // or\n *       // link: {\n *       //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *       //  post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *       // }\n *       // or\n *       // link: function postLink( ... ) { ... }\n *     };\n *     return directiveDefinitionObject;\n *   });\n * ```\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Any unspecified options will use the default value. You can see the default values below.\n * </div>\n *\n * Therefore the above can be simplified as:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       link: function postLink(scope, iElement, iAttrs) { ... }\n *     };\n *     return directiveDefinitionObject;\n *     // or\n *     // return function postLink(scope, iElement, iAttrs) { ... }\n *   });\n * ```\n *\n *\n *\n * ### Directive Definition Object\n *\n * The directive definition object provides instructions to the {@link ng.$compile\n * compiler}. The attributes are:\n *\n * #### `priority`\n * When there are multiple directives defined on a single DOM element, sometimes it\n * is necessary to specify the order in which the directives are applied. The `priority` is used\n * to sort the directives before their `compile` functions get called. Priority is defined as a\n * number. Directives with greater numerical `priority` are compiled first. Pre-link functions\n * are also run in priority order, but post-link functions are run in reverse order. The order\n * of directives with the same priority is undefined. The default priority is `0`.\n *\n * #### `terminal`\n * If set to true then the current `priority` will be the last set of directives\n * which will execute (any directives at the current priority will still execute\n * as the order of execution on same `priority` is undefined).\n *\n * #### `scope`\n * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the\n * same element request a new scope, only one new scope is created. The new scope rule does not\n * apply for the root of the template since the root of the template always gets a new scope.\n *\n * **If set to `{}` (object hash),** then a new \"isolate\" scope is created. The 'isolate' scope differs from\n * normal scope in that it does not prototypically inherit from the parent scope. This is useful\n * when creating reusable components, which should not accidentally read or modify data in the\n * parent scope.\n *\n * The 'isolate' scope takes an object hash which defines a set of local scope properties\n * derived from the parent scope. These local properties are useful for aliasing values for\n * templates. Locals definition is a hash of local scope property to its source:\n *\n * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is\n *   always a string since DOM attributes are strings. If no `attr` name is specified  then the\n *   attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"hello {{name}}\">` and widget definition\n *   of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect\n *   the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the\n *   `localName` property on the widget scope. The `name` is read from the parent scope (not\n *   component scope).\n *\n * * `=` or `=attr` - set up bi-directional binding between a local scope property and the\n *   parent scope property of name defined via the value of the `attr` attribute. If no `attr`\n *   name is specified then the attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"parentModel\">` and widget definition of\n *   `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the\n *   value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected\n *   in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent\n *   scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You\n *   can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional.\n *\n * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.\n *   If no `attr` name is specified then the attribute name is assumed to be the same as the\n *   local name. Given `<widget my-attr=\"count = count + value\">` and widget definition of\n *   `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to\n *   a function wrapper for the `count = count + value` expression. Often it's desirable to\n *   pass data from the isolated scope via an expression and to the parent scope, this can be\n *   done by passing a map of local variable names and values into the expression wrapper fn.\n *   For example, if the expression is `increment(amount)` then we can specify the amount value\n *   by calling the `localFn` as `localFn({amount: 22})`.\n *\n *\n *\n * #### `controller`\n * Controller constructor function. The controller is instantiated before the\n * pre-linking phase and it is shared with other directives (see\n * `require` attribute). This allows the directives to communicate with each other and augment\n * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:\n *\n * * `$scope` - Current scope associated with the element\n * * `$element` - Current element\n * * `$attrs` - Current attributes object for the element\n * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope.\n *    The scope can be overridden by an optional first argument.\n *   `function([scope], cloneLinkingFn)`.\n *\n *\n * #### `require`\n * Require another directive and inject its controller as the fourth argument to the linking function. The\n * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the\n * injected argument will be an array in corresponding order. If no such directive can be\n * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:\n *\n * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.\n * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.\n * * `^` - Locate the required controller by searching the element's parents. Throw an error if not found.\n * * `?^` - Attempt to locate the required controller by searching the element's parents or pass `null` to the\n *   `link` fn if not found.\n *\n *\n * #### `controllerAs`\n * Controller alias at the directive scope. An alias for the controller so it\n * can be referenced at the directive template. The directive needs to define a scope for this\n * configuration to be used. Useful in the case when directive is used as component.\n *\n *\n * #### `restrict`\n * String of subset of `EACM` which restricts the directive to a specific directive\n * declaration style. If omitted, the default (attributes only) is used.\n *\n * * `E` - Element name: `<my-directive></my-directive>`\n * * `A` - Attribute (default): `<div my-directive=\"exp\"></div>`\n * * `C` - Class: `<div class=\"my-directive: exp;\"></div>`\n * * `M` - Comment: `<!-- directive: my-directive exp -->`\n *\n *\n * #### `template`\n * replace the current element with the contents of the HTML. The replacement process\n * migrates all of the attributes / classes from the old element to the new one. See the\n * {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive\n * Directives Guide} for an example.\n *\n * You can specify `template` as a string representing the template or as a function which takes\n * two arguments `tElement` and `tAttrs` (described in the `compile` function api below) and\n * returns a string value representing the template.\n *\n *\n * #### `templateUrl`\n * Same as `template` but the template is loaded from the specified URL. Because\n * the template loading is asynchronous the compilation/linking is suspended until the template\n * is loaded.\n *\n * You can specify `templateUrl` as a string representing the URL or as a function which takes two\n * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns\n * a string value representing the url.  In either case, the template URL is passed through {@link\n * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.\n *\n *\n * #### `replace`\n * specify where the template should be inserted. Defaults to `false`.\n *\n * * `true` - the template will replace the current element.\n * * `false` - the template will replace the contents of the current element.\n *\n *\n * #### `transclude`\n * compile the content of the element and make it available to the directive.\n * Typically used with {@link ng.directive:ngTransclude\n * ngTransclude}. The advantage of transclusion is that the linking function receives a\n * transclusion function which is pre-bound to the correct scope. In a typical setup the widget\n * creates an `isolate` scope, but the transclusion is not a child, but a sibling of the `isolate`\n * scope. This makes it possible for the widget to have private state, and the transclusion to\n * be bound to the parent (pre-`isolate`) scope.\n *\n * * `true` - transclude the content of the directive.\n * * `'element'` - transclude the whole element including any directives defined at lower priority.\n *\n *\n * #### `compile`\n *\n * ```js\n *   function compile(tElement, tAttrs, transclude) { ... }\n * ```\n *\n * The compile function deals with transforming the template DOM. Since most directives do not do\n * template transformation, it is not used often. Examples that require compile functions are\n * directives that transform template DOM, such as {@link\n * api/ng.directive:ngRepeat ngRepeat}, or load the contents\n * asynchronously, such as {@link ngRoute.directive:ngView ngView}. The\n * compile function takes the following arguments.\n *\n *   * `tElement` - template element - The element where the directive has been declared. It is\n *     safe to do template transformation on the element and child elements only.\n *\n *   * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared\n *     between all directive compile functions.\n *\n *   * `transclude` -  [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`\n *\n * <div class=\"alert alert-warning\">\n * **Note:** The template instance and the link instance may be different objects if the template has\n * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that\n * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration\n * should be done in a linking function rather than in a compile function.\n * </div>\n\n * <div class=\"alert alert-warning\">\n * **Note:** The compile function cannot handle directives that recursively use themselves in their\n * own templates or compile functions. Compiling these directives results in an infinite loop and a\n * stack overflow errors.\n *\n * This can be avoided by manually using $compile in the postLink function to imperatively compile\n * a directive's template instead of relying on automatic template compilation via `template` or\n * `templateUrl` declaration or manual compilation inside the compile function.\n * </div>\n *\n * <div class=\"alert alert-error\">\n * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it\n *   e.g. does not know about the right outer scope. Please use the transclude function that is passed\n *   to the link function instead.\n * </div>\n\n * A compile function can have a return value which can be either a function or an object.\n *\n * * returning a (post-link) function - is equivalent to registering the linking function via the\n *   `link` property of the config object when the compile function is empty.\n *\n * * returning an object with function(s) registered via `pre` and `post` properties - allows you to\n *   control when a linking function should be called during the linking phase. See info about\n *   pre-linking and post-linking functions below.\n *\n *\n * #### `link`\n * This property is used only if the `compile` property is not defined.\n *\n * ```js\n *   function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }\n * ```\n *\n * The link function is responsible for registering DOM listeners as well as updating the DOM. It is\n * executed after the template has been cloned. This is where most of the directive logic will be\n * put.\n *\n *   * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the\n *     directive for registering {@link ng.$rootScope.Scope#$watch watches}.\n *\n *   * `iElement` - instance element - The element where the directive is to be used. It is safe to\n *     manipulate the children of the element only in `postLink` function since the children have\n *     already been linked.\n *\n *   * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared\n *     between all directive linking functions.\n *\n *   * `controller` - a controller instance - A controller instance if at least one directive on the\n *     element defines a controller. The controller is shared among all the directives, which allows\n *     the directives to use the controllers as a communication channel.\n *\n *   * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.\n *     The scope can be overridden by an optional first argument. This is the same as the `$transclude`\n *     parameter of directive controllers.\n *     `function([scope], cloneLinkingFn)`.\n *\n *\n * #### Pre-linking function\n *\n * Executed before the child elements are linked. Not safe to do DOM transformation since the\n * compiler linking function will fail to locate the correct elements for linking.\n *\n * #### Post-linking function\n *\n * Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function.\n *\n * <a name=\"Attributes\"></a>\n * ### Attributes\n *\n * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the\n * `link()` or `compile()` functions. It has a variety of uses.\n *\n * accessing *Normalized attribute names:*\n * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.\n * the attributes object allows for normalized access to\n *   the attributes.\n *\n * * *Directive inter-communication:* All directives share the same instance of the attributes\n *   object which allows the directives to use the attributes object as inter directive\n *   communication.\n *\n * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object\n *   allowing other directives to read the interpolated value.\n *\n * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes\n *   that contain interpolation (e.g. `src=\"{{bar}}\"`). Not only is this very efficient but it's also\n *   the only way to easily get the actual value because during the linking phase the interpolation\n *   hasn't been evaluated yet and so the value is at this time set to `undefined`.\n *\n * ```js\n * function linkingFn(scope, elm, attrs, ctrl) {\n *   // get the attribute value\n *   console.log(attrs.ngModel);\n *\n *   // change the attribute\n *   attrs.$set('ngModel', 'new value');\n *\n *   // observe changes to interpolated attribute\n *   attrs.$observe('ngModel', function(value) {\n *     console.log('ngModel has changed value to ' + value);\n *   });\n * }\n * ```\n *\n * Below is an example using `$compileProvider`.\n *\n * <div class=\"alert alert-warning\">\n * **Note**: Typically directives are registered with `module.directive`. The example below is\n * to illustrate how `$compile` works.\n * </div>\n *\n <example module=\"compile\">\n   <file name=\"index.html\">\n    <script>\n      angular.module('compile', [], function($compileProvider) {\n        // configure new 'compile' directive by passing a directive\n        // factory function. The factory function injects the '$compile'\n        $compileProvider.directive('compile', function($compile) {\n          // directive factory creates a link function\n          return function(scope, element, attrs) {\n            scope.$watch(\n              function(scope) {\n                 // watch the 'compile' expression for changes\n                return scope.$eval(attrs.compile);\n              },\n              function(value) {\n                // when the 'compile' expression changes\n                // assign it into the current DOM\n                element.html(value);\n\n                // compile the new DOM and link it to the current\n                // scope.\n                // NOTE: we only compile .childNodes so that\n                // we don't get into infinite loop compiling ourselves\n                $compile(element.contents())(scope);\n              }\n            );\n          };\n        })\n      });\n\n      function Ctrl($scope) {\n        $scope.name = 'Angular';\n        $scope.html = 'Hello {{name}}';\n      }\n    </script>\n    <div ng-controller=\"Ctrl\">\n      <input ng-model=\"name\"> <br>\n      <textarea ng-model=\"html\"></textarea> <br>\n      <div compile=\"html\"></div>\n    </div>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n     it('should auto compile', function() {\n       var textarea = $('textarea');\n       var output = $('div[compile]');\n       // The initial state reads 'Hello Angular'.\n       expect(output.getText()).toBe('Hello Angular');\n       textarea.clear();\n       textarea.sendKeys('{{name}}!');\n       expect(output.getText()).toBe('Angular!');\n     });\n   </file>\n </example>\n\n *\n *\n * @param {string|DOMElement} element Element or HTML string to compile into a template function.\n * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives.\n * @param {number} maxPriority only apply directives lower than given priority (Only effects the\n *                 root element(s), not their children)\n * @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template\n * (a DOM element/tree) to a scope. Where:\n *\n *  * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.\n *  * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the\n *  `template` and call the `cloneAttachFn` function allowing the caller to attach the\n *  cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is\n *  called as: <br> `cloneAttachFn(clonedElement, scope)` where:\n *\n *      * `clonedElement` - is a clone of the original `element` passed into the compiler.\n *      * `scope` - is the current scope with which the linking function is working with.\n *\n * Calling the linking function returns the element of the template. It is either the original\n * element passed in, or the clone of the element if the `cloneAttachFn` is provided.\n *\n * After linking the view is not updated until after a call to $digest which typically is done by\n * Angular automatically.\n *\n * If you need access to the bound view, there are two ways to do it:\n *\n * - If you are not asking the linking function to clone the template, create the DOM element(s)\n *   before you send them to the compiler and keep this reference around.\n *   ```js\n *     var element = $compile('<p>{{total}}</p>')(scope);\n *   ```\n *\n * - if on the other hand, you need the element to be cloned, the view reference from the original\n *   example would not point to the clone, but rather to the original template that was cloned. In\n *   this case, you can access the clone via the cloneAttachFn:\n *   ```js\n *     var templateElement = angular.element('<p>{{total}}</p>'),\n *         scope = ....;\n *\n *     var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {\n *       //attach the clone to DOM document at the right place\n *     });\n *\n *     //now we have reference to the cloned DOM via `clonedElement`\n *   ```\n *\n *\n * For information on how the compiler works, see the\n * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.\n */\n\nvar $compileMinErr = minErr('$compile');\n\n/**\n * @ngdoc provider\n * @name $compileProvider\n * @function\n *\n * @description\n */\n$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];\nfunction $CompileProvider($provide, $$sanitizeUriProvider) {\n  var hasDirectives = {},\n      Suffix = 'Directive',\n      COMMENT_DIRECTIVE_REGEXP = /^\\s*directive\\:\\s*([\\d\\w\\-_]+)\\s+(.*)$/,\n      CLASS_DIRECTIVE_REGEXP = /(([\\d\\w\\-_]+)(?:\\:([^;]+))?;?)/;\n\n  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes\n  // The assumption is that future DOM event attribute names will begin with\n  // 'on' and be composed of only English letters.\n  var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#directive\n   * @function\n   *\n   * @description\n   * Register a new directive with the compiler.\n   *\n   * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which\n   *    will match as <code>ng-bind</code>), or an object map of directives where the keys are the\n   *    names and the values are the factories.\n   * @param {Function|Array} directiveFactory An injectable directive factory function. See\n   *    {@link guide/directive} for more info.\n   * @returns {ng.$compileProvider} Self for chaining.\n   */\n   this.directive = function registerDirective(name, directiveFactory) {\n    assertNotHasOwnProperty(name, 'directive');\n    if (isString(name)) {\n      assertArg(directiveFactory, 'directiveFactory');\n      if (!hasDirectives.hasOwnProperty(name)) {\n        hasDirectives[name] = [];\n        $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',\n          function($injector, $exceptionHandler) {\n            var directives = [];\n            forEach(hasDirectives[name], function(directiveFactory, index) {\n              try {\n                var directive = $injector.invoke(directiveFactory);\n                if (isFunction(directive)) {\n                  directive = { compile: valueFn(directive) };\n                } else if (!directive.compile && directive.link) {\n                  directive.compile = valueFn(directive.link);\n                }\n                directive.priority = directive.priority || 0;\n                directive.index = index;\n                directive.name = directive.name || name;\n                directive.require = directive.require || (directive.controller && directive.name);\n                directive.restrict = directive.restrict || 'A';\n                directives.push(directive);\n              } catch (e) {\n                $exceptionHandler(e);\n              }\n            });\n            return directives;\n          }]);\n      }\n      hasDirectives[name].push(directiveFactory);\n    } else {\n      forEach(name, reverseParams(registerDirective));\n    }\n    return this;\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#aHrefSanitizationWhitelist\n   * @function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.aHrefSanitizationWhitelist();\n    }\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#imgSrcSanitizationWhitelist\n   * @function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();\n    }\n  };\n\n  this.$get = [\n            '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse',\n            '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',\n    function($injector,   $interpolate,   $exceptionHandler,   $http,   $templateCache,   $parse,\n             $controller,   $rootScope,   $document,   $sce,   $animate,   $$sanitizeUri) {\n\n    var Attributes = function(element, attr) {\n      this.$$element = element;\n      this.$attr = attr || {};\n    };\n\n    Attributes.prototype = {\n      $normalize: directiveNormalize,\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$addClass\n       * @function\n       *\n       * @description\n       * Adds the CSS class value specified by the classVal parameter to the element. If animations\n       * are enabled then an animation will be triggered for the class addition.\n       *\n       * @param {string} classVal The className value that will be added to the element\n       */\n      $addClass : function(classVal) {\n        if(classVal && classVal.length > 0) {\n          $animate.addClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$removeClass\n       * @function\n       *\n       * @description\n       * Removes the CSS class value specified by the classVal parameter from the element. If\n       * animations are enabled then an animation will be triggered for the class removal.\n       *\n       * @param {string} classVal The className value that will be removed from the element\n       */\n      $removeClass : function(classVal) {\n        if(classVal && classVal.length > 0) {\n          $animate.removeClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$updateClass\n       * @function\n       *\n       * @description\n       * Adds and removes the appropriate CSS class values to the element based on the difference\n       * between the new and old CSS class values (specified as newClasses and oldClasses).\n       *\n       * @param {string} newClasses The current CSS className value\n       * @param {string} oldClasses The former CSS className value\n       */\n      $updateClass : function(newClasses, oldClasses) {\n        var toAdd = tokenDifference(newClasses, oldClasses);\n        var toRemove = tokenDifference(oldClasses, newClasses);\n\n        if(toAdd.length === 0) {\n          $animate.removeClass(this.$$element, toRemove);\n        } else if(toRemove.length === 0) {\n          $animate.addClass(this.$$element, toAdd);\n        } else {\n          $animate.setClass(this.$$element, toAdd, toRemove);\n        }\n      },\n\n      /**\n       * Set a normalized attribute on the element in a way such that all directives\n       * can share the attribute. This function properly handles boolean attributes.\n       * @param {string} key Normalized key. (ie ngAttribute)\n       * @param {string|boolean} value The value to set. If `null` attribute will be deleted.\n       * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.\n       *     Defaults to true.\n       * @param {string=} attrName Optional none normalized name. Defaults to key.\n       */\n      $set: function(key, value, writeAttr, attrName) {\n        // TODO: decide whether or not to throw an error if \"class\"\n        //is set through this function since it may cause $updateClass to\n        //become unstable.\n\n        var booleanKey = getBooleanAttrName(this.$$element[0], key),\n            normalizedVal,\n            nodeName;\n\n        if (booleanKey) {\n          this.$$element.prop(key, value);\n          attrName = booleanKey;\n        }\n\n        this[key] = value;\n\n        // translate normalized key to actual key\n        if (attrName) {\n          this.$attr[key] = attrName;\n        } else {\n          attrName = this.$attr[key];\n          if (!attrName) {\n            this.$attr[key] = attrName = snake_case(key, '-');\n          }\n        }\n\n        nodeName = nodeName_(this.$$element);\n\n        // sanitize a[href] and img[src] values\n        if ((nodeName === 'A' && key === 'href') ||\n            (nodeName === 'IMG' && key === 'src')) {\n          this[key] = value = $$sanitizeUri(value, key === 'src');\n        }\n\n        if (writeAttr !== false) {\n          if (value === null || value === undefined) {\n            this.$$element.removeAttr(attrName);\n          } else {\n            this.$$element.attr(attrName, value);\n          }\n        }\n\n        // fire observers\n        var $$observers = this.$$observers;\n        $$observers && forEach($$observers[key], function(fn) {\n          try {\n            fn(value);\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        });\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$observe\n       * @function\n       *\n       * @description\n       * Observes an interpolated attribute.\n       *\n       * The observer function will be invoked once during the next `$digest` following\n       * compilation. The observer is then invoked whenever the interpolated value\n       * changes.\n       *\n       * @param {string} key Normalized key. (ie ngAttribute) .\n       * @param {function(interpolatedValue)} fn Function that will be called whenever\n                the interpolated value of the attribute changes.\n       *        See the {@link guide/directive#Attributes Directives} guide for more info.\n       * @returns {function()} the `fn` parameter.\n       */\n      $observe: function(key, fn) {\n        var attrs = this,\n            $$observers = (attrs.$$observers || (attrs.$$observers = {})),\n            listeners = ($$observers[key] || ($$observers[key] = []));\n\n        listeners.push(fn);\n        $rootScope.$evalAsync(function() {\n          if (!listeners.$$inter) {\n            // no one registered attribute interpolation function, so lets call it manually\n            fn(attrs[key]);\n          }\n        });\n        return fn;\n      }\n    };\n\n    var startSymbol = $interpolate.startSymbol(),\n        endSymbol = $interpolate.endSymbol(),\n        denormalizeTemplate = (startSymbol == '{{' || endSymbol  == '}}')\n            ? identity\n            : function denormalizeTemplate(template) {\n              return template.replace(/\\{\\{/g, startSymbol).replace(/}}/g, endSymbol);\n        },\n        NG_ATTR_BINDING = /^ngAttr[A-Z]/;\n\n\n    return compile;\n\n    //================================\n\n    function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,\n                        previousCompileContext) {\n      if (!($compileNodes instanceof jqLite)) {\n        // jquery always rewraps, whereas we need to preserve the original selector so that we can\n        // modify it.\n        $compileNodes = jqLite($compileNodes);\n      }\n      // We can not compile top level text elements since text nodes can be merged and we will\n      // not be able to attach scope data to them, so we will wrap them in <span>\n      forEach($compileNodes, function(node, index){\n        if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\\S+/) /* non-empty */ ) {\n          $compileNodes[index] = node = jqLite(node).wrap('<span></span>').parent()[0];\n        }\n      });\n      var compositeLinkFn =\n              compileNodes($compileNodes, transcludeFn, $compileNodes,\n                           maxPriority, ignoreDirective, previousCompileContext);\n      safeAddClass($compileNodes, 'ng-scope');\n      return function publicLinkFn(scope, cloneConnectFn, transcludeControllers){\n        assertArg(scope, 'scope');\n        // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart\n        // and sometimes changes the structure of the DOM.\n        var $linkNode = cloneConnectFn\n          ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!!\n          : $compileNodes;\n\n        forEach(transcludeControllers, function(instance, name) {\n          $linkNode.data('$' + name + 'Controller', instance);\n        });\n\n        // Attach scope only to non-text nodes.\n        for(var i = 0, ii = $linkNode.length; i<ii; i++) {\n          var node = $linkNode[i],\n              nodeType = node.nodeType;\n          if (nodeType === 1 /* element */ || nodeType === 9 /* document */) {\n            $linkNode.eq(i).data('$scope', scope);\n          }\n        }\n\n        if (cloneConnectFn) cloneConnectFn($linkNode, scope);\n        if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode);\n        return $linkNode;\n      };\n    }\n\n    function safeAddClass($element, className) {\n      try {\n        $element.addClass(className);\n      } catch(e) {\n        // ignore, since it means that we are trying to set class on\n        // SVG element, where class name is read-only.\n      }\n    }\n\n    /**\n     * Compile function matches each node in nodeList against the directives. Once all directives\n     * for a particular node are collected their compile functions are executed. The compile\n     * functions return values - the linking functions - are combined into a composite linking\n     * function, which is the a linking function for the node.\n     *\n     * @param {NodeList} nodeList an array of nodes or NodeList to compile\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *        scope argument is auto-generated to the new child of the transcluded parent scope.\n     * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then\n     *        the rootElement must be set the jqLite collection of the compile root. This is\n     *        needed so that the jqLite collection items can be replaced with widgets.\n     * @param {number=} maxPriority Max directive priority.\n     * @returns {Function} A composite linking function of all of the matched directives or null.\n     */\n    function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,\n                            previousCompileContext) {\n      var linkFns = [],\n          attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound;\n\n      for (var i = 0; i < nodeList.length; i++) {\n        attrs = new Attributes();\n\n        // we must always refer to nodeList[i] since the nodes can be replaced underneath us.\n        directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,\n                                        ignoreDirective);\n\n        nodeLinkFn = (directives.length)\n            ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,\n                                      null, [], [], previousCompileContext)\n            : null;\n\n        if (nodeLinkFn && nodeLinkFn.scope) {\n          safeAddClass(jqLite(nodeList[i]), 'ng-scope');\n        }\n\n        childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||\n                      !(childNodes = nodeList[i].childNodes) ||\n                      !childNodes.length)\n            ? null\n            : compileNodes(childNodes,\n                 nodeLinkFn ? nodeLinkFn.transclude : transcludeFn);\n\n        linkFns.push(nodeLinkFn, childLinkFn);\n        linkFnFound = linkFnFound || nodeLinkFn || childLinkFn;\n        //use the previous context only for the first element in the virtual group\n        previousCompileContext = null;\n      }\n\n      // return a linking function if we have found anything, null otherwise\n      return linkFnFound ? compositeLinkFn : null;\n\n      function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) {\n        var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n;\n\n        // copy nodeList so that linking doesn't break due to live list updates.\n        var nodeListLength = nodeList.length,\n            stableNodeList = new Array(nodeListLength);\n        for (i = 0; i < nodeListLength; i++) {\n          stableNodeList[i] = nodeList[i];\n        }\n\n        for(i = 0, n = 0, ii = linkFns.length; i < ii; n++) {\n          node = stableNodeList[n];\n          nodeLinkFn = linkFns[i++];\n          childLinkFn = linkFns[i++];\n          $node = jqLite(node);\n\n          if (nodeLinkFn) {\n            if (nodeLinkFn.scope) {\n              childScope = scope.$new();\n              $node.data('$scope', childScope);\n            } else {\n              childScope = scope;\n            }\n            childTranscludeFn = nodeLinkFn.transclude;\n            if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) {\n              nodeLinkFn(childLinkFn, childScope, node, $rootElement,\n                createBoundTranscludeFn(scope, childTranscludeFn || transcludeFn)\n              );\n            } else {\n              nodeLinkFn(childLinkFn, childScope, node, $rootElement, boundTranscludeFn);\n            }\n          } else if (childLinkFn) {\n            childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn);\n          }\n        }\n      }\n    }\n\n    function createBoundTranscludeFn(scope, transcludeFn) {\n      return function boundTranscludeFn(transcludedScope, cloneFn, controllers) {\n        var scopeCreated = false;\n\n        if (!transcludedScope) {\n          transcludedScope = scope.$new();\n          transcludedScope.$$transcluded = true;\n          scopeCreated = true;\n        }\n\n        var clone = transcludeFn(transcludedScope, cloneFn, controllers);\n        if (scopeCreated) {\n          clone.on('$destroy', bind(transcludedScope, transcludedScope.$destroy));\n        }\n        return clone;\n      };\n    }\n\n    /**\n     * Looks for directives on the given node and adds them to the directive collection which is\n     * sorted.\n     *\n     * @param node Node to search.\n     * @param directives An array to which the directives are added to. This array is sorted before\n     *        the function returns.\n     * @param attrs The shared attrs object which is used to populate the normalized attributes.\n     * @param {number=} maxPriority Max directive priority.\n     */\n    function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {\n      var nodeType = node.nodeType,\n          attrsMap = attrs.$attr,\n          match,\n          className;\n\n      switch(nodeType) {\n        case 1: /* Element */\n          // use the node name: <directive>\n          addDirective(directives,\n              directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective);\n\n          // iterate over the attributes\n          for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes,\n                   j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {\n            var attrStartName = false;\n            var attrEndName = false;\n\n            attr = nAttrs[j];\n            if (!msie || msie >= 8 || attr.specified) {\n              name = attr.name;\n              // support ngAttr attribute binding\n              ngAttrName = directiveNormalize(name);\n              if (NG_ATTR_BINDING.test(ngAttrName)) {\n                name = snake_case(ngAttrName.substr(6), '-');\n              }\n\n              var directiveNName = ngAttrName.replace(/(Start|End)$/, '');\n              if (ngAttrName === directiveNName + 'Start') {\n                attrStartName = name;\n                attrEndName = name.substr(0, name.length - 5) + 'end';\n                name = name.substr(0, name.length - 6);\n              }\n\n              nName = directiveNormalize(name.toLowerCase());\n              attrsMap[nName] = name;\n              attrs[nName] = value = trim(attr.value);\n              if (getBooleanAttrName(node, nName)) {\n                attrs[nName] = true; // presence means true\n              }\n              addAttrInterpolateDirective(node, directives, value, nName);\n              addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,\n                            attrEndName);\n            }\n          }\n\n          // use class as directive\n          className = node.className;\n          if (isString(className) && className !== '') {\n            while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {\n              nName = directiveNormalize(match[2]);\n              if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[3]);\n              }\n              className = className.substr(match.index + match[0].length);\n            }\n          }\n          break;\n        case 3: /* Text Node */\n          addTextInterpolateDirective(directives, node.nodeValue);\n          break;\n        case 8: /* Comment */\n          try {\n            match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);\n            if (match) {\n              nName = directiveNormalize(match[1]);\n              if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[2]);\n              }\n            }\n          } catch (e) {\n            // turns out that under some circumstances IE9 throws errors when one attempts to read\n            // comment's node value.\n            // Just ignore it and continue. (Can't seem to reproduce in test case.)\n          }\n          break;\n      }\n\n      directives.sort(byPriority);\n      return directives;\n    }\n\n    /**\n     * Given a node with an directive-start it collects all of the siblings until it finds\n     * directive-end.\n     * @param node\n     * @param attrStart\n     * @param attrEnd\n     * @returns {*}\n     */\n    function groupScan(node, attrStart, attrEnd) {\n      var nodes = [];\n      var depth = 0;\n      if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {\n        var startNode = node;\n        do {\n          if (!node) {\n            throw $compileMinErr('uterdir',\n                      \"Unterminated attribute, found '{0}' but no matching '{1}' found.\",\n                      attrStart, attrEnd);\n          }\n          if (node.nodeType == 1 /** Element **/) {\n            if (node.hasAttribute(attrStart)) depth++;\n            if (node.hasAttribute(attrEnd)) depth--;\n          }\n          nodes.push(node);\n          node = node.nextSibling;\n        } while (depth > 0);\n      } else {\n        nodes.push(node);\n      }\n\n      return jqLite(nodes);\n    }\n\n    /**\n     * Wrapper for linking function which converts normal linking function into a grouped\n     * linking function.\n     * @param linkFn\n     * @param attrStart\n     * @param attrEnd\n     * @returns {Function}\n     */\n    function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {\n      return function(scope, element, attrs, controllers, transcludeFn) {\n        element = groupScan(element[0], attrStart, attrEnd);\n        return linkFn(scope, element, attrs, controllers, transcludeFn);\n      };\n    }\n\n    /**\n     * Once the directives have been collected, their compile functions are executed. This method\n     * is responsible for inlining directive templates as well as terminating the application\n     * of the directives if the terminal directive has been reached.\n     *\n     * @param {Array} directives Array of collected directives to execute their compile function.\n     *        this needs to be pre-sorted by priority order.\n     * @param {Node} compileNode The raw DOM node to apply the compile functions to\n     * @param {Object} templateAttrs The shared attribute function\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *                                                  scope argument is auto-generated to the new\n     *                                                  child of the transcluded parent scope.\n     * @param {JQLite} jqCollection If we are working on the root of the compile tree then this\n     *                              argument has the root jqLite array so that we can replace nodes\n     *                              on it.\n     * @param {Object=} originalReplaceDirective An optional directive that will be ignored when\n     *                                           compiling the transclusion.\n     * @param {Array.<Function>} preLinkFns\n     * @param {Array.<Function>} postLinkFns\n     * @param {Object} previousCompileContext Context used for previous compilation of the current\n     *                                        node\n     * @returns {Function} linkFn\n     */\n    function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,\n                                   jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,\n                                   previousCompileContext) {\n      previousCompileContext = previousCompileContext || {};\n\n      var terminalPriority = -Number.MAX_VALUE,\n          newScopeDirective,\n          controllerDirectives = previousCompileContext.controllerDirectives,\n          newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,\n          templateDirective = previousCompileContext.templateDirective,\n          nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,\n          hasTranscludeDirective = false,\n          hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,\n          $compileNode = templateAttrs.$$element = jqLite(compileNode),\n          directive,\n          directiveName,\n          $template,\n          replaceDirective = originalReplaceDirective,\n          childTranscludeFn = transcludeFn,\n          linkFn,\n          directiveValue;\n\n      // executes all directives on the current element\n      for(var i = 0, ii = directives.length; i < ii; i++) {\n        directive = directives[i];\n        var attrStart = directive.$$start;\n        var attrEnd = directive.$$end;\n\n        // collect multiblock sections\n        if (attrStart) {\n          $compileNode = groupScan(compileNode, attrStart, attrEnd);\n        }\n        $template = undefined;\n\n        if (terminalPriority > directive.priority) {\n          break; // prevent further processing of directives\n        }\n\n        if (directiveValue = directive.scope) {\n          newScopeDirective = newScopeDirective || directive;\n\n          // skip the check for directives with async templates, we'll check the derived sync\n          // directive when the template arrives\n          if (!directive.templateUrl) {\n            assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,\n                              $compileNode);\n            if (isObject(directiveValue)) {\n              newIsolateScopeDirective = directive;\n            }\n          }\n        }\n\n        directiveName = directive.name;\n\n        if (!directive.templateUrl && directive.controller) {\n          directiveValue = directive.controller;\n          controllerDirectives = controllerDirectives || {};\n          assertNoDuplicate(\"'\" + directiveName + \"' controller\",\n              controllerDirectives[directiveName], directive, $compileNode);\n          controllerDirectives[directiveName] = directive;\n        }\n\n        if (directiveValue = directive.transclude) {\n          hasTranscludeDirective = true;\n\n          // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.\n          // This option should only be used by directives that know how to safely handle element transclusion,\n          // where the transcluded nodes are added or replaced after linking.\n          if (!directive.$$tlb) {\n            assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);\n            nonTlbTranscludeDirective = directive;\n          }\n\n          if (directiveValue == 'element') {\n            hasElementTranscludeDirective = true;\n            terminalPriority = directive.priority;\n            $template = groupScan(compileNode, attrStart, attrEnd);\n            $compileNode = templateAttrs.$$element =\n                jqLite(document.createComment(' ' + directiveName + ': ' +\n                                              templateAttrs[directiveName] + ' '));\n            compileNode = $compileNode[0];\n            replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode);\n\n            childTranscludeFn = compile($template, transcludeFn, terminalPriority,\n                                        replaceDirective && replaceDirective.name, {\n                                          // Don't pass in:\n                                          // - controllerDirectives - otherwise we'll create duplicates controllers\n                                          // - newIsolateScopeDirective or templateDirective - combining templates with\n                                          //   element transclusion doesn't make sense.\n                                          //\n                                          // We need only nonTlbTranscludeDirective so that we prevent putting transclusion\n                                          // on the same element more than once.\n                                          nonTlbTranscludeDirective: nonTlbTranscludeDirective\n                                        });\n          } else {\n            $template = jqLite(jqLiteClone(compileNode)).contents();\n            $compileNode.empty(); // clear contents\n            childTranscludeFn = compile($template, transcludeFn);\n          }\n        }\n\n        if (directive.template) {\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          directiveValue = (isFunction(directive.template))\n              ? directive.template($compileNode, templateAttrs)\n              : directive.template;\n\n          directiveValue = denormalizeTemplate(directiveValue);\n\n          if (directive.replace) {\n            replaceDirective = directive;\n            if (jqLiteIsTextNode(directiveValue)) {\n              $template = [];\n            } else {\n              $template = jqLite(directiveValue);\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== 1) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  directiveName, '');\n            }\n\n            replaceWith(jqCollection, $compileNode, compileNode);\n\n            var newTemplateAttrs = {$attr: {}};\n\n            // combine directives from the original node and from the template:\n            // - take the array of directives for this element\n            // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)\n            // - collect directives from the template and sort them by priority\n            // - combine directives as: processed + template + unprocessed\n            var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);\n            var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));\n\n            if (newIsolateScopeDirective) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = directives.concat(templateDirectives).concat(unprocessedDirectives);\n            mergeTemplateAttributes(templateAttrs, newTemplateAttrs);\n\n            ii = directives.length;\n          } else {\n            $compileNode.html(directiveValue);\n          }\n        }\n\n        if (directive.templateUrl) {\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          if (directive.replace) {\n            replaceDirective = directive;\n          }\n\n          nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,\n              templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, {\n                controllerDirectives: controllerDirectives,\n                newIsolateScopeDirective: newIsolateScopeDirective,\n                templateDirective: templateDirective,\n                nonTlbTranscludeDirective: nonTlbTranscludeDirective\n              });\n          ii = directives.length;\n        } else if (directive.compile) {\n          try {\n            linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);\n            if (isFunction(linkFn)) {\n              addLinkFns(null, linkFn, attrStart, attrEnd);\n            } else if (linkFn) {\n              addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);\n            }\n          } catch (e) {\n            $exceptionHandler(e, startingTag($compileNode));\n          }\n        }\n\n        if (directive.terminal) {\n          nodeLinkFn.terminal = true;\n          terminalPriority = Math.max(terminalPriority, directive.priority);\n        }\n\n      }\n\n      nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;\n      nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn;\n      previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;\n\n      // might be normal or delayed nodeLinkFn depending on if templateUrl is present\n      return nodeLinkFn;\n\n      ////////////////////\n\n      function addLinkFns(pre, post, attrStart, attrEnd) {\n        if (pre) {\n          if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);\n          pre.require = directive.require;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            pre = cloneAndAnnotateFn(pre, {isolateScope: true});\n          }\n          preLinkFns.push(pre);\n        }\n        if (post) {\n          if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);\n          post.require = directive.require;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            post = cloneAndAnnotateFn(post, {isolateScope: true});\n          }\n          postLinkFns.push(post);\n        }\n      }\n\n\n      function getControllers(require, $element, elementControllers) {\n        var value, retrievalMethod = 'data', optional = false;\n        if (isString(require)) {\n          while((value = require.charAt(0)) == '^' || value == '?') {\n            require = require.substr(1);\n            if (value == '^') {\n              retrievalMethod = 'inheritedData';\n            }\n            optional = optional || value == '?';\n          }\n          value = null;\n\n          if (elementControllers && retrievalMethod === 'data') {\n            value = elementControllers[require];\n          }\n          value = value || $element[retrievalMethod]('$' + require + 'Controller');\n\n          if (!value && !optional) {\n            throw $compileMinErr('ctreq',\n                \"Controller '{0}', required by directive '{1}', can't be found!\",\n                require, directiveName);\n          }\n          return value;\n        } else if (isArray(require)) {\n          value = [];\n          forEach(require, function(require) {\n            value.push(getControllers(require, $element, elementControllers));\n          });\n        }\n        return value;\n      }\n\n\n      function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {\n        var attrs, $element, i, ii, linkFn, controller, isolateScope, elementControllers = {}, transcludeFn;\n\n        if (compileNode === linkNode) {\n          attrs = templateAttrs;\n        } else {\n          attrs = shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr));\n        }\n        $element = attrs.$$element;\n\n        if (newIsolateScopeDirective) {\n          var LOCAL_REGEXP = /^\\s*([@=&])(\\??)\\s*(\\w*)\\s*$/;\n          var $linkNode = jqLite(linkNode);\n\n          isolateScope = scope.$new(true);\n\n          if (templateDirective && (templateDirective === newIsolateScopeDirective.$$originalDirective)) {\n            $linkNode.data('$isolateScope', isolateScope) ;\n          } else {\n            $linkNode.data('$isolateScopeNoTemplate', isolateScope);\n          }\n\n\n\n          safeAddClass($linkNode, 'ng-isolate-scope');\n\n          forEach(newIsolateScopeDirective.scope, function(definition, scopeName) {\n            var match = definition.match(LOCAL_REGEXP) || [],\n                attrName = match[3] || scopeName,\n                optional = (match[2] == '?'),\n                mode = match[1], // @, =, or &\n                lastValue,\n                parentGet, parentSet, compare;\n\n            isolateScope.$$isolateBindings[scopeName] = mode + attrName;\n\n            switch (mode) {\n\n              case '@':\n                attrs.$observe(attrName, function(value) {\n                  isolateScope[scopeName] = value;\n                });\n                attrs.$$observers[attrName].$$scope = scope;\n                if( attrs[attrName] ) {\n                  // If the attribute has been provided then we trigger an interpolation to ensure\n                  // the value is there for use in the link fn\n                  isolateScope[scopeName] = $interpolate(attrs[attrName])(scope);\n                }\n                break;\n\n              case '=':\n                if (optional && !attrs[attrName]) {\n                  return;\n                }\n                parentGet = $parse(attrs[attrName]);\n                if (parentGet.literal) {\n                  compare = equals;\n                } else {\n                  compare = function(a,b) { return a === b; };\n                }\n                parentSet = parentGet.assign || function() {\n                  // reset the change, or we will throw this exception on every $digest\n                  lastValue = isolateScope[scopeName] = parentGet(scope);\n                  throw $compileMinErr('nonassign',\n                      \"Expression '{0}' used with directive '{1}' is non-assignable!\",\n                      attrs[attrName], newIsolateScopeDirective.name);\n                };\n                lastValue = isolateScope[scopeName] = parentGet(scope);\n                isolateScope.$watch(function parentValueWatch() {\n                  var parentValue = parentGet(scope);\n                  if (!compare(parentValue, isolateScope[scopeName])) {\n                    // we are out of sync and need to copy\n                    if (!compare(parentValue, lastValue)) {\n                      // parent changed and it has precedence\n                      isolateScope[scopeName] = parentValue;\n                    } else {\n                      // if the parent can be assigned then do so\n                      parentSet(scope, parentValue = isolateScope[scopeName]);\n                    }\n                  }\n                  return lastValue = parentValue;\n                }, null, parentGet.literal);\n                break;\n\n              case '&':\n                parentGet = $parse(attrs[attrName]);\n                isolateScope[scopeName] = function(locals) {\n                  return parentGet(scope, locals);\n                };\n                break;\n\n              default:\n                throw $compileMinErr('iscp',\n                    \"Invalid isolate scope definition for directive '{0}'.\" +\n                    \" Definition: {... {1}: '{2}' ...}\",\n                    newIsolateScopeDirective.name, scopeName, definition);\n            }\n          });\n        }\n        transcludeFn = boundTranscludeFn && controllersBoundTransclude;\n        if (controllerDirectives) {\n          forEach(controllerDirectives, function(directive) {\n            var locals = {\n              $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,\n              $element: $element,\n              $attrs: attrs,\n              $transclude: transcludeFn\n            }, controllerInstance;\n\n            controller = directive.controller;\n            if (controller == '@') {\n              controller = attrs[directive.name];\n            }\n\n            controllerInstance = $controller(controller, locals);\n            // For directives with element transclusion the element is a comment,\n            // but jQuery .data doesn't support attaching data to comment nodes as it's hard to\n            // clean up (http://bugs.jquery.com/ticket/8335).\n            // Instead, we save the controllers for the element in a local hash and attach to .data\n            // later, once we have the actual element.\n            elementControllers[directive.name] = controllerInstance;\n            if (!hasElementTranscludeDirective) {\n              $element.data('$' + directive.name + 'Controller', controllerInstance);\n            }\n\n            if (directive.controllerAs) {\n              locals.$scope[directive.controllerAs] = controllerInstance;\n            }\n          });\n        }\n\n        // PRELINKING\n        for(i = 0, ii = preLinkFns.length; i < ii; i++) {\n          try {\n            linkFn = preLinkFns[i];\n            linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs,\n                linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn);\n          } catch (e) {\n            $exceptionHandler(e, startingTag($element));\n          }\n        }\n\n        // RECURSION\n        // We only pass the isolate scope, if the isolate directive has a template,\n        // otherwise the child elements do not belong to the isolate directive.\n        var scopeToChild = scope;\n        if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {\n          scopeToChild = isolateScope;\n        }\n        childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);\n\n        // POSTLINKING\n        for(i = postLinkFns.length - 1; i >= 0; i--) {\n          try {\n            linkFn = postLinkFns[i];\n            linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs,\n                linkFn.require && getControllers(linkFn.require, $element, elementControllers), transcludeFn);\n          } catch (e) {\n            $exceptionHandler(e, startingTag($element));\n          }\n        }\n\n        // This is the function that is injected as `$transclude`.\n        function controllersBoundTransclude(scope, cloneAttachFn) {\n          var transcludeControllers;\n\n          // no scope passed\n          if (arguments.length < 2) {\n            cloneAttachFn = scope;\n            scope = undefined;\n          }\n\n          if (hasElementTranscludeDirective) {\n            transcludeControllers = elementControllers;\n          }\n\n          return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers);\n        }\n      }\n    }\n\n    function markDirectivesAsIsolate(directives) {\n      // mark all directives as needing isolate scope.\n      for (var j = 0, jj = directives.length; j < jj; j++) {\n        directives[j] = inherit(directives[j], {$$isolateScope: true});\n      }\n    }\n\n    /**\n     * looks up the directive and decorates it with exception handling and proper parameters. We\n     * call this the boundDirective.\n     *\n     * @param {string} name name of the directive to look up.\n     * @param {string} location The directive must be found in specific format.\n     *   String containing any of theses characters:\n     *\n     *   * `E`: element name\n     *   * `A': attribute\n     *   * `C`: class\n     *   * `M`: comment\n     * @returns {boolean} true if directive was added.\n     */\n    function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,\n                          endAttrName) {\n      if (name === ignoreDirective) return null;\n      var match = null;\n      if (hasDirectives.hasOwnProperty(name)) {\n        for(var directive, directives = $injector.get(name + Suffix),\n            i = 0, ii = directives.length; i<ii; i++) {\n          try {\n            directive = directives[i];\n            if ( (maxPriority === undefined || maxPriority > directive.priority) &&\n                 directive.restrict.indexOf(location) != -1) {\n              if (startAttrName) {\n                directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});\n              }\n              tDirectives.push(directive);\n              match = directive;\n            }\n          } catch(e) { $exceptionHandler(e); }\n        }\n      }\n      return match;\n    }\n\n\n    /**\n     * When the element is replaced with HTML template then the new attributes\n     * on the template need to be merged with the existing attributes in the DOM.\n     * The desired effect is to have both of the attributes present.\n     *\n     * @param {object} dst destination attributes (original DOM)\n     * @param {object} src source attributes (from the directive template)\n     */\n    function mergeTemplateAttributes(dst, src) {\n      var srcAttr = src.$attr,\n          dstAttr = dst.$attr,\n          $element = dst.$$element;\n\n      // reapply the old attributes to the new element\n      forEach(dst, function(value, key) {\n        if (key.charAt(0) != '$') {\n          if (src[key]) {\n            value += (key === 'style' ? ';' : ' ') + src[key];\n          }\n          dst.$set(key, value, true, srcAttr[key]);\n        }\n      });\n\n      // copy the new attributes on the old attrs object\n      forEach(src, function(value, key) {\n        if (key == 'class') {\n          safeAddClass($element, value);\n          dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;\n        } else if (key == 'style') {\n          $element.attr('style', $element.attr('style') + ';' + value);\n          dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;\n          // `dst` will never contain hasOwnProperty as DOM parser won't let it.\n          // You will get an \"InvalidCharacterError: DOM Exception 5\" error if you\n          // have an attribute like \"has-own-property\" or \"data-has-own-property\", etc.\n        } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {\n          dst[key] = value;\n          dstAttr[key] = srcAttr[key];\n        }\n      });\n    }\n\n\n    function compileTemplateUrl(directives, $compileNode, tAttrs,\n        $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {\n      var linkQueue = [],\n          afterTemplateNodeLinkFn,\n          afterTemplateChildLinkFn,\n          beforeTemplateCompileNode = $compileNode[0],\n          origAsyncDirective = directives.shift(),\n          // The fact that we have to copy and patch the directive seems wrong!\n          derivedSyncDirective = extend({}, origAsyncDirective, {\n            templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective\n          }),\n          templateUrl = (isFunction(origAsyncDirective.templateUrl))\n              ? origAsyncDirective.templateUrl($compileNode, tAttrs)\n              : origAsyncDirective.templateUrl;\n\n      $compileNode.empty();\n\n      $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}).\n        success(function(content) {\n          var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;\n\n          content = denormalizeTemplate(content);\n\n          if (origAsyncDirective.replace) {\n            if (jqLiteIsTextNode(content)) {\n              $template = [];\n            } else {\n              $template = jqLite(content);\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== 1) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  origAsyncDirective.name, templateUrl);\n            }\n\n            tempTemplateAttrs = {$attr: {}};\n            replaceWith($rootElement, $compileNode, compileNode);\n            var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);\n\n            if (isObject(origAsyncDirective.scope)) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = templateDirectives.concat(directives);\n            mergeTemplateAttributes(tAttrs, tempTemplateAttrs);\n          } else {\n            compileNode = beforeTemplateCompileNode;\n            $compileNode.html(content);\n          }\n\n          directives.unshift(derivedSyncDirective);\n\n          afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,\n              childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,\n              previousCompileContext);\n          forEach($rootElement, function(node, i) {\n            if (node == compileNode) {\n              $rootElement[i] = $compileNode[0];\n            }\n          });\n          afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);\n\n\n          while(linkQueue.length) {\n            var scope = linkQueue.shift(),\n                beforeTemplateLinkNode = linkQueue.shift(),\n                linkRootElement = linkQueue.shift(),\n                boundTranscludeFn = linkQueue.shift(),\n                linkNode = $compileNode[0];\n\n            if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {\n              var oldClasses = beforeTemplateLinkNode.className;\n\n              if (!(previousCompileContext.hasElementTranscludeDirective &&\n                  origAsyncDirective.replace)) {\n                // it was cloned therefore we have to clone as well.\n                linkNode = jqLiteClone(compileNode);\n              }\n\n              replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);\n\n              // Copy in CSS classes from original node\n              safeAddClass(jqLite(linkNode), oldClasses);\n            }\n            if (afterTemplateNodeLinkFn.transclude) {\n              childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude);\n            } else {\n              childBoundTranscludeFn = boundTranscludeFn;\n            }\n            afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,\n              childBoundTranscludeFn);\n          }\n          linkQueue = null;\n        }).\n        error(function(response, code, headers, config) {\n          throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url);\n        });\n\n      return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {\n        if (linkQueue) {\n          linkQueue.push(scope);\n          linkQueue.push(node);\n          linkQueue.push(rootElement);\n          linkQueue.push(boundTranscludeFn);\n        } else {\n          afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, boundTranscludeFn);\n        }\n      };\n    }\n\n\n    /**\n     * Sorting function for bound directives.\n     */\n    function byPriority(a, b) {\n      var diff = b.priority - a.priority;\n      if (diff !== 0) return diff;\n      if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;\n      return a.index - b.index;\n    }\n\n\n    function assertNoDuplicate(what, previousDirective, directive, element) {\n      if (previousDirective) {\n        throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',\n            previousDirective.name, directive.name, what, startingTag(element));\n      }\n    }\n\n\n    function addTextInterpolateDirective(directives, text) {\n      var interpolateFn = $interpolate(text, true);\n      if (interpolateFn) {\n        directives.push({\n          priority: 0,\n          compile: valueFn(function textInterpolateLinkFn(scope, node) {\n            var parent = node.parent(),\n                bindings = parent.data('$binding') || [];\n            bindings.push(interpolateFn);\n            safeAddClass(parent.data('$binding', bindings), 'ng-binding');\n            scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {\n              node[0].nodeValue = value;\n            });\n          })\n        });\n      }\n    }\n\n\n    function getTrustedContext(node, attrNormalizedName) {\n      if (attrNormalizedName == \"srcdoc\") {\n        return $sce.HTML;\n      }\n      var tag = nodeName_(node);\n      // maction[xlink:href] can source SVG.  It's not limited to <maction>.\n      if (attrNormalizedName == \"xlinkHref\" ||\n          (tag == \"FORM\" && attrNormalizedName == \"action\") ||\n          (tag != \"IMG\" && (attrNormalizedName == \"src\" ||\n                            attrNormalizedName == \"ngSrc\"))) {\n        return $sce.RESOURCE_URL;\n      }\n    }\n\n\n    function addAttrInterpolateDirective(node, directives, value, name) {\n      var interpolateFn = $interpolate(value, true);\n\n      // no interpolation found -> ignore\n      if (!interpolateFn) return;\n\n\n      if (name === \"multiple\" && nodeName_(node) === \"SELECT\") {\n        throw $compileMinErr(\"selmulti\",\n            \"Binding to the 'multiple' attribute is not supported. Element: {0}\",\n            startingTag(node));\n      }\n\n      directives.push({\n        priority: 100,\n        compile: function() {\n            return {\n              pre: function attrInterpolatePreLinkFn(scope, element, attr) {\n                var $$observers = (attr.$$observers || (attr.$$observers = {}));\n\n                if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {\n                  throw $compileMinErr('nodomevents',\n                      \"Interpolations for HTML DOM event attributes are disallowed.  Please use the \" +\n                          \"ng- versions (such as ng-click instead of onclick) instead.\");\n                }\n\n                // we need to interpolate again, in case the attribute value has been updated\n                // (e.g. by another directive's compile function)\n                interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name));\n\n                // if attribute was updated so that there is no interpolation going on we don't want to\n                // register any observers\n                if (!interpolateFn) return;\n\n                // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the\n                // actual attr value\n                attr[name] = interpolateFn(scope);\n                ($$observers[name] || ($$observers[name] = [])).$$inter = true;\n                (attr.$$observers && attr.$$observers[name].$$scope || scope).\n                  $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {\n                    //special case for class attribute addition + removal\n                    //so that class changes can tap into the animation\n                    //hooks provided by the $animate service. Be sure to\n                    //skip animations when the first digest occurs (when\n                    //both the new and the old values are the same) since\n                    //the CSS classes are the non-interpolated values\n                    if(name === 'class' && newValue != oldValue) {\n                      attr.$updateClass(newValue, oldValue);\n                    } else {\n                      attr.$set(name, newValue);\n                    }\n                  });\n              }\n            };\n          }\n      });\n    }\n\n\n    /**\n     * This is a special jqLite.replaceWith, which can replace items which\n     * have no parents, provided that the containing jqLite collection is provided.\n     *\n     * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes\n     *                               in the root of the tree.\n     * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep\n     *                                  the shell, but replace its DOM node reference.\n     * @param {Node} newNode The new DOM node.\n     */\n    function replaceWith($rootElement, elementsToRemove, newNode) {\n      var firstElementToRemove = elementsToRemove[0],\n          removeCount = elementsToRemove.length,\n          parent = firstElementToRemove.parentNode,\n          i, ii;\n\n      if ($rootElement) {\n        for(i = 0, ii = $rootElement.length; i < ii; i++) {\n          if ($rootElement[i] == firstElementToRemove) {\n            $rootElement[i++] = newNode;\n            for (var j = i, j2 = j + removeCount - 1,\n                     jj = $rootElement.length;\n                 j < jj; j++, j2++) {\n              if (j2 < jj) {\n                $rootElement[j] = $rootElement[j2];\n              } else {\n                delete $rootElement[j];\n              }\n            }\n            $rootElement.length -= removeCount - 1;\n            break;\n          }\n        }\n      }\n\n      if (parent) {\n        parent.replaceChild(newNode, firstElementToRemove);\n      }\n      var fragment = document.createDocumentFragment();\n      fragment.appendChild(firstElementToRemove);\n      newNode[jqLite.expando] = firstElementToRemove[jqLite.expando];\n      for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {\n        var element = elementsToRemove[k];\n        jqLite(element).remove(); // must do this way to clean up expando\n        fragment.appendChild(element);\n        delete elementsToRemove[k];\n      }\n\n      elementsToRemove[0] = newNode;\n      elementsToRemove.length = 1;\n    }\n\n\n    function cloneAndAnnotateFn(fn, annotation) {\n      return extend(function() { return fn.apply(null, arguments); }, fn, annotation);\n    }\n  }];\n}\n\nvar PREFIX_REGEXP = /^(x[\\:\\-_]|data[\\:\\-_])/i;\n/**\n * Converts all accepted directives format into proper directive name.\n * All of these will become 'myDirective':\n *   my:Directive\n *   my-directive\n *   x-my-directive\n *   data-my:directive\n *\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction directiveNormalize(name) {\n  return camelCase(name.replace(PREFIX_REGEXP, ''));\n}\n\n/**\n * @ngdoc type\n * @name $compile.directive.Attributes\n *\n * @description\n * A shared object between directive compile / linking functions which contains normalized DOM\n * element attributes. The values reflect current binding state `{{ }}`. The normalization is\n * needed since all of these are treated as equivalent in Angular:\n *\n *    <span ng:bind=\"a\" ng-bind=\"a\" data-ng-bind=\"a\" x-ng-bind=\"a\">\n */\n\n/**\n * @ngdoc property\n * @name $compile.directive.Attributes#$attr\n * @returns {object} A map of DOM element attribute names to the normalized name. This is\n *                   needed to do reverse lookup from normalized name back to actual name.\n */\n\n\n/**\n * @ngdoc method\n * @name $compile.directive.Attributes#$set\n * @function\n *\n * @description\n * Set DOM element attribute value.\n *\n *\n * @param {string} name Normalized element attribute name of the property to modify. The name is\n *          reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}\n *          property to the original name.\n * @param {string} value Value to set the attribute to. The value can be an interpolated string.\n */\n\n\n\n/**\n * Closure compiler type information\n */\n\nfunction nodesetLinkingFn(\n  /* angular.Scope */ scope,\n  /* NodeList */ nodeList,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n){}\n\nfunction directiveLinkingFn(\n  /* nodesetLinkingFn */ nodesetLinkingFn,\n  /* angular.Scope */ scope,\n  /* Node */ node,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n){}\n\nfunction tokenDifference(str1, str2) {\n  var values = '',\n      tokens1 = str1.split(/\\s+/),\n      tokens2 = str2.split(/\\s+/);\n\n  outer:\n  for(var i = 0; i < tokens1.length; i++) {\n    var token = tokens1[i];\n    for(var j = 0; j < tokens2.length; j++) {\n      if(token == tokens2[j]) continue outer;\n    }\n    values += (values.length > 0 ? ' ' : '') + token;\n  }\n  return values;\n}\n\n/**\n * @ngdoc provider\n * @name $controllerProvider\n * @description\n * The {@link ng.$controller $controller service} is used by Angular to create new\n * controllers.\n *\n * This provider allows controller registration via the\n * {@link ng.$controllerProvider#register register} method.\n */\nfunction $ControllerProvider() {\n  var controllers = {},\n      CNTRL_REG = /^(\\S+)(\\s+as\\s+(\\w+))?$/;\n\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#register\n   * @param {string|Object} name Controller name, or an object map of controllers where the keys are\n   *    the names and the values are the constructors.\n   * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI\n   *    annotations in the array notation).\n   */\n  this.register = function(name, constructor) {\n    assertNotHasOwnProperty(name, 'controller');\n    if (isObject(name)) {\n      extend(controllers, name);\n    } else {\n      controllers[name] = constructor;\n    }\n  };\n\n\n  this.$get = ['$injector', '$window', function($injector, $window) {\n\n    /**\n     * @ngdoc service\n     * @name $controller\n     * @requires $injector\n     *\n     * @param {Function|string} constructor If called with a function then it's considered to be the\n     *    controller constructor function. Otherwise it's considered to be a string which is used\n     *    to retrieve the controller constructor using the following steps:\n     *\n     *    * check if a controller with given name is registered via `$controllerProvider`\n     *    * check if evaluating the string on the current scope returns a constructor\n     *    * check `window[constructor]` on the global `window` object\n     *\n     * @param {Object} locals Injection locals for Controller.\n     * @return {Object} Instance of given controller.\n     *\n     * @description\n     * `$controller` service is responsible for instantiating controllers.\n     *\n     * It's just a simple call to {@link auto.$injector $injector}, but extracted into\n     * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).\n     */\n    return function(expression, locals) {\n      var instance, match, constructor, identifier;\n\n      if(isString(expression)) {\n        match = expression.match(CNTRL_REG),\n        constructor = match[1],\n        identifier = match[3];\n        expression = controllers.hasOwnProperty(constructor)\n            ? controllers[constructor]\n            : getter(locals.$scope, constructor, true) || getter($window, constructor, true);\n\n        assertArgFn(expression, constructor, true);\n      }\n\n      instance = $injector.instantiate(expression, locals);\n\n      if (identifier) {\n        if (!(locals && typeof locals.$scope == 'object')) {\n          throw minErr('$controller')('noscp',\n              \"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.\",\n              constructor || expression.name, identifier);\n        }\n\n        locals.$scope[identifier] = instance;\n      }\n\n      return instance;\n    };\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $document\n * @requires $window\n *\n * @description\n * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div ng-controller=\"MainCtrl\">\n         <p>$document title: <b ng-bind=\"title\"></b></p>\n         <p>window.document title: <b ng-bind=\"windowTitle\"></b></p>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       function MainCtrl($scope, $document) {\n         $scope.title = $document[0].title;\n         $scope.windowTitle = angular.element(window.document)[0].title;\n       }\n     </file>\n   </example>\n */\nfunction $DocumentProvider(){\n  this.$get = ['$window', function(window){\n    return jqLite(window.document);\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $exceptionHandler\n * @requires ng.$log\n *\n * @description\n * Any uncaught exception in angular expressions is delegated to this service.\n * The default implementation simply delegates to `$log.error` which logs it into\n * the browser console.\n *\n * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by\n * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.\n *\n * ## Example:\n *\n * ```js\n *   angular.module('exceptionOverride', []).factory('$exceptionHandler', function () {\n *     return function (exception, cause) {\n *       exception.message += ' (caused by \"' + cause + '\")';\n *       throw exception;\n *     };\n *   });\n * ```\n *\n * This example will override the normal action of `$exceptionHandler`, to make angular\n * exceptions fail hard when they happen, instead of just logging to the console.\n *\n * @param {Error} exception Exception associated with the error.\n * @param {string=} cause optional information about the context in which\n *       the error was thrown.\n *\n */\nfunction $ExceptionHandlerProvider() {\n  this.$get = ['$log', function($log) {\n    return function(exception, cause) {\n      $log.error.apply($log, arguments);\n    };\n  }];\n}\n\n/**\n * Parse headers into key value object\n *\n * @param {string} headers Raw headers as a string\n * @returns {Object} Parsed headers as key value object\n */\nfunction parseHeaders(headers) {\n  var parsed = {}, key, val, i;\n\n  if (!headers) return parsed;\n\n  forEach(headers.split('\\n'), function(line) {\n    i = line.indexOf(':');\n    key = lowercase(trim(line.substr(0, i)));\n    val = trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key]) {\n        parsed[key] += ', ' + val;\n      } else {\n        parsed[key] = val;\n      }\n    }\n  });\n\n  return parsed;\n}\n\n\n/**\n * Returns a function that provides access to parsed headers.\n *\n * Headers are lazy parsed when first requested.\n * @see parseHeaders\n *\n * @param {(string|Object)} headers Headers to provide access to.\n * @returns {function(string=)} Returns a getter function which if called with:\n *\n *   - if called with single an argument returns a single header value or null\n *   - if called with no arguments returns an object containing all headers.\n */\nfunction headersGetter(headers) {\n  var headersObj = isObject(headers) ? headers : undefined;\n\n  return function(name) {\n    if (!headersObj) headersObj =  parseHeaders(headers);\n\n    if (name) {\n      return headersObj[lowercase(name)] || null;\n    }\n\n    return headersObj;\n  };\n}\n\n\n/**\n * Chain all given functions\n *\n * This function is used for both request and response transforming\n *\n * @param {*} data Data to transform.\n * @param {function(string=)} headers Http headers getter fn.\n * @param {(Function|Array.<Function>)} fns Function or an array of functions.\n * @returns {*} Transformed data.\n */\nfunction transformData(data, headers, fns) {\n  if (isFunction(fns))\n    return fns(data, headers);\n\n  forEach(fns, function(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n}\n\n\nfunction isSuccess(status) {\n  return 200 <= status && status < 300;\n}\n\n\nfunction $HttpProvider() {\n  var JSON_START = /^\\s*(\\[|\\{[^\\{])/,\n      JSON_END = /[\\}\\]]\\s*$/,\n      PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/,\n      CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'};\n\n  var defaults = this.defaults = {\n    // transform incoming response data\n    transformResponse: [function(data) {\n      if (isString(data)) {\n        // strip json vulnerability protection prefix\n        data = data.replace(PROTECTION_PREFIX, '');\n        if (JSON_START.test(data) && JSON_END.test(data))\n          data = fromJson(data);\n      }\n      return data;\n    }],\n\n    // transform outgoing request data\n    transformRequest: [function(d) {\n      return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d;\n    }],\n\n    // default headers\n    headers: {\n      common: {\n        'Accept': 'application/json, text/plain, */*'\n      },\n      post:   copy(CONTENT_TYPE_APPLICATION_JSON),\n      put:    copy(CONTENT_TYPE_APPLICATION_JSON),\n      patch:  copy(CONTENT_TYPE_APPLICATION_JSON)\n    },\n\n    xsrfCookieName: 'XSRF-TOKEN',\n    xsrfHeaderName: 'X-XSRF-TOKEN'\n  };\n\n  /**\n   * Are ordered by request, i.e. they are applied in the same order as the\n   * array, on request, but reverse order, on response.\n   */\n  var interceptorFactories = this.interceptors = [];\n\n  /**\n   * For historical reasons, response interceptors are ordered by the order in which\n   * they are applied to the response. (This is the opposite of interceptorFactories)\n   */\n  var responseInterceptorFactories = this.responseInterceptors = [];\n\n  this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',\n      function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {\n\n    var defaultCache = $cacheFactory('$http');\n\n    /**\n     * Interceptors stored in reverse order. Inner interceptors before outer interceptors.\n     * The reversal is needed so that we can build up the interception chain around the\n     * server request.\n     */\n    var reversedInterceptors = [];\n\n    forEach(interceptorFactories, function(interceptorFactory) {\n      reversedInterceptors.unshift(isString(interceptorFactory)\n          ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));\n    });\n\n    forEach(responseInterceptorFactories, function(interceptorFactory, index) {\n      var responseFn = isString(interceptorFactory)\n          ? $injector.get(interceptorFactory)\n          : $injector.invoke(interceptorFactory);\n\n      /**\n       * Response interceptors go before \"around\" interceptors (no real reason, just\n       * had to pick one.) But they are already reversed, so we can't use unshift, hence\n       * the splice.\n       */\n      reversedInterceptors.splice(index, 0, {\n        response: function(response) {\n          return responseFn($q.when(response));\n        },\n        responseError: function(response) {\n          return responseFn($q.reject(response));\n        }\n      });\n    });\n\n\n    /**\n     * @ngdoc service\n     * @kind function\n     * @name $http\n     * @requires ng.$httpBackend\n     * @requires $cacheFactory\n     * @requires $rootScope\n     * @requires $q\n     * @requires $injector\n     *\n     * @description\n     * The `$http` service is a core Angular service that facilitates communication with the remote\n     * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)\n     * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).\n     *\n     * For unit testing applications that use `$http` service, see\n     * {@link ngMock.$httpBackend $httpBackend mock}.\n     *\n     * For a higher level of abstraction, please check out the {@link ngResource.$resource\n     * $resource} service.\n     *\n     * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by\n     * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage\n     * it is important to familiarize yourself with these APIs and the guarantees they provide.\n     *\n     *\n     * # General usage\n     * The `$http` service is a function which takes a single argument — a configuration object —\n     * that is used to generate an HTTP request and returns  a {@link ng.$q promise}\n     * with two $http specific methods: `success` and `error`.\n     *\n     * ```js\n     *   $http({method: 'GET', url: '/someUrl'}).\n     *     success(function(data, status, headers, config) {\n     *       // this callback will be called asynchronously\n     *       // when the response is available\n     *     }).\n     *     error(function(data, status, headers, config) {\n     *       // called asynchronously if an error occurs\n     *       // or server returns response with an error status.\n     *     });\n     * ```\n     *\n     * Since the returned value of calling the $http function is a `promise`, you can also use\n     * the `then` method to register callbacks, and these callbacks will receive a single argument –\n     * an object representing the response. See the API signature and type info below for more\n     * details.\n     *\n     * A response status code between 200 and 299 is considered a success status and\n     * will result in the success callback being called. Note that if the response is a redirect,\n     * XMLHttpRequest will transparently follow it, meaning that the error callback will not be\n     * called for such responses.\n     *\n     * # Writing Unit Tests that use $http\n     * When unit testing (using {@link ngMock ngMock}), it is necessary to call\n     * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending\n     * request using trained responses.\n     *\n     * ```\n     * $httpBackend.expectGET(...);\n     * $http.get(...);\n     * $httpBackend.flush();\n     * ```\n     *\n     * # Shortcut methods\n     *\n     * Shortcut methods are also available. All shortcut methods require passing in the URL, and\n     * request data must be passed in for POST/PUT requests.\n     *\n     * ```js\n     *   $http.get('/someUrl').success(successCallback);\n     *   $http.post('/someUrl', data).success(successCallback);\n     * ```\n     *\n     * Complete list of shortcut methods:\n     *\n     * - {@link ng.$http#get $http.get}\n     * - {@link ng.$http#head $http.head}\n     * - {@link ng.$http#post $http.post}\n     * - {@link ng.$http#put $http.put}\n     * - {@link ng.$http#delete $http.delete}\n     * - {@link ng.$http#jsonp $http.jsonp}\n     *\n     *\n     * # Setting HTTP Headers\n     *\n     * The $http service will automatically add certain HTTP headers to all requests. These defaults\n     * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration\n     * object, which currently contains this default configuration:\n     *\n     * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):\n     *   - `Accept: application/json, text/plain, * / *`\n     * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)\n     *   - `Content-Type: application/json`\n     * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)\n     *   - `Content-Type: application/json`\n     *\n     * To add or overwrite these defaults, simply add or remove a property from these configuration\n     * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object\n     * with the lowercased HTTP method name as the key, e.g.\n     * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.\n     *\n     * The defaults can also be set at runtime via the `$http.defaults` object in the same\n     * fashion. For example:\n     *\n     * ```\n     * module.run(function($http) {\n     *   $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'\n     * });\n     * ```\n     *\n     * In addition, you can supply a `headers` property in the config object passed when\n     * calling `$http(config)`, which overrides the defaults without changing them globally.\n     *\n     *\n     * # Transforming Requests and Responses\n     *\n     * Both requests and responses can be transformed using transform functions. By default, Angular\n     * applies these transformations:\n     *\n     * Request transformations:\n     *\n     * - If the `data` property of the request configuration object contains an object, serialize it\n     *   into JSON format.\n     *\n     * Response transformations:\n     *\n     *  - If XSRF prefix is detected, strip it (see Security Considerations section below).\n     *  - If JSON response is detected, deserialize it using a JSON parser.\n     *\n     * To globally augment or override the default transforms, modify the\n     * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse`\n     * properties. These properties are by default an array of transform functions, which allows you\n     * to `push` or `unshift` a new transformation function into the transformation chain. You can\n     * also decide to completely override any default transformations by assigning your\n     * transformation functions to these properties directly without the array wrapper.  These defaults\n     * are again available on the $http factory at run-time, which may be useful if you have run-time\n     * services you wish to be involved in your transformations.\n     *\n     * Similarly, to locally override the request/response transforms, augment the\n     * `transformRequest` and/or `transformResponse` properties of the configuration object passed\n     * into `$http`.\n     *\n     *\n     * # Caching\n     *\n     * To enable caching, set the request configuration `cache` property to `true` (to use default\n     * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).\n     * When the cache is enabled, `$http` stores the response from the server in the specified\n     * cache. The next time the same request is made, the response is served from the cache without\n     * sending a request to the server.\n     *\n     * Note that even if the response is served from cache, delivery of the data is asynchronous in\n     * the same way that real requests are.\n     *\n     * If there are multiple GET requests for the same URL that should be cached using the same\n     * cache, but the cache is not populated yet, only one request to the server will be made and\n     * the remaining requests will be fulfilled using the response from the first request.\n     *\n     * You can change the default cache to a new object (built with\n     * {@link ng.$cacheFactory `$cacheFactory`}) by updating the\n     * {@link ng.$http#properties_defaults `$http.defaults.cache`} property. All requests who set\n     * their `cache` property to `true` will now use this cache object.\n     *\n     * If you set the default cache to `false` then only requests that specify their own custom\n     * cache object will be cached.\n     *\n     * # Interceptors\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication, or any kind of synchronous or\n     * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be\n     * able to intercept requests before they are handed to the server and\n     * responses before they are handed over to the application code that\n     * initiated these requests. The interceptors leverage the {@link ng.$q\n     * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.\n     *\n     * The interceptors are service factories that are registered with the `$httpProvider` by\n     * adding them to the `$httpProvider.interceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor.\n     *\n     * There are two kinds of interceptors (and two kinds of rejection interceptors):\n     *\n     *   * `request`: interceptors get called with http `config` object. The function is free to\n     *     modify the `config` or create a new one. The function needs to return the `config`\n     *     directly or as a promise.\n     *   * `requestError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *   * `response`: interceptors get called with http `response` object. The function is free to\n     *     modify the `response` or create a new one. The function needs to return the `response`\n     *     directly or as a promise.\n     *   * `responseError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *\n     *\n     * ```js\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return {\n     *       // optional method\n     *       'request': function(config) {\n     *         // do something on success\n     *         return config || $q.when(config);\n     *       },\n     *\n     *       // optional method\n     *      'requestError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       },\n     *\n     *\n     *\n     *       // optional method\n     *       'response': function(response) {\n     *         // do something on success\n     *         return response || $q.when(response);\n     *       },\n     *\n     *       // optional method\n     *      'responseError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       }\n     *     };\n     *   });\n     *\n     *   $httpProvider.interceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // alternatively, register the interceptor via an anonymous factory\n     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {\n     *     return {\n     *      'request': function(config) {\n     *          // same as above\n     *       },\n     *\n     *       'response': function(response) {\n     *          // same as above\n     *       }\n     *     };\n     *   });\n     * ```\n     *\n     * # Response interceptors (DEPRECATED)\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication or any kind of synchronous or\n     * asynchronous preprocessing of received responses, it is desirable to be able to intercept\n     * responses for http requests before they are handed over to the application code that\n     * initiated these requests. The response interceptors leverage the {@link ng.$q\n     * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing.\n     *\n     * The interceptors are service factories that are registered with the $httpProvider by\n     * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor  — a function that\n     * takes a {@link ng.$q promise} and returns the original or a new promise.\n     *\n     * ```js\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return function(promise) {\n     *       return promise.then(function(response) {\n     *         // do something on success\n     *         return response;\n     *       }, function(response) {\n     *         // do something on error\n     *         if (canRecover(response)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(response);\n     *       });\n     *     }\n     *   });\n     *\n     *   $httpProvider.responseInterceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // register the interceptor via an anonymous factory\n     *   $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) {\n     *     return function(promise) {\n     *       // same as above\n     *     }\n     *   });\n     * ```\n     *\n     *\n     * # Security Considerations\n     *\n     * When designing web applications, consider security threats from:\n     *\n     * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)\n     *\n     * Both server and the client must cooperate in order to eliminate these threats. Angular comes\n     * pre-configured with strategies that address these issues, but for this to work backend server\n     * cooperation is required.\n     *\n     * ## JSON Vulnerability Protection\n     *\n     * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * allows third party website to turn your JSON resource URL into\n     * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To\n     * counter this your server can prefix all JSON requests with following string `\")]}',\\n\"`.\n     * Angular will automatically strip the prefix before processing it as JSON.\n     *\n     * For example if your server needs to return:\n     * ```js\n     * ['one','two']\n     * ```\n     *\n     * which is vulnerable to attack, your server can return:\n     * ```js\n     * )]}',\n     * ['one','two']\n     * ```\n     *\n     * Angular will strip the prefix, before processing the JSON.\n     *\n     *\n     * ## Cross Site Request Forgery (XSRF) Protection\n     *\n     * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which\n     * an unauthorized site can gain your user's private data. Angular provides a mechanism\n     * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie\n     * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only\n     * JavaScript that runs on your domain could read the cookie, your server can be assured that\n     * the XHR came from JavaScript running on your domain. The header will not be set for\n     * cross-domain requests.\n     *\n     * To take advantage of this, your server needs to set a token in a JavaScript readable session\n     * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the\n     * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure\n     * that only JavaScript running on your domain could have sent the request. The token must be\n     * unique for each user and must be verifiable by the server (to prevent the JavaScript from\n     * making up its own tokens). We recommend that the token is a digest of your site's\n     * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography))\n     * for added security.\n     *\n     * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName\n     * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,\n     * or the per-request config object.\n     *\n     *\n     * @param {object} config Object describing the request to be made and how it should be\n     *    processed. The object has following properties:\n     *\n     *    - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)\n     *    - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.\n     *    - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned\n     *      to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be\n     *      JSONified.\n     *    - **data** – `{string|Object}` – Data to be sent as the request message data.\n     *    - **headers** – `{Object}` – Map of strings or functions which return strings representing\n     *      HTTP headers to send to the server. If the return value of a function is null, the\n     *      header will not be sent.\n     *    - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.\n     *    - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.\n     *    - **transformRequest** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      request body and headers and returns its transformed (typically serialized) version.\n     *    - **transformResponse** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      response body and headers and returns its transformed (typically deserialized) version.\n     *    - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the\n     *      GET request, otherwise if a cache instance built with\n     *      {@link ng.$cacheFactory $cacheFactory}, this cache will be used for\n     *      caching.\n     *    - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}\n     *      that should abort the request when resolved.\n     *    - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the\n     *      XHR object. See [requests with credentials]https://developer.mozilla.org/en/http_access_control#section_5\n     *      for more information.\n     *    - **responseType** - `{string}` - see\n     *      [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).\n     *\n     * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the\n     *   standard `then` method and two http specific methods: `success` and `error`. The `then`\n     *   method takes two arguments a success and an error callback which will be called with a\n     *   response object. The `success` and `error` methods take a single argument - a function that\n     *   will be called when the request succeeds or fails respectively. The arguments passed into\n     *   these functions are destructured representation of the response object passed into the\n     *   `then` method. The response object has these properties:\n     *\n     *   - **data** – `{string|Object}` – The response body transformed with the transform\n     *     functions.\n     *   - **status** – `{number}` – HTTP status code of the response.\n     *   - **headers** – `{function([headerName])}` – Header getter function.\n     *   - **config** – `{Object}` – The configuration object that was used to generate the request.\n     *   - **statusText** – `{string}` – HTTP status text of the response.\n     *\n     * @property {Array.<Object>} pendingRequests Array of config objects for currently pending\n     *   requests. This is primarily meant to be used for debugging purposes.\n     *\n     *\n     * @example\n<example>\n<file name=\"index.html\">\n  <div ng-controller=\"FetchCtrl\">\n    <select ng-model=\"method\">\n      <option>GET</option>\n      <option>JSONP</option>\n    </select>\n    <input type=\"text\" ng-model=\"url\" size=\"80\"/>\n    <button id=\"fetchbtn\" ng-click=\"fetch()\">fetch</button><br>\n    <button id=\"samplegetbtn\" ng-click=\"updateModel('GET', 'http-hello.html')\">Sample GET</button>\n    <button id=\"samplejsonpbtn\"\n      ng-click=\"updateModel('JSONP',\n                    'http://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')\">\n      Sample JSONP\n    </button>\n    <button id=\"invalidjsonpbtn\"\n      ng-click=\"updateModel('JSONP', 'http://angularjs.org/doesntexist&callback=JSON_CALLBACK')\">\n        Invalid JSONP\n      </button>\n    <pre>http status code: {{status}}</pre>\n    <pre>http response data: {{data}}</pre>\n  </div>\n</file>\n<file name=\"script.js\">\n  function FetchCtrl($scope, $http, $templateCache) {\n    $scope.method = 'GET';\n    $scope.url = 'http-hello.html';\n\n    $scope.fetch = function() {\n      $scope.code = null;\n      $scope.response = null;\n\n      $http({method: $scope.method, url: $scope.url, cache: $templateCache}).\n        success(function(data, status) {\n          $scope.status = status;\n          $scope.data = data;\n        }).\n        error(function(data, status) {\n          $scope.data = data || \"Request failed\";\n          $scope.status = status;\n      });\n    };\n\n    $scope.updateModel = function(method, url) {\n      $scope.method = method;\n      $scope.url = url;\n    };\n  }\n</file>\n<file name=\"http-hello.html\">\n  Hello, $http!\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  var status = element(by.binding('status'));\n  var data = element(by.binding('data'));\n  var fetchBtn = element(by.id('fetchbtn'));\n  var sampleGetBtn = element(by.id('samplegetbtn'));\n  var sampleJsonpBtn = element(by.id('samplejsonpbtn'));\n  var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));\n\n  it('should make an xhr GET request', function() {\n    sampleGetBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('200');\n    expect(data.getText()).toMatch(/Hello, \\$http!/);\n  });\n\n  it('should make a JSONP request to angularjs.org', function() {\n    sampleJsonpBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('200');\n    expect(data.getText()).toMatch(/Super Hero!/);\n  });\n\n  it('should make JSONP request to invalid URL and invoke the error handler',\n      function() {\n    invalidJsonpBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('0');\n    expect(data.getText()).toMatch('Request failed');\n  });\n</file>\n</example>\n     */\n    function $http(requestConfig) {\n      var config = {\n        method: 'get',\n        transformRequest: defaults.transformRequest,\n        transformResponse: defaults.transformResponse\n      };\n      var headers = mergeHeaders(requestConfig);\n\n      extend(config, requestConfig);\n      config.headers = headers;\n      config.method = uppercase(config.method);\n\n      var xsrfValue = urlIsSameOrigin(config.url)\n          ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]\n          : undefined;\n      if (xsrfValue) {\n        headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;\n      }\n\n\n      var serverRequest = function(config) {\n        headers = config.headers;\n        var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);\n\n        // strip content-type if data is undefined\n        if (isUndefined(config.data)) {\n          forEach(headers, function(value, header) {\n            if (lowercase(header) === 'content-type') {\n                delete headers[header];\n            }\n          });\n        }\n\n        if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {\n          config.withCredentials = defaults.withCredentials;\n        }\n\n        // send request\n        return sendReq(config, reqData, headers).then(transformResponse, transformResponse);\n      };\n\n      var chain = [serverRequest, undefined];\n      var promise = $q.when(config);\n\n      // apply interceptors\n      forEach(reversedInterceptors, function(interceptor) {\n        if (interceptor.request || interceptor.requestError) {\n          chain.unshift(interceptor.request, interceptor.requestError);\n        }\n        if (interceptor.response || interceptor.responseError) {\n          chain.push(interceptor.response, interceptor.responseError);\n        }\n      });\n\n      while(chain.length) {\n        var thenFn = chain.shift();\n        var rejectFn = chain.shift();\n\n        promise = promise.then(thenFn, rejectFn);\n      }\n\n      promise.success = function(fn) {\n        promise.then(function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      promise.error = function(fn) {\n        promise.then(null, function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      return promise;\n\n      function transformResponse(response) {\n        // make a copy since the response must be cacheable\n        var resp = extend({}, response, {\n          data: transformData(response.data, response.headers, config.transformResponse)\n        });\n        return (isSuccess(response.status))\n          ? resp\n          : $q.reject(resp);\n      }\n\n      function mergeHeaders(config) {\n        var defHeaders = defaults.headers,\n            reqHeaders = extend({}, config.headers),\n            defHeaderName, lowercaseDefHeaderName, reqHeaderName;\n\n        defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);\n\n        // execute if header value is function\n        execHeaders(defHeaders);\n        execHeaders(reqHeaders);\n\n        // using for-in instead of forEach to avoid unecessary iteration after header has been found\n        defaultHeadersIteration:\n        for (defHeaderName in defHeaders) {\n          lowercaseDefHeaderName = lowercase(defHeaderName);\n\n          for (reqHeaderName in reqHeaders) {\n            if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {\n              continue defaultHeadersIteration;\n            }\n          }\n\n          reqHeaders[defHeaderName] = defHeaders[defHeaderName];\n        }\n\n        return reqHeaders;\n\n        function execHeaders(headers) {\n          var headerContent;\n\n          forEach(headers, function(headerFn, header) {\n            if (isFunction(headerFn)) {\n              headerContent = headerFn();\n              if (headerContent != null) {\n                headers[header] = headerContent;\n              } else {\n                delete headers[header];\n              }\n            }\n          });\n        }\n      }\n    }\n\n    $http.pendingRequests = [];\n\n    /**\n     * @ngdoc method\n     * @name $http#get\n     *\n     * @description\n     * Shortcut method to perform `GET` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#delete\n     *\n     * @description\n     * Shortcut method to perform `DELETE` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#head\n     *\n     * @description\n     * Shortcut method to perform `HEAD` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#jsonp\n     *\n     * @description\n     * Shortcut method to perform `JSONP` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request.\n     *                     Should contain `JSON_CALLBACK` string.\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethods('get', 'delete', 'head', 'jsonp');\n\n    /**\n     * @ngdoc method\n     * @name $http#post\n     *\n     * @description\n     * Shortcut method to perform `POST` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#put\n     *\n     * @description\n     * Shortcut method to perform `PUT` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethodsWithData('post', 'put');\n\n        /**\n         * @ngdoc property\n         * @name $http#defaults\n         *\n         * @description\n         * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of\n         * default headers, withCredentials as well as request and response transformations.\n         *\n         * See \"Setting HTTP Headers\" and \"Transforming Requests and Responses\" sections above.\n         */\n    $http.defaults = defaults;\n\n\n    return $http;\n\n\n    function createShortMethods(names) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url\n          }));\n        };\n      });\n    }\n\n\n    function createShortMethodsWithData(name) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, data, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url,\n            data: data\n          }));\n        };\n      });\n    }\n\n\n    /**\n     * Makes the request.\n     *\n     * !!! ACCESSES CLOSURE VARS:\n     * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests\n     */\n    function sendReq(config, reqData, reqHeaders) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          cache,\n          cachedResp,\n          url = buildUrl(config.url, config.params);\n\n      $http.pendingRequests.push(config);\n      promise.then(removePendingReq, removePendingReq);\n\n\n      if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') {\n        cache = isObject(config.cache) ? config.cache\n              : isObject(defaults.cache) ? defaults.cache\n              : defaultCache;\n      }\n\n      if (cache) {\n        cachedResp = cache.get(url);\n        if (isDefined(cachedResp)) {\n          if (cachedResp.then) {\n            // cached request has already been sent, but there is no response yet\n            cachedResp.then(removePendingReq, removePendingReq);\n            return cachedResp;\n          } else {\n            // serving from cache\n            if (isArray(cachedResp)) {\n              resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]), cachedResp[3]);\n            } else {\n              resolvePromise(cachedResp, 200, {}, 'OK');\n            }\n          }\n        } else {\n          // put the promise for the non-transformed response into cache as a placeholder\n          cache.put(url, promise);\n        }\n      }\n\n      // if we won't have the response in cache, send the request to the backend\n      if (isUndefined(cachedResp)) {\n        $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,\n            config.withCredentials, config.responseType);\n      }\n\n      return promise;\n\n\n      /**\n       * Callback registered to $httpBackend():\n       *  - caches the response if desired\n       *  - resolves the raw $http promise\n       *  - calls $apply\n       */\n      function done(status, response, headersString, statusText) {\n        if (cache) {\n          if (isSuccess(status)) {\n            cache.put(url, [status, response, parseHeaders(headersString), statusText]);\n          } else {\n            // remove promise from the cache\n            cache.remove(url);\n          }\n        }\n\n        resolvePromise(response, status, headersString, statusText);\n        if (!$rootScope.$$phase) $rootScope.$apply();\n      }\n\n\n      /**\n       * Resolves the raw $http promise.\n       */\n      function resolvePromise(response, status, headers, statusText) {\n        // normalize internal statuses to 0\n        status = Math.max(status, 0);\n\n        (isSuccess(status) ? deferred.resolve : deferred.reject)({\n          data: response,\n          status: status,\n          headers: headersGetter(headers),\n          config: config,\n          statusText : statusText\n        });\n      }\n\n\n      function removePendingReq() {\n        var idx = indexOf($http.pendingRequests, config);\n        if (idx !== -1) $http.pendingRequests.splice(idx, 1);\n      }\n    }\n\n\n    function buildUrl(url, params) {\n          if (!params) return url;\n          var parts = [];\n          forEachSorted(params, function(value, key) {\n            if (value === null || isUndefined(value)) return;\n            if (!isArray(value)) value = [value];\n\n            forEach(value, function(v) {\n              if (isObject(v)) {\n                v = toJson(v);\n              }\n              parts.push(encodeUriQuery(key) + '=' +\n                         encodeUriQuery(v));\n            });\n          });\n          if(parts.length > 0) {\n            url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');\n          }\n          return url;\n        }\n\n\n  }];\n}\n\nfunction createXhr(method) {\n    //if IE and the method is not RFC2616 compliant, or if XMLHttpRequest\n    //is not available, try getting an ActiveXObject. Otherwise, use XMLHttpRequest\n    //if it is available\n    if (msie <= 8 && (!method.match(/^(get|post|head|put|delete|options)$/i) ||\n      !window.XMLHttpRequest)) {\n      return new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n    } else if (window.XMLHttpRequest) {\n      return new window.XMLHttpRequest();\n    }\n\n    throw minErr('$httpBackend')('noxhr', \"This browser does not support XMLHttpRequest.\");\n}\n\n/**\n * @ngdoc service\n * @name $httpBackend\n * @requires $window\n * @requires $document\n *\n * @description\n * HTTP backend used by the {@link ng.$http service} that delegates to\n * XMLHttpRequest object or JSONP and deals with browser incompatibilities.\n *\n * You should never need to use this service directly, instead use the higher-level abstractions:\n * {@link ng.$http $http} or {@link ngResource.$resource $resource}.\n *\n * During testing this implementation is swapped with {@link ngMock.$httpBackend mock\n * $httpBackend} which can be trained with responses.\n */\nfunction $HttpBackendProvider() {\n  this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {\n    return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);\n  }];\n}\n\nfunction createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {\n  var ABORTED = -1;\n\n  // TODO(vojta): fix the signature\n  return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {\n    var status;\n    $browser.$$incOutstandingRequestCount();\n    url = url || $browser.url();\n\n    if (lowercase(method) == 'jsonp') {\n      var callbackId = '_' + (callbacks.counter++).toString(36);\n      callbacks[callbackId] = function(data) {\n        callbacks[callbackId].data = data;\n      };\n\n      var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),\n          function() {\n        if (callbacks[callbackId].data) {\n          completeRequest(callback, 200, callbacks[callbackId].data);\n        } else {\n          completeRequest(callback, status || -2);\n        }\n        callbacks[callbackId] = angular.noop;\n      });\n    } else {\n\n      var xhr = createXhr(method);\n\n      xhr.open(method, url, true);\n      forEach(headers, function(value, key) {\n        if (isDefined(value)) {\n            xhr.setRequestHeader(key, value);\n        }\n      });\n\n      // In IE6 and 7, this might be called synchronously when xhr.send below is called and the\n      // response is in the cache. the promise api will ensure that to the app code the api is\n      // always async\n      xhr.onreadystatechange = function() {\n        // onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by\n        // xhrs that are resolved while the app is in the background (see #5426).\n        // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before\n        // continuing\n        //\n        // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and\n        // Safari respectively.\n        if (xhr && xhr.readyState == 4) {\n          var responseHeaders = null,\n              response = null;\n\n          if(status !== ABORTED) {\n            responseHeaders = xhr.getAllResponseHeaders();\n\n            // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n            // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n            response = ('response' in xhr) ? xhr.response : xhr.responseText;\n          }\n\n          completeRequest(callback,\n              status || xhr.status,\n              response,\n              responseHeaders,\n              xhr.statusText || '');\n        }\n      };\n\n      if (withCredentials) {\n        xhr.withCredentials = true;\n      }\n\n      if (responseType) {\n        try {\n          xhr.responseType = responseType;\n        } catch (e) {\n          // WebKit added support for the json responseType value on 09/03/2013\n          // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are\n          // known to throw when setting the value \"json\" as the response type. Other older\n          // browsers implementing the responseType\n          //\n          // The json response type can be ignored if not supported, because JSON payloads are\n          // parsed on the client-side regardless.\n          if (responseType !== 'json') {\n            throw e;\n          }\n        }\n      }\n\n      xhr.send(post || null);\n    }\n\n    if (timeout > 0) {\n      var timeoutId = $browserDefer(timeoutRequest, timeout);\n    } else if (timeout && timeout.then) {\n      timeout.then(timeoutRequest);\n    }\n\n\n    function timeoutRequest() {\n      status = ABORTED;\n      jsonpDone && jsonpDone();\n      xhr && xhr.abort();\n    }\n\n    function completeRequest(callback, status, response, headersString, statusText) {\n      // cancel timeout and subsequent timeout promise resolution\n      timeoutId && $browserDefer.cancel(timeoutId);\n      jsonpDone = xhr = null;\n\n      // fix status code when it is 0 (0 status is undocumented).\n      // Occurs when accessing file resources or on Android 4.1 stock browser\n      // while retrieving files from application cache.\n      if (status === 0) {\n        status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;\n      }\n\n      // normalize IE bug (http://bugs.jquery.com/ticket/1450)\n      status = status === 1223 ? 204 : status;\n      statusText = statusText || '';\n\n      callback(status, response, headersString, statusText);\n      $browser.$$completeOutstandingRequest(noop);\n    }\n  };\n\n  function jsonpReq(url, done) {\n    // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:\n    // - fetches local scripts via XHR and evals them\n    // - adds and immediately removes script elements from the document\n    var script = rawDocument.createElement('script'),\n        doneWrapper = function() {\n          script.onreadystatechange = script.onload = script.onerror = null;\n          rawDocument.body.removeChild(script);\n          if (done) done();\n        };\n\n    script.type = 'text/javascript';\n    script.src = url;\n\n    if (msie && msie <= 8) {\n      script.onreadystatechange = function() {\n        if (/loaded|complete/.test(script.readyState)) {\n          doneWrapper();\n        }\n      };\n    } else {\n      script.onload = script.onerror = function() {\n        doneWrapper();\n      };\n    }\n\n    rawDocument.body.appendChild(script);\n    return doneWrapper;\n  }\n}\n\nvar $interpolateMinErr = minErr('$interpolate');\n\n/**\n * @ngdoc provider\n * @name $interpolateProvider\n * @function\n *\n * @description\n *\n * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.\n *\n * @example\n<example module=\"customInterpolationApp\">\n<file name=\"index.html\">\n<script>\n  var customInterpolationApp = angular.module('customInterpolationApp', []);\n\n  customInterpolationApp.config(function($interpolateProvider) {\n    $interpolateProvider.startSymbol('//');\n    $interpolateProvider.endSymbol('//');\n  });\n\n\n  customInterpolationApp.controller('DemoController', function DemoController() {\n      this.label = \"This binding is brought you by // interpolation symbols.\";\n  });\n</script>\n<div ng-app=\"App\" ng-controller=\"DemoController as demo\">\n    //demo.label//\n</div>\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  it('should interpolate binding with custom symbols', function() {\n    expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');\n  });\n</file>\n</example>\n */\nfunction $InterpolateProvider() {\n  var startSymbol = '{{';\n  var endSymbol = '}}';\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#startSymbol\n   * @description\n   * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.\n   *\n   * @param {string=} value new value to set the starting symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.startSymbol = function(value){\n    if (value) {\n      startSymbol = value;\n      return this;\n    } else {\n      return startSymbol;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#endSymbol\n   * @description\n   * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n   *\n   * @param {string=} value new value to set the ending symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.endSymbol = function(value){\n    if (value) {\n      endSymbol = value;\n      return this;\n    } else {\n      return endSymbol;\n    }\n  };\n\n\n  this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {\n    var startSymbolLength = startSymbol.length,\n        endSymbolLength = endSymbol.length;\n\n    /**\n     * @ngdoc service\n     * @name $interpolate\n     * @function\n     *\n     * @requires $parse\n     * @requires $sce\n     *\n     * @description\n     *\n     * Compiles a string with markup into an interpolation function. This service is used by the\n     * HTML {@link ng.$compile $compile} service for data binding. See\n     * {@link ng.$interpolateProvider $interpolateProvider} for configuring the\n     * interpolation markup.\n     *\n     *\n     * ```js\n     *   var $interpolate = ...; // injected\n     *   var exp = $interpolate('Hello {{name | uppercase}}!');\n     *   expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!');\n     * ```\n     *\n     *\n     * @param {string} text The text with markup to interpolate.\n     * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have\n     *    embedded expression in order to return an interpolation function. Strings with no\n     *    embedded expression will return null for the interpolation function.\n     * @param {string=} trustedContext when provided, the returned function passes the interpolated\n     *    result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,\n     *    trustedContext)} before returning it.  Refer to the {@link ng.$sce $sce} service that\n     *    provides Strict Contextual Escaping for details.\n     * @returns {function(context)} an interpolation function which is used to compute the\n     *    interpolated string. The function has these parameters:\n     *\n     *    * `context`: an object against which any expressions embedded in the strings are evaluated\n     *      against.\n     *\n     */\n    function $interpolate(text, mustHaveExpression, trustedContext) {\n      var startIndex,\n          endIndex,\n          index = 0,\n          parts = [],\n          length = text.length,\n          hasInterpolation = false,\n          fn,\n          exp,\n          concat = [];\n\n      while(index < length) {\n        if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) &&\n             ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) {\n          (index != startIndex) && parts.push(text.substring(index, startIndex));\n          parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex)));\n          fn.exp = exp;\n          index = endIndex + endSymbolLength;\n          hasInterpolation = true;\n        } else {\n          // we did not find anything, so we have to add the remainder to the parts array\n          (index != length) && parts.push(text.substring(index));\n          index = length;\n        }\n      }\n\n      if (!(length = parts.length)) {\n        // we added, nothing, must have been an empty string.\n        parts.push('');\n        length = 1;\n      }\n\n      // Concatenating expressions makes it hard to reason about whether some combination of\n      // concatenated values are unsafe to use and could easily lead to XSS.  By requiring that a\n      // single expression be used for iframe[src], object[src], etc., we ensure that the value\n      // that's used is assigned or constructed by some JS code somewhere that is more testable or\n      // make it obvious that you bound the value to some user controlled value.  This helps reduce\n      // the load when auditing for XSS issues.\n      if (trustedContext && parts.length > 1) {\n          throw $interpolateMinErr('noconcat',\n              \"Error while interpolating: {0}\\nStrict Contextual Escaping disallows \" +\n              \"interpolations that concatenate multiple expressions when a trusted value is \" +\n              \"required.  See http://docs.angularjs.org/api/ng.$sce\", text);\n      }\n\n      if (!mustHaveExpression  || hasInterpolation) {\n        concat.length = length;\n        fn = function(context) {\n          try {\n            for(var i = 0, ii = length, part; i<ii; i++) {\n              if (typeof (part = parts[i]) == 'function') {\n                part = part(context);\n                if (trustedContext) {\n                  part = $sce.getTrusted(trustedContext, part);\n                } else {\n                  part = $sce.valueOf(part);\n                }\n                if (part === null || isUndefined(part)) {\n                  part = '';\n                } else if (typeof part != 'string') {\n                  part = toJson(part);\n                }\n              }\n              concat[i] = part;\n            }\n            return concat.join('');\n          }\n          catch(err) {\n            var newErr = $interpolateMinErr('interr', \"Can't interpolate: {0}\\n{1}\", text,\n                err.toString());\n            $exceptionHandler(newErr);\n          }\n        };\n        fn.exp = text;\n        fn.parts = parts;\n        return fn;\n      }\n    }\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#startSymbol\n     * @description\n     * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.\n     *\n     * Use {@link ng.$interpolateProvider#startSymbol $interpolateProvider#startSymbol} to change\n     * the symbol.\n     *\n     * @returns {string} start symbol.\n     */\n    $interpolate.startSymbol = function() {\n      return startSymbol;\n    };\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#endSymbol\n     * @description\n     * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n     *\n     * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change\n     * the symbol.\n     *\n     * @returns {string} end symbol.\n     */\n    $interpolate.endSymbol = function() {\n      return endSymbol;\n    };\n\n    return $interpolate;\n  }];\n}\n\nfunction $IntervalProvider() {\n  this.$get = ['$rootScope', '$window', '$q',\n       function($rootScope,   $window,   $q) {\n    var intervals = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $interval\n      *\n      * @description\n      * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`\n      * milliseconds.\n      *\n      * The return value of registering an interval function is a promise. This promise will be\n      * notified upon each tick of the interval, and will be resolved after `count` iterations, or\n      * run indefinitely if `count` is not defined. The value of the notification will be the\n      * number of iterations that have run.\n      * To cancel an interval, call `$interval.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to\n      * move forward by `millis` milliseconds and trigger any functions scheduled to run in that\n      * time.\n      *\n      * <div class=\"alert alert-warning\">\n      * **Note**: Intervals created by this service must be explicitly destroyed when you are finished\n      * with them.  In particular they are not automatically destroyed when a controller's scope or a\n      * directive's element are destroyed.\n      * You should take this into consideration and make sure to always cancel the interval at the\n      * appropriate moment.  See the example below for more details on how and when to do this.\n      * </div>\n      *\n      * @param {function()} fn A function that should be called repeatedly.\n      * @param {number} delay Number of milliseconds between each function call.\n      * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat\n      *   indefinitely.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @returns {promise} A promise which will be notified on each iteration.\n      *\n      * @example\n      * <example module=\"time\">\n      *   <file name=\"index.html\">\n      *     <script>\n      *       function Ctrl2($scope,$interval) {\n      *         $scope.format = 'M/d/yy h:mm:ss a';\n      *         $scope.blood_1 = 100;\n      *         $scope.blood_2 = 120;\n      *\n      *         var stop;\n      *         $scope.fight = function() {\n      *           // Don't start a new fight if we are already fighting\n      *           if ( angular.isDefined(stop) ) return;\n      *\n      *           stop = $interval(function() {\n      *             if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {\n      *                 $scope.blood_1 = $scope.blood_1 - 3;\n      *                 $scope.blood_2 = $scope.blood_2 - 4;\n      *             } else {\n      *                 $scope.stopFight();\n      *             }\n      *           }, 100);\n      *         };\n      *\n      *         $scope.stopFight = function() {\n      *           if (angular.isDefined(stop)) {\n      *             $interval.cancel(stop);\n      *             stop = undefined;\n      *           }\n      *         };\n      *\n      *         $scope.resetFight = function() {\n      *           $scope.blood_1 = 100;\n      *           $scope.blood_2 = 120;\n      *         }\n      *\n      *         $scope.$on('$destroy', function() {\n      *           // Make sure that the interval is destroyed too\n      *           $scope.stopFight();\n      *         });\n      *       }\n      *\n      *       angular.module('time', [])\n      *         // Register the 'myCurrentTime' directive factory method.\n      *         // We inject $interval and dateFilter service since the factory method is DI.\n      *         .directive('myCurrentTime', function($interval, dateFilter) {\n      *           // return the directive link function. (compile function not needed)\n      *           return function(scope, element, attrs) {\n      *             var format,  // date format\n      *             stopTime; // so that we can cancel the time updates\n      *\n      *             // used to update the UI\n      *             function updateTime() {\n      *               element.text(dateFilter(new Date(), format));\n      *             }\n      *\n      *             // watch the expression, and update the UI on change.\n      *             scope.$watch(attrs.myCurrentTime, function(value) {\n      *               format = value;\n      *               updateTime();\n      *             });\n      *\n      *             stopTime = $interval(updateTime, 1000);\n      *\n      *             // listen on DOM destroy (removal) event, and cancel the next UI update\n      *             // to prevent updating time ofter the DOM element was removed.\n      *             element.bind('$destroy', function() {\n      *               $interval.cancel(stopTime);\n      *             });\n      *           }\n      *         });\n      *     </script>\n      *\n      *     <div>\n      *       <div ng-controller=\"Ctrl2\">\n      *         Date format: <input ng-model=\"format\"> <hr/>\n      *         Current time is: <span my-current-time=\"format\"></span>\n      *         <hr/>\n      *         Blood 1 : <font color='red'>{{blood_1}}</font>\n      *         Blood 2 : <font color='red'>{{blood_2}}</font>\n      *         <button type=\"button\" data-ng-click=\"fight()\">Fight</button>\n      *         <button type=\"button\" data-ng-click=\"stopFight()\">StopFight</button>\n      *         <button type=\"button\" data-ng-click=\"resetFight()\">resetFight</button>\n      *       </div>\n      *     </div>\n      *\n      *   </file>\n      * </example>\n      */\n    function interval(fn, delay, count, invokeApply) {\n      var setInterval = $window.setInterval,\n          clearInterval = $window.clearInterval,\n          deferred = $q.defer(),\n          promise = deferred.promise,\n          iteration = 0,\n          skipApply = (isDefined(invokeApply) && !invokeApply);\n\n      count = isDefined(count) ? count : 0;\n\n      promise.then(null, null, fn);\n\n      promise.$$intervalId = setInterval(function tick() {\n        deferred.notify(iteration++);\n\n        if (count > 0 && iteration >= count) {\n          deferred.resolve(iteration);\n          clearInterval(promise.$$intervalId);\n          delete intervals[promise.$$intervalId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n\n      }, delay);\n\n      intervals[promise.$$intervalId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $interval#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`.\n      *\n      * @param {promise} promise returned by the `$interval` function.\n      * @returns {boolean} Returns `true` if the task was successfully canceled.\n      */\n    interval.cancel = function(promise) {\n      if (promise && promise.$$intervalId in intervals) {\n        intervals[promise.$$intervalId].reject('canceled');\n        clearInterval(promise.$$intervalId);\n        delete intervals[promise.$$intervalId];\n        return true;\n      }\n      return false;\n    };\n\n    return interval;\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $locale\n *\n * @description\n * $locale service provides localization rules for various Angular components. As of right now the\n * only public api is:\n *\n * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)\n */\nfunction $LocaleProvider(){\n  this.$get = function() {\n    return {\n      id: 'en-us',\n\n      NUMBER_FORMATS: {\n        DECIMAL_SEP: '.',\n        GROUP_SEP: ',',\n        PATTERNS: [\n          { // Decimal Pattern\n            minInt: 1,\n            minFrac: 0,\n            maxFrac: 3,\n            posPre: '',\n            posSuf: '',\n            negPre: '-',\n            negSuf: '',\n            gSize: 3,\n            lgSize: 3\n          },{ //Currency Pattern\n            minInt: 1,\n            minFrac: 2,\n            maxFrac: 2,\n            posPre: '\\u00A4',\n            posSuf: '',\n            negPre: '(\\u00A4',\n            negSuf: ')',\n            gSize: 3,\n            lgSize: 3\n          }\n        ],\n        CURRENCY_SYM: '$'\n      },\n\n      DATETIME_FORMATS: {\n        MONTH:\n            'January,February,March,April,May,June,July,August,September,October,November,December'\n            .split(','),\n        SHORTMONTH:  'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n        DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n        SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),\n        AMPMS: ['AM','PM'],\n        medium: 'MMM d, y h:mm:ss a',\n        short: 'M/d/yy h:mm a',\n        fullDate: 'EEEE, MMMM d, y',\n        longDate: 'MMMM d, y',\n        mediumDate: 'MMM d, y',\n        shortDate: 'M/d/yy',\n        mediumTime: 'h:mm:ss a',\n        shortTime: 'h:mm a'\n      },\n\n      pluralCat: function(num) {\n        if (num === 1) {\n          return 'one';\n        }\n        return 'other';\n      }\n    };\n  };\n}\n\nvar PATH_MATCH = /^([^\\?#]*)(\\?([^#]*))?(#(.*))?$/,\n    DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};\nvar $locationMinErr = minErr('$location');\n\n\n/**\n * Encode path using encodeUriSegment, ignoring forward slashes\n *\n * @param {string} path Path to encode\n * @returns {string}\n */\nfunction encodePath(path) {\n  var segments = path.split('/'),\n      i = segments.length;\n\n  while (i--) {\n    segments[i] = encodeUriSegment(segments[i]);\n  }\n\n  return segments.join('/');\n}\n\nfunction parseAbsoluteUrl(absoluteUrl, locationObj, appBase) {\n  var parsedUrl = urlResolve(absoluteUrl, appBase);\n\n  locationObj.$$protocol = parsedUrl.protocol;\n  locationObj.$$host = parsedUrl.hostname;\n  locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;\n}\n\n\nfunction parseAppUrl(relativeUrl, locationObj, appBase) {\n  var prefixed = (relativeUrl.charAt(0) !== '/');\n  if (prefixed) {\n    relativeUrl = '/' + relativeUrl;\n  }\n  var match = urlResolve(relativeUrl, appBase);\n  locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?\n      match.pathname.substring(1) : match.pathname);\n  locationObj.$$search = parseKeyValue(match.search);\n  locationObj.$$hash = decodeURIComponent(match.hash);\n\n  // make sure path starts with '/';\n  if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {\n    locationObj.$$path = '/' + locationObj.$$path;\n  }\n}\n\n\n/**\n *\n * @param {string} begin\n * @param {string} whole\n * @returns {string} returns text from whole after begin or undefined if it does not begin with\n *                   expected string.\n */\nfunction beginsWith(begin, whole) {\n  if (whole.indexOf(begin) === 0) {\n    return whole.substr(begin.length);\n  }\n}\n\n\nfunction stripHash(url) {\n  var index = url.indexOf('#');\n  return index == -1 ? url : url.substr(0, index);\n}\n\n\nfunction stripFile(url) {\n  return url.substr(0, stripHash(url).lastIndexOf('/') + 1);\n}\n\n/* return the server only (scheme://host:port) */\nfunction serverBase(url) {\n  return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));\n}\n\n\n/**\n * LocationHtml5Url represents an url\n * This object is exposed as $location service when HTML5 mode is enabled and supported\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} basePrefix url path prefix\n */\nfunction LocationHtml5Url(appBase, basePrefix) {\n  this.$$html5 = true;\n  basePrefix = basePrefix || '';\n  var appBaseNoFile = stripFile(appBase);\n  parseAbsoluteUrl(appBase, this, appBase);\n\n\n  /**\n   * Parse given html5 (regular) url string into properties\n   * @param {string} newAbsoluteUrl HTML5 url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var pathUrl = beginsWith(appBaseNoFile, url);\n    if (!isString(pathUrl)) {\n      throw $locationMinErr('ipthprfx', 'Invalid url \"{0}\", missing path prefix \"{1}\".', url,\n          appBaseNoFile);\n    }\n\n    parseAppUrl(pathUrl, this, appBase);\n\n    if (!this.$$path) {\n      this.$$path = '/';\n    }\n\n    this.$$compose();\n  };\n\n  /**\n   * Compose url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'\n  };\n\n  this.$$rewrite = function(url) {\n    var appUrl, prevAppUrl;\n\n    if ( (appUrl = beginsWith(appBase, url)) !== undefined ) {\n      prevAppUrl = appUrl;\n      if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) {\n        return appBaseNoFile + (beginsWith('/', appUrl) || appUrl);\n      } else {\n        return appBase + prevAppUrl;\n      }\n    } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) {\n      return appBaseNoFile + appUrl;\n    } else if (appBaseNoFile == url + '/') {\n      return appBaseNoFile;\n    }\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when developer doesn't opt into html5 mode.\n * It also serves as the base class for html5 mode fallback on legacy browsers.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangUrl(appBase, hashPrefix) {\n  var appBaseNoFile = stripFile(appBase);\n\n  parseAbsoluteUrl(appBase, this, appBase);\n\n\n  /**\n   * Parse given hashbang url into properties\n   * @param {string} url Hashbang url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);\n    var withoutHashUrl = withoutBaseUrl.charAt(0) == '#'\n        ? beginsWith(hashPrefix, withoutBaseUrl)\n        : (this.$$html5)\n          ? withoutBaseUrl\n          : '';\n\n    if (!isString(withoutHashUrl)) {\n      throw $locationMinErr('ihshprfx', 'Invalid url \"{0}\", missing hash prefix \"{1}\".', url,\n          hashPrefix);\n    }\n    parseAppUrl(withoutHashUrl, this, appBase);\n\n    this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);\n\n    this.$$compose();\n\n    /*\n     * In Windows, on an anchor node on documents loaded from\n     * the filesystem, the browser will return a pathname\n     * prefixed with the drive name ('/C:/path') when a\n     * pathname without a drive is set:\n     *  * a.setAttribute('href', '/foo')\n     *   * a.pathname === '/C:/foo' //true\n     *\n     * Inside of Angular, we're always using pathnames that\n     * do not include drive names for routing.\n     */\n    function removeWindowsDriveName (path, url, base) {\n      /*\n      Matches paths for file protocol on windows,\n      such as /C:/foo/bar, and captures only /foo/bar.\n      */\n      var windowsFilePathExp = /^\\/?.*?:(\\/.*)/;\n\n      var firstPathSegmentMatch;\n\n      //Get the relative path from the input URL.\n      if (url.indexOf(base) === 0) {\n        url = url.replace(base, '');\n      }\n\n      /*\n       * The input URL intentionally contains a\n       * first path segment that ends with a colon.\n       */\n      if (windowsFilePathExp.exec(url)) {\n        return path;\n      }\n\n      firstPathSegmentMatch = windowsFilePathExp.exec(path);\n      return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;\n    }\n  };\n\n  /**\n   * Compose hashbang url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');\n  };\n\n  this.$$rewrite = function(url) {\n    if(stripHash(appBase) == stripHash(url)) {\n      return url;\n    }\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when html5 history api is enabled but the browser\n * does not support it.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangInHtml5Url(appBase, hashPrefix) {\n  this.$$html5 = true;\n  LocationHashbangUrl.apply(this, arguments);\n\n  var appBaseNoFile = stripFile(appBase);\n\n  this.$$rewrite = function(url) {\n    var appUrl;\n\n    if ( appBase == stripHash(url) ) {\n      return url;\n    } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) {\n      return appBase + hashPrefix + appUrl;\n    } else if ( appBaseNoFile === url + '/') {\n      return appBaseNoFile;\n    }\n  };\n}\n\n\nLocationHashbangInHtml5Url.prototype =\n  LocationHashbangUrl.prototype =\n  LocationHtml5Url.prototype = {\n\n  /**\n   * Are we in html5 mode?\n   * @private\n   */\n  $$html5: false,\n\n  /**\n   * Has any change been replacing ?\n   * @private\n   */\n  $$replace: false,\n\n  /**\n   * @ngdoc method\n   * @name $location#absUrl\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return full url representation with all segments encoded according to rules specified in\n   * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).\n   *\n   * @return {string} full url\n   */\n  absUrl: locationGetter('$$absUrl'),\n\n  /**\n   * @ngdoc method\n   * @name $location#url\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return url (e.g. `/path?a=b#hash`) when called without any parameter.\n   *\n   * Change path, search and hash, when called with parameter and return `$location`.\n   *\n   * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)\n   * @param {string=} replace The path that will be changed\n   * @return {string} url\n   */\n  url: function(url, replace) {\n    if (isUndefined(url))\n      return this.$$url;\n\n    var match = PATH_MATCH.exec(url);\n    if (match[1]) this.path(decodeURIComponent(match[1]));\n    if (match[2] || match[1]) this.search(match[3] || '');\n    this.hash(match[5] || '', replace);\n\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#protocol\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return protocol of current url.\n   *\n   * @return {string} protocol of current url\n   */\n  protocol: locationGetter('$$protocol'),\n\n  /**\n   * @ngdoc method\n   * @name $location#host\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return host of current url.\n   *\n   * @return {string} host of current url.\n   */\n  host: locationGetter('$$host'),\n\n  /**\n   * @ngdoc method\n   * @name $location#port\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return port of current url.\n   *\n   * @return {Number} port\n   */\n  port: locationGetter('$$port'),\n\n  /**\n   * @ngdoc method\n   * @name $location#path\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return path of current url when called without any parameter.\n   *\n   * Change path when called with parameter and return `$location`.\n   *\n   * Note: Path should always begin with forward slash (/), this method will add the forward slash\n   * if it is missing.\n   *\n   * @param {string=} path New path\n   * @return {string} path\n   */\n  path: locationGetterSetter('$$path', function(path) {\n    return path.charAt(0) == '/' ? path : '/' + path;\n  }),\n\n  /**\n   * @ngdoc method\n   * @name $location#search\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return search part (as object) of current url when called without any parameter.\n   *\n   * Change search part when called with parameter and return `$location`.\n   *\n   * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or\n   * hash object. Hash object may contain an array of values, which will be decoded as duplicates in\n   * the url.\n   *\n   * @param {(string|Array<string>)=} paramValue If `search` is a string, then `paramValue` will override only a\n   * single search parameter. If `paramValue` is an array, it will set the parameter as a\n   * comma-separated value. If `paramValue` is `null`, the parameter will be deleted.\n   *\n   * @return {string} search\n   */\n  search: function(search, paramValue) {\n    switch (arguments.length) {\n      case 0:\n        return this.$$search;\n      case 1:\n        if (isString(search)) {\n          this.$$search = parseKeyValue(search);\n        } else if (isObject(search)) {\n          this.$$search = search;\n        } else {\n          throw $locationMinErr('isrcharg',\n              'The first argument of the `$location#search()` call must be a string or an object.');\n        }\n        break;\n      default:\n        if (isUndefined(paramValue) || paramValue === null) {\n          delete this.$$search[search];\n        } else {\n          this.$$search[search] = paramValue;\n        }\n    }\n\n    this.$$compose();\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#hash\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return hash fragment when called without any parameter.\n   *\n   * Change hash fragment when called with parameter and return `$location`.\n   *\n   * @param {string=} hash New hash fragment\n   * @return {string} hash\n   */\n  hash: locationGetterSetter('$$hash', identity),\n\n  /**\n   * @ngdoc method\n   * @name $location#replace\n   *\n   * @description\n   * If called, all changes to $location during current `$digest` will be replacing current history\n   * record, instead of adding new one.\n   */\n  replace: function() {\n    this.$$replace = true;\n    return this;\n  }\n};\n\nfunction locationGetter(property) {\n  return function() {\n    return this[property];\n  };\n}\n\n\nfunction locationGetterSetter(property, preprocess) {\n  return function(value) {\n    if (isUndefined(value))\n      return this[property];\n\n    this[property] = preprocess(value);\n    this.$$compose();\n\n    return this;\n  };\n}\n\n\n/**\n * @ngdoc service\n * @name $location\n *\n * @requires $rootElement\n *\n * @description\n * The $location service parses the URL in the browser address bar (based on the\n * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL\n * available to your application. Changes to the URL in the address bar are reflected into\n * $location service and changes to $location are reflected into the browser address bar.\n *\n * **The $location service:**\n *\n * - Exposes the current URL in the browser address bar, so you can\n *   - Watch and observe the URL.\n *   - Change the URL.\n * - Synchronizes the URL with the browser when the user\n *   - Changes the address bar.\n *   - Clicks the back or forward button (or clicks a History link).\n *   - Clicks on a link.\n * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).\n *\n * For more information see {@link guide/$location Developer Guide: Using $location}\n */\n\n/**\n * @ngdoc provider\n * @name $locationProvider\n * @description\n * Use the `$locationProvider` to configure how the application deep linking paths are stored.\n */\nfunction $LocationProvider(){\n  var hashPrefix = '',\n      html5Mode = false;\n\n  /**\n   * @ngdoc property\n   * @name $locationProvider#hashPrefix\n   * @description\n   * @param {string=} prefix Prefix for hash part (containing path and search)\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.hashPrefix = function(prefix) {\n    if (isDefined(prefix)) {\n      hashPrefix = prefix;\n      return this;\n    } else {\n      return hashPrefix;\n    }\n  };\n\n  /**\n   * @ngdoc property\n   * @name $locationProvider#html5Mode\n   * @description\n   * @param {boolean=} mode Use HTML5 strategy if available.\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.html5Mode = function(mode) {\n    if (isDefined(mode)) {\n      html5Mode = mode;\n      return this;\n    } else {\n      return html5Mode;\n    }\n  };\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeStart\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted before a URL will change. This change can be prevented by calling\n   * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more\n   * details about event object. Upon successful change\n   * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   */\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeSuccess\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted after a URL was changed.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   */\n\n  this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',\n      function( $rootScope,   $browser,   $sniffer,   $rootElement) {\n    var $location,\n        LocationMode,\n        baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''\n        initialUrl = $browser.url(),\n        appBase;\n\n    if (html5Mode) {\n      appBase = serverBase(initialUrl) + (baseHref || '/');\n      LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;\n    } else {\n      appBase = stripHash(initialUrl);\n      LocationMode = LocationHashbangUrl;\n    }\n    $location = new LocationMode(appBase, '#' + hashPrefix);\n    $location.$$parse($location.$$rewrite(initialUrl));\n\n    $rootElement.on('click', function(event) {\n      // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)\n      // currently we open nice url link and redirect then\n\n      if (event.ctrlKey || event.metaKey || event.which == 2) return;\n\n      var elm = jqLite(event.target);\n\n      // traverse the DOM up to find first A tag\n      while (lowercase(elm[0].nodeName) !== 'a') {\n        // ignore rewriting if no A tag (reached root element, or no parent - removed from document)\n        if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;\n      }\n\n      var absHref = elm.prop('href');\n\n      if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {\n        // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during\n        // an animation.\n        absHref = urlResolve(absHref.animVal).href;\n      }\n\n      var rewrittenUrl = $location.$$rewrite(absHref);\n\n      if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) {\n        event.preventDefault();\n        if (rewrittenUrl != $browser.url()) {\n          // update location manually\n          $location.$$parse(rewrittenUrl);\n          $rootScope.$apply();\n          // hack to work around FF6 bug 684208 when scenario runner clicks on links\n          window.angular['ff-684208-preventDefault'] = true;\n        }\n      }\n    });\n\n\n    // rewrite hashbang url <> html5 url\n    if ($location.absUrl() != initialUrl) {\n      $browser.url($location.absUrl(), true);\n    }\n\n    // update $location when $browser url changes\n    $browser.onUrlChange(function(newUrl) {\n      if ($location.absUrl() != newUrl) {\n        $rootScope.$evalAsync(function() {\n          var oldUrl = $location.absUrl();\n\n          $location.$$parse(newUrl);\n          if ($rootScope.$broadcast('$locationChangeStart', newUrl,\n                                    oldUrl).defaultPrevented) {\n            $location.$$parse(oldUrl);\n            $browser.url(oldUrl);\n          } else {\n            afterLocationChange(oldUrl);\n          }\n        });\n        if (!$rootScope.$$phase) $rootScope.$digest();\n      }\n    });\n\n    // update browser\n    var changeCounter = 0;\n    $rootScope.$watch(function $locationWatch() {\n      var oldUrl = $browser.url();\n      var currentReplace = $location.$$replace;\n\n      if (!changeCounter || oldUrl != $location.absUrl()) {\n        changeCounter++;\n        $rootScope.$evalAsync(function() {\n          if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).\n              defaultPrevented) {\n            $location.$$parse(oldUrl);\n          } else {\n            $browser.url($location.absUrl(), currentReplace);\n            afterLocationChange(oldUrl);\n          }\n        });\n      }\n      $location.$$replace = false;\n\n      return changeCounter;\n    });\n\n    return $location;\n\n    function afterLocationChange(oldUrl) {\n      $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl);\n    }\n}];\n}\n\n/**\n * @ngdoc service\n * @name $log\n * @requires $window\n *\n * @description\n * Simple service for logging. Default implementation safely writes the message\n * into the browser's console (if present).\n *\n * The main purpose of this service is to simplify debugging and troubleshooting.\n *\n * The default is to log `debug` messages. You can use\n * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.\n *\n * @example\n   <example>\n     <file name=\"script.js\">\n       function LogCtrl($scope, $log) {\n         $scope.$log = $log;\n         $scope.message = 'Hello World!';\n       }\n     </file>\n     <file name=\"index.html\">\n       <div ng-controller=\"LogCtrl\">\n         <p>Reload this page with open console, enter text and hit the log button...</p>\n         Message:\n         <input type=\"text\" ng-model=\"message\"/>\n         <button ng-click=\"$log.log(message)\">log</button>\n         <button ng-click=\"$log.warn(message)\">warn</button>\n         <button ng-click=\"$log.info(message)\">info</button>\n         <button ng-click=\"$log.error(message)\">error</button>\n       </div>\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc provider\n * @name $logProvider\n * @description\n * Use the `$logProvider` to configure how the application logs messages\n */\nfunction $LogProvider(){\n  var debug = true,\n      self = this;\n\n  /**\n   * @ngdoc property\n   * @name $logProvider#debugEnabled\n   * @description\n   * @param {boolean=} flag enable or disable debug level messages\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.debugEnabled = function(flag) {\n    if (isDefined(flag)) {\n      debug = flag;\n    return this;\n    } else {\n      return debug;\n    }\n  };\n\n  this.$get = ['$window', function($window){\n    return {\n      /**\n       * @ngdoc method\n       * @name $log#log\n       *\n       * @description\n       * Write a log message\n       */\n      log: consoleLog('log'),\n\n      /**\n       * @ngdoc method\n       * @name $log#info\n       *\n       * @description\n       * Write an information message\n       */\n      info: consoleLog('info'),\n\n      /**\n       * @ngdoc method\n       * @name $log#warn\n       *\n       * @description\n       * Write a warning message\n       */\n      warn: consoleLog('warn'),\n\n      /**\n       * @ngdoc method\n       * @name $log#error\n       *\n       * @description\n       * Write an error message\n       */\n      error: consoleLog('error'),\n\n      /**\n       * @ngdoc method\n       * @name $log#debug\n       *\n       * @description\n       * Write a debug message\n       */\n      debug: (function () {\n        var fn = consoleLog('debug');\n\n        return function() {\n          if (debug) {\n            fn.apply(self, arguments);\n          }\n        };\n      }())\n    };\n\n    function formatError(arg) {\n      if (arg instanceof Error) {\n        if (arg.stack) {\n          arg = (arg.message && arg.stack.indexOf(arg.message) === -1)\n              ? 'Error: ' + arg.message + '\\n' + arg.stack\n              : arg.stack;\n        } else if (arg.sourceURL) {\n          arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n        }\n      }\n      return arg;\n    }\n\n    function consoleLog(type) {\n      var console = $window.console || {},\n          logFn = console[type] || console.log || noop,\n          hasApply = false;\n\n      // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.\n      // The reason behind this is that console.log has type \"object\" in IE8...\n      try {\n        hasApply = !!logFn.apply;\n      } catch (e) {}\n\n      if (hasApply) {\n        return function() {\n          var args = [];\n          forEach(arguments, function(arg) {\n            args.push(formatError(arg));\n          });\n          return logFn.apply(console, args);\n        };\n      }\n\n      // we are IE which either doesn't have window.console => this is noop and we do nothing,\n      // or we are IE where console.log doesn't have apply so we log at least first 2 args\n      return function(arg1, arg2) {\n        logFn(arg1, arg2 == null ? '' : arg2);\n      };\n    }\n  }];\n}\n\nvar $parseMinErr = minErr('$parse');\nvar promiseWarningCache = {};\nvar promiseWarning;\n\n// Sandboxing Angular Expressions\n// ------------------------------\n// Angular expressions are generally considered safe because these expressions only have direct\n// access to $scope and locals. However, one can obtain the ability to execute arbitrary JS code by\n// obtaining a reference to native JS functions such as the Function constructor.\n//\n// As an example, consider the following Angular expression:\n//\n//   {}.toString.constructor(alert(\"evil JS code\"))\n//\n// We want to prevent this type of access. For the sake of performance, during the lexing phase we\n// disallow any \"dotted\" access to any member named \"constructor\".\n//\n// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor\n// while evaluating the expression, which is a stronger but more expensive test. Since reflective\n// calls are expensive anyway, this is not such a big deal compared to static dereferencing.\n//\n// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits\n// against the expression language, but not to prevent exploits that were enabled by exposing\n// sensitive JavaScript or browser apis on Scope. Exposing such objects on a Scope is never a good\n// practice and therefore we are not even trying to protect against interaction with an object\n// explicitly exposed in this way.\n//\n// A developer could foil the name check by aliasing the Function constructor under a different\n// name on the scope.\n//\n// In general, it is not possible to access a Window object from an angular expression unless a\n// window or some DOM object that has a reference to window is published onto a Scope.\n\nfunction ensureSafeMemberName(name, fullExpression) {\n  if (name === \"constructor\") {\n    throw $parseMinErr('isecfld',\n        'Referencing \"constructor\" field in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n  }\n  return name;\n}\n\nfunction ensureSafeObject(obj, fullExpression) {\n  // nifty check if obj is Function that is fast and works across iframes and other contexts\n  if (obj) {\n    if (obj.constructor === obj) {\n      throw $parseMinErr('isecfn',\n          'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isWindow(obj)\n        obj.document && obj.location && obj.alert && obj.setInterval) {\n      throw $parseMinErr('isecwindow',\n          'Referencing the Window in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isElement(obj)\n        obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {\n      throw $parseMinErr('isecdom',\n          'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    }\n  }\n  return obj;\n}\n\nvar OPERATORS = {\n    /* jshint bitwise : false */\n    'null':function(){return null;},\n    'true':function(){return true;},\n    'false':function(){return false;},\n    undefined:noop,\n    '+':function(self, locals, a,b){\n      a=a(self, locals); b=b(self, locals);\n      if (isDefined(a)) {\n        if (isDefined(b)) {\n          return a + b;\n        }\n        return a;\n      }\n      return isDefined(b)?b:undefined;},\n    '-':function(self, locals, a,b){\n          a=a(self, locals); b=b(self, locals);\n          return (isDefined(a)?a:0)-(isDefined(b)?b:0);\n        },\n    '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);},\n    '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);},\n    '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);},\n    '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);},\n    '=':noop,\n    '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);},\n    '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);},\n    '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);},\n    '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);},\n    '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);},\n    '>':function(self, locals, a,b){return a(self, locals)>b(self, locals);},\n    '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);},\n    '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);},\n    '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);},\n    '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);},\n    '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);},\n//    '|':function(self, locals, a,b){return a|b;},\n    '|':function(self, locals, a,b){return b(self, locals)(self, locals, a(self, locals));},\n    '!':function(self, locals, a){return !a(self, locals);}\n};\n/* jshint bitwise: true */\nvar ESCAPE = {\"n\":\"\\n\", \"f\":\"\\f\", \"r\":\"\\r\", \"t\":\"\\t\", \"v\":\"\\v\", \"'\":\"'\", '\"':'\"'};\n\n\n/////////////////////////////////////////\n\n\n/**\n * @constructor\n */\nvar Lexer = function (options) {\n  this.options = options;\n};\n\nLexer.prototype = {\n  constructor: Lexer,\n\n  lex: function (text) {\n    this.text = text;\n\n    this.index = 0;\n    this.ch = undefined;\n    this.lastCh = ':'; // can start regexp\n\n    this.tokens = [];\n\n    var token;\n    var json = [];\n\n    while (this.index < this.text.length) {\n      this.ch = this.text.charAt(this.index);\n      if (this.is('\"\\'')) {\n        this.readString(this.ch);\n      } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) {\n        this.readNumber();\n      } else if (this.isIdent(this.ch)) {\n        this.readIdent();\n        // identifiers can only be if the preceding char was a { or ,\n        if (this.was('{,') && json[0] === '{' &&\n            (token = this.tokens[this.tokens.length - 1])) {\n          token.json = token.text.indexOf('.') === -1;\n        }\n      } else if (this.is('(){}[].,;:?')) {\n        this.tokens.push({\n          index: this.index,\n          text: this.ch,\n          json: (this.was(':[,') && this.is('{[')) || this.is('}]:,')\n        });\n        if (this.is('{[')) json.unshift(this.ch);\n        if (this.is('}]')) json.shift();\n        this.index++;\n      } else if (this.isWhitespace(this.ch)) {\n        this.index++;\n        continue;\n      } else {\n        var ch2 = this.ch + this.peek();\n        var ch3 = ch2 + this.peek(2);\n        var fn = OPERATORS[this.ch];\n        var fn2 = OPERATORS[ch2];\n        var fn3 = OPERATORS[ch3];\n        if (fn3) {\n          this.tokens.push({index: this.index, text: ch3, fn: fn3});\n          this.index += 3;\n        } else if (fn2) {\n          this.tokens.push({index: this.index, text: ch2, fn: fn2});\n          this.index += 2;\n        } else if (fn) {\n          this.tokens.push({\n            index: this.index,\n            text: this.ch,\n            fn: fn,\n            json: (this.was('[,:') && this.is('+-'))\n          });\n          this.index += 1;\n        } else {\n          this.throwError('Unexpected next character ', this.index, this.index + 1);\n        }\n      }\n      this.lastCh = this.ch;\n    }\n    return this.tokens;\n  },\n\n  is: function(chars) {\n    return chars.indexOf(this.ch) !== -1;\n  },\n\n  was: function(chars) {\n    return chars.indexOf(this.lastCh) !== -1;\n  },\n\n  peek: function(i) {\n    var num = i || 1;\n    return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;\n  },\n\n  isNumber: function(ch) {\n    return ('0' <= ch && ch <= '9');\n  },\n\n  isWhitespace: function(ch) {\n    // IE treats non-breaking space as \\u00A0\n    return (ch === ' ' || ch === '\\r' || ch === '\\t' ||\n            ch === '\\n' || ch === '\\v' || ch === '\\u00A0');\n  },\n\n  isIdent: function(ch) {\n    return ('a' <= ch && ch <= 'z' ||\n            'A' <= ch && ch <= 'Z' ||\n            '_' === ch || ch === '$');\n  },\n\n  isExpOperator: function(ch) {\n    return (ch === '-' || ch === '+' || this.isNumber(ch));\n  },\n\n  throwError: function(error, start, end) {\n    end = end || this.index;\n    var colStr = (isDefined(start)\n            ? 's ' + start +  '-' + this.index + ' [' + this.text.substring(start, end) + ']'\n            : ' ' + end);\n    throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',\n        error, colStr, this.text);\n  },\n\n  readNumber: function() {\n    var number = '';\n    var start = this.index;\n    while (this.index < this.text.length) {\n      var ch = lowercase(this.text.charAt(this.index));\n      if (ch == '.' || this.isNumber(ch)) {\n        number += ch;\n      } else {\n        var peekCh = this.peek();\n        if (ch == 'e' && this.isExpOperator(peekCh)) {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            peekCh && this.isNumber(peekCh) &&\n            number.charAt(number.length - 1) == 'e') {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            (!peekCh || !this.isNumber(peekCh)) &&\n            number.charAt(number.length - 1) == 'e') {\n          this.throwError('Invalid exponent');\n        } else {\n          break;\n        }\n      }\n      this.index++;\n    }\n    number = 1 * number;\n    this.tokens.push({\n      index: start,\n      text: number,\n      json: true,\n      fn: function() { return number; }\n    });\n  },\n\n  readIdent: function() {\n    var parser = this;\n\n    var ident = '';\n    var start = this.index;\n\n    var lastDot, peekIndex, methodName, ch;\n\n    while (this.index < this.text.length) {\n      ch = this.text.charAt(this.index);\n      if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) {\n        if (ch === '.') lastDot = this.index;\n        ident += ch;\n      } else {\n        break;\n      }\n      this.index++;\n    }\n\n    //check if this is not a method invocation and if it is back out to last dot\n    if (lastDot) {\n      peekIndex = this.index;\n      while (peekIndex < this.text.length) {\n        ch = this.text.charAt(peekIndex);\n        if (ch === '(') {\n          methodName = ident.substr(lastDot - start + 1);\n          ident = ident.substr(0, lastDot - start);\n          this.index = peekIndex;\n          break;\n        }\n        if (this.isWhitespace(ch)) {\n          peekIndex++;\n        } else {\n          break;\n        }\n      }\n    }\n\n\n    var token = {\n      index: start,\n      text: ident\n    };\n\n    // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn\n    if (OPERATORS.hasOwnProperty(ident)) {\n      token.fn = OPERATORS[ident];\n      token.json = OPERATORS[ident];\n    } else {\n      var getter = getterFn(ident, this.options, this.text);\n      token.fn = extend(function(self, locals) {\n        return (getter(self, locals));\n      }, {\n        assign: function(self, value) {\n          return setter(self, ident, value, parser.text, parser.options);\n        }\n      });\n    }\n\n    this.tokens.push(token);\n\n    if (methodName) {\n      this.tokens.push({\n        index:lastDot,\n        text: '.',\n        json: false\n      });\n      this.tokens.push({\n        index: lastDot + 1,\n        text: methodName,\n        json: false\n      });\n    }\n  },\n\n  readString: function(quote) {\n    var start = this.index;\n    this.index++;\n    var string = '';\n    var rawString = quote;\n    var escape = false;\n    while (this.index < this.text.length) {\n      var ch = this.text.charAt(this.index);\n      rawString += ch;\n      if (escape) {\n        if (ch === 'u') {\n          var hex = this.text.substring(this.index + 1, this.index + 5);\n          if (!hex.match(/[\\da-f]{4}/i))\n            this.throwError('Invalid unicode escape [\\\\u' + hex + ']');\n          this.index += 4;\n          string += String.fromCharCode(parseInt(hex, 16));\n        } else {\n          var rep = ESCAPE[ch];\n          if (rep) {\n            string += rep;\n          } else {\n            string += ch;\n          }\n        }\n        escape = false;\n      } else if (ch === '\\\\') {\n        escape = true;\n      } else if (ch === quote) {\n        this.index++;\n        this.tokens.push({\n          index: start,\n          text: rawString,\n          string: string,\n          json: true,\n          fn: function() { return string; }\n        });\n        return;\n      } else {\n        string += ch;\n      }\n      this.index++;\n    }\n    this.throwError('Unterminated quote', start);\n  }\n};\n\n\n/**\n * @constructor\n */\nvar Parser = function (lexer, $filter, options) {\n  this.lexer = lexer;\n  this.$filter = $filter;\n  this.options = options;\n};\n\nParser.ZERO = extend(function () {\n  return 0;\n}, {\n  constant: true\n});\n\nParser.prototype = {\n  constructor: Parser,\n\n  parse: function (text, json) {\n    this.text = text;\n\n    //TODO(i): strip all the obsolte json stuff from this file\n    this.json = json;\n\n    this.tokens = this.lexer.lex(text);\n\n    if (json) {\n      // The extra level of aliasing is here, just in case the lexer misses something, so that\n      // we prevent any accidental execution in JSON.\n      this.assignment = this.logicalOR;\n\n      this.functionCall =\n      this.fieldAccess =\n      this.objectIndex =\n      this.filterChain = function() {\n        this.throwError('is not valid json', {text: text, index: 0});\n      };\n    }\n\n    var value = json ? this.primary() : this.statements();\n\n    if (this.tokens.length !== 0) {\n      this.throwError('is an unexpected token', this.tokens[0]);\n    }\n\n    value.literal = !!value.literal;\n    value.constant = !!value.constant;\n\n    return value;\n  },\n\n  primary: function () {\n    var primary;\n    if (this.expect('(')) {\n      primary = this.filterChain();\n      this.consume(')');\n    } else if (this.expect('[')) {\n      primary = this.arrayDeclaration();\n    } else if (this.expect('{')) {\n      primary = this.object();\n    } else {\n      var token = this.expect();\n      primary = token.fn;\n      if (!primary) {\n        this.throwError('not a primary expression', token);\n      }\n      if (token.json) {\n        primary.constant = true;\n        primary.literal = true;\n      }\n    }\n\n    var next, context;\n    while ((next = this.expect('(', '[', '.'))) {\n      if (next.text === '(') {\n        primary = this.functionCall(primary, context);\n        context = null;\n      } else if (next.text === '[') {\n        context = primary;\n        primary = this.objectIndex(primary);\n      } else if (next.text === '.') {\n        context = primary;\n        primary = this.fieldAccess(primary);\n      } else {\n        this.throwError('IMPOSSIBLE');\n      }\n    }\n    return primary;\n  },\n\n  throwError: function(msg, token) {\n    throw $parseMinErr('syntax',\n        'Syntax Error: Token \\'{0}\\' {1} at column {2} of the expression [{3}] starting at [{4}].',\n          token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));\n  },\n\n  peekToken: function() {\n    if (this.tokens.length === 0)\n      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n    return this.tokens[0];\n  },\n\n  peek: function(e1, e2, e3, e4) {\n    if (this.tokens.length > 0) {\n      var token = this.tokens[0];\n      var t = token.text;\n      if (t === e1 || t === e2 || t === e3 || t === e4 ||\n          (!e1 && !e2 && !e3 && !e4)) {\n        return token;\n      }\n    }\n    return false;\n  },\n\n  expect: function(e1, e2, e3, e4){\n    var token = this.peek(e1, e2, e3, e4);\n    if (token) {\n      if (this.json && !token.json) {\n        this.throwError('is not valid json', token);\n      }\n      this.tokens.shift();\n      return token;\n    }\n    return false;\n  },\n\n  consume: function(e1){\n    if (!this.expect(e1)) {\n      this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());\n    }\n  },\n\n  unaryFn: function(fn, right) {\n    return extend(function(self, locals) {\n      return fn(self, locals, right);\n    }, {\n      constant:right.constant\n    });\n  },\n\n  ternaryFn: function(left, middle, right){\n    return extend(function(self, locals){\n      return left(self, locals) ? middle(self, locals) : right(self, locals);\n    }, {\n      constant: left.constant && middle.constant && right.constant\n    });\n  },\n\n  binaryFn: function(left, fn, right) {\n    return extend(function(self, locals) {\n      return fn(self, locals, left, right);\n    }, {\n      constant:left.constant && right.constant\n    });\n  },\n\n  statements: function() {\n    var statements = [];\n    while (true) {\n      if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))\n        statements.push(this.filterChain());\n      if (!this.expect(';')) {\n        // optimize for the common case where there is only one statement.\n        // TODO(size): maybe we should not support multiple statements?\n        return (statements.length === 1)\n            ? statements[0]\n            : function(self, locals) {\n                var value;\n                for (var i = 0; i < statements.length; i++) {\n                  var statement = statements[i];\n                  if (statement) {\n                    value = statement(self, locals);\n                  }\n                }\n                return value;\n              };\n      }\n    }\n  },\n\n  filterChain: function() {\n    var left = this.expression();\n    var token;\n    while (true) {\n      if ((token = this.expect('|'))) {\n        left = this.binaryFn(left, token.fn, this.filter());\n      } else {\n        return left;\n      }\n    }\n  },\n\n  filter: function() {\n    var token = this.expect();\n    var fn = this.$filter(token.text);\n    var argsFn = [];\n    while (true) {\n      if ((token = this.expect(':'))) {\n        argsFn.push(this.expression());\n      } else {\n        var fnInvoke = function(self, locals, input) {\n          var args = [input];\n          for (var i = 0; i < argsFn.length; i++) {\n            args.push(argsFn[i](self, locals));\n          }\n          return fn.apply(self, args);\n        };\n        return function() {\n          return fnInvoke;\n        };\n      }\n    }\n  },\n\n  expression: function() {\n    return this.assignment();\n  },\n\n  assignment: function() {\n    var left = this.ternary();\n    var right;\n    var token;\n    if ((token = this.expect('='))) {\n      if (!left.assign) {\n        this.throwError('implies assignment but [' +\n            this.text.substring(0, token.index) + '] can not be assigned to', token);\n      }\n      right = this.ternary();\n      return function(scope, locals) {\n        return left.assign(scope, right(scope, locals), locals);\n      };\n    }\n    return left;\n  },\n\n  ternary: function() {\n    var left = this.logicalOR();\n    var middle;\n    var token;\n    if ((token = this.expect('?'))) {\n      middle = this.ternary();\n      if ((token = this.expect(':'))) {\n        return this.ternaryFn(left, middle, this.ternary());\n      } else {\n        this.throwError('expected :', token);\n      }\n    } else {\n      return left;\n    }\n  },\n\n  logicalOR: function() {\n    var left = this.logicalAND();\n    var token;\n    while (true) {\n      if ((token = this.expect('||'))) {\n        left = this.binaryFn(left, token.fn, this.logicalAND());\n      } else {\n        return left;\n      }\n    }\n  },\n\n  logicalAND: function() {\n    var left = this.equality();\n    var token;\n    if ((token = this.expect('&&'))) {\n      left = this.binaryFn(left, token.fn, this.logicalAND());\n    }\n    return left;\n  },\n\n  equality: function() {\n    var left = this.relational();\n    var token;\n    if ((token = this.expect('==','!=','===','!=='))) {\n      left = this.binaryFn(left, token.fn, this.equality());\n    }\n    return left;\n  },\n\n  relational: function() {\n    var left = this.additive();\n    var token;\n    if ((token = this.expect('<', '>', '<=', '>='))) {\n      left = this.binaryFn(left, token.fn, this.relational());\n    }\n    return left;\n  },\n\n  additive: function() {\n    var left = this.multiplicative();\n    var token;\n    while ((token = this.expect('+','-'))) {\n      left = this.binaryFn(left, token.fn, this.multiplicative());\n    }\n    return left;\n  },\n\n  multiplicative: function() {\n    var left = this.unary();\n    var token;\n    while ((token = this.expect('*','/','%'))) {\n      left = this.binaryFn(left, token.fn, this.unary());\n    }\n    return left;\n  },\n\n  unary: function() {\n    var token;\n    if (this.expect('+')) {\n      return this.primary();\n    } else if ((token = this.expect('-'))) {\n      return this.binaryFn(Parser.ZERO, token.fn, this.unary());\n    } else if ((token = this.expect('!'))) {\n      return this.unaryFn(token.fn, this.unary());\n    } else {\n      return this.primary();\n    }\n  },\n\n  fieldAccess: function(object) {\n    var parser = this;\n    var field = this.expect().text;\n    var getter = getterFn(field, this.options, this.text);\n\n    return extend(function(scope, locals, self) {\n      return getter(self || object(scope, locals));\n    }, {\n      assign: function(scope, value, locals) {\n        return setter(object(scope, locals), field, value, parser.text, parser.options);\n      }\n    });\n  },\n\n  objectIndex: function(obj) {\n    var parser = this;\n\n    var indexFn = this.expression();\n    this.consume(']');\n\n    return extend(function(self, locals) {\n      var o = obj(self, locals),\n          i = indexFn(self, locals),\n          v, p;\n\n      if (!o) return undefined;\n      v = ensureSafeObject(o[i], parser.text);\n      if (v && v.then && parser.options.unwrapPromises) {\n        p = v;\n        if (!('$$v' in v)) {\n          p.$$v = undefined;\n          p.then(function(val) { p.$$v = val; });\n        }\n        v = v.$$v;\n      }\n      return v;\n    }, {\n      assign: function(self, value, locals) {\n        var key = indexFn(self, locals);\n        // prevent overwriting of Function.constructor which would break ensureSafeObject check\n        var safe = ensureSafeObject(obj(self, locals), parser.text);\n        return safe[key] = value;\n      }\n    });\n  },\n\n  functionCall: function(fn, contextGetter) {\n    var argsFn = [];\n    if (this.peekToken().text !== ')') {\n      do {\n        argsFn.push(this.expression());\n      } while (this.expect(','));\n    }\n    this.consume(')');\n\n    var parser = this;\n\n    return function(scope, locals) {\n      var args = [];\n      var context = contextGetter ? contextGetter(scope, locals) : scope;\n\n      for (var i = 0; i < argsFn.length; i++) {\n        args.push(argsFn[i](scope, locals));\n      }\n      var fnPtr = fn(scope, locals, context) || noop;\n\n      ensureSafeObject(context, parser.text);\n      ensureSafeObject(fnPtr, parser.text);\n\n      // IE stupidity! (IE doesn't have apply for some native functions)\n      var v = fnPtr.apply\n            ? fnPtr.apply(context, args)\n            : fnPtr(args[0], args[1], args[2], args[3], args[4]);\n\n      return ensureSafeObject(v, parser.text);\n    };\n  },\n\n  // This is used with json array declaration\n  arrayDeclaration: function () {\n    var elementFns = [];\n    var allConstant = true;\n    if (this.peekToken().text !== ']') {\n      do {\n        if (this.peek(']')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        var elementFn = this.expression();\n        elementFns.push(elementFn);\n        if (!elementFn.constant) {\n          allConstant = false;\n        }\n      } while (this.expect(','));\n    }\n    this.consume(']');\n\n    return extend(function(self, locals) {\n      var array = [];\n      for (var i = 0; i < elementFns.length; i++) {\n        array.push(elementFns[i](self, locals));\n      }\n      return array;\n    }, {\n      literal: true,\n      constant: allConstant\n    });\n  },\n\n  object: function () {\n    var keyValues = [];\n    var allConstant = true;\n    if (this.peekToken().text !== '}') {\n      do {\n        if (this.peek('}')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        var token = this.expect(),\n        key = token.string || token.text;\n        this.consume(':');\n        var value = this.expression();\n        keyValues.push({key: key, value: value});\n        if (!value.constant) {\n          allConstant = false;\n        }\n      } while (this.expect(','));\n    }\n    this.consume('}');\n\n    return extend(function(self, locals) {\n      var object = {};\n      for (var i = 0; i < keyValues.length; i++) {\n        var keyValue = keyValues[i];\n        object[keyValue.key] = keyValue.value(self, locals);\n      }\n      return object;\n    }, {\n      literal: true,\n      constant: allConstant\n    });\n  }\n};\n\n\n//////////////////////////////////////////////////\n// Parser helper functions\n//////////////////////////////////////////////////\n\nfunction setter(obj, path, setValue, fullExp, options) {\n  //needed?\n  options = options || {};\n\n  var element = path.split('.'), key;\n  for (var i = 0; element.length > 1; i++) {\n    key = ensureSafeMemberName(element.shift(), fullExp);\n    var propertyObj = obj[key];\n    if (!propertyObj) {\n      propertyObj = {};\n      obj[key] = propertyObj;\n    }\n    obj = propertyObj;\n    if (obj.then && options.unwrapPromises) {\n      promiseWarning(fullExp);\n      if (!(\"$$v\" in obj)) {\n        (function(promise) {\n          promise.then(function(val) { promise.$$v = val; }); }\n        )(obj);\n      }\n      if (obj.$$v === undefined) {\n        obj.$$v = {};\n      }\n      obj = obj.$$v;\n    }\n  }\n  key = ensureSafeMemberName(element.shift(), fullExp);\n  obj[key] = setValue;\n  return setValue;\n}\n\nvar getterFnCache = {};\n\n/**\n * Implementation of the \"Black Hole\" variant from:\n * - http://jsperf.com/angularjs-parse-getter/4\n * - http://jsperf.com/path-evaluation-simplified/7\n */\nfunction cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {\n  ensureSafeMemberName(key0, fullExp);\n  ensureSafeMemberName(key1, fullExp);\n  ensureSafeMemberName(key2, fullExp);\n  ensureSafeMemberName(key3, fullExp);\n  ensureSafeMemberName(key4, fullExp);\n\n  return !options.unwrapPromises\n      ? function cspSafeGetter(scope, locals) {\n          var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;\n\n          if (pathVal == null) return pathVal;\n          pathVal = pathVal[key0];\n\n          if (!key1) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key1];\n\n          if (!key2) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key2];\n\n          if (!key3) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key3];\n\n          if (!key4) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key4];\n\n          return pathVal;\n        }\n      : function cspSafePromiseEnabledGetter(scope, locals) {\n          var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope,\n              promise;\n\n          if (pathVal == null) return pathVal;\n\n          pathVal = pathVal[key0];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key1) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key1];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key2) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key2];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key3) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key3];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key4) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key4];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n          return pathVal;\n        };\n}\n\nfunction simpleGetterFn1(key0, fullExp) {\n  ensureSafeMemberName(key0, fullExp);\n\n  return function simpleGetterFn1(scope, locals) {\n    if (scope == null) return undefined;\n    return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0];\n  };\n}\n\nfunction simpleGetterFn2(key0, key1, fullExp) {\n  ensureSafeMemberName(key0, fullExp);\n  ensureSafeMemberName(key1, fullExp);\n\n  return function simpleGetterFn2(scope, locals) {\n    if (scope == null) return undefined;\n    scope = ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0];\n    return scope == null ? undefined : scope[key1];\n  };\n}\n\nfunction getterFn(path, options, fullExp) {\n  // Check whether the cache has this getter already.\n  // We can use hasOwnProperty directly on the cache because we ensure,\n  // see below, that the cache never stores a path called 'hasOwnProperty'\n  if (getterFnCache.hasOwnProperty(path)) {\n    return getterFnCache[path];\n  }\n\n  var pathKeys = path.split('.'),\n      pathKeysLength = pathKeys.length,\n      fn;\n\n  // When we have only 1 or 2 tokens, use optimized special case closures.\n  // http://jsperf.com/angularjs-parse-getter/6\n  if (!options.unwrapPromises && pathKeysLength === 1) {\n    fn = simpleGetterFn1(pathKeys[0], fullExp);\n  } else if (!options.unwrapPromises && pathKeysLength === 2) {\n    fn = simpleGetterFn2(pathKeys[0], pathKeys[1], fullExp);\n  } else if (options.csp) {\n    if (pathKeysLength < 6) {\n      fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp,\n                          options);\n    } else {\n      fn = function(scope, locals) {\n        var i = 0, val;\n        do {\n          val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],\n                                pathKeys[i++], fullExp, options)(scope, locals);\n\n          locals = undefined; // clear after first iteration\n          scope = val;\n        } while (i < pathKeysLength);\n        return val;\n      };\n    }\n  } else {\n    var code = 'var p;\\n';\n    forEach(pathKeys, function(key, index) {\n      ensureSafeMemberName(key, fullExp);\n      code += 'if(s == null) return undefined;\\n' +\n              's='+ (index\n                      // we simply dereference 's' on any .dot notation\n                      ? 's'\n                      // but if we are first then we check locals first, and if so read it first\n                      : '((k&&k.hasOwnProperty(\"' + key + '\"))?k:s)') + '[\"' + key + '\"]' + ';\\n' +\n              (options.unwrapPromises\n                ? 'if (s && s.then) {\\n' +\n                  ' pw(\"' + fullExp.replace(/([\"\\r\\n])/g, '\\\\$1') + '\");\\n' +\n                  ' if (!(\"$$v\" in s)) {\\n' +\n                    ' p=s;\\n' +\n                    ' p.$$v = undefined;\\n' +\n                    ' p.then(function(v) {p.$$v=v;});\\n' +\n                    '}\\n' +\n                  ' s=s.$$v\\n' +\n                '}\\n'\n                : '');\n    });\n    code += 'return s;';\n\n    /* jshint -W054 */\n    var evaledFnGetter = new Function('s', 'k', 'pw', code); // s=scope, k=locals, pw=promiseWarning\n    /* jshint +W054 */\n    evaledFnGetter.toString = valueFn(code);\n    fn = options.unwrapPromises ? function(scope, locals) {\n      return evaledFnGetter(scope, locals, promiseWarning);\n    } : evaledFnGetter;\n  }\n\n  // Only cache the value if it's not going to mess up the cache object\n  // This is more performant that using Object.prototype.hasOwnProperty.call\n  if (path !== 'hasOwnProperty') {\n    getterFnCache[path] = fn;\n  }\n  return fn;\n}\n\n///////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $parse\n * @kind function\n *\n * @description\n *\n * Converts Angular {@link guide/expression expression} into a function.\n *\n * ```js\n *   var getter = $parse('user.name');\n *   var setter = getter.assign;\n *   var context = {user:{name:'angular'}};\n *   var locals = {user:{name:'local'}};\n *\n *   expect(getter(context)).toEqual('angular');\n *   setter(context, 'newValue');\n *   expect(context.user.name).toEqual('newValue');\n *   expect(getter(context, locals)).toEqual('local');\n * ```\n *\n *\n * @param {string} expression String expression to compile.\n * @returns {function(context, locals)} a function which represents the compiled expression:\n *\n *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n *      are evaluated against (typically a scope object).\n *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n *      `context`.\n *\n *    The returned function also has the following properties:\n *      * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript\n *        literal.\n *      * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript\n *        constant literals.\n *      * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be\n *        set to a function to change its value on the given context.\n *\n */\n\n\n/**\n * @ngdoc provider\n * @name $parseProvider\n * @function\n *\n * @description\n * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}\n *  service.\n */\nfunction $ParseProvider() {\n  var cache = {};\n\n  var $parseOptions = {\n    csp: false,\n    unwrapPromises: false,\n    logPromiseWarnings: true\n  };\n\n\n  /**\n   * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future.\n   *\n   * @ngdoc method\n   * @name $parseProvider#unwrapPromises\n   * @description\n   *\n   * **This feature is deprecated, see deprecation notes below for more info**\n   *\n   * If set to true (default is false), $parse will unwrap promises automatically when a promise is\n   * found at any part of the expression. In other words, if set to true, the expression will always\n   * result in a non-promise value.\n   *\n   * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled,\n   * the fulfillment value is used in place of the promise while evaluating the expression.\n   *\n   * **Deprecation notice**\n   *\n   * This is a feature that didn't prove to be wildly useful or popular, primarily because of the\n   * dichotomy between data access in templates (accessed as raw values) and controller code\n   * (accessed as promises).\n   *\n   * In most code we ended up resolving promises manually in controllers anyway and thus unifying\n   * the model access there.\n   *\n   * Other downsides of automatic promise unwrapping:\n   *\n   * - when building components it's often desirable to receive the raw promises\n   * - adds complexity and slows down expression evaluation\n   * - makes expression code pre-generation unattractive due to the amount of code that needs to be\n   *   generated\n   * - makes IDE auto-completion and tool support hard\n   *\n   * **Warning Logs**\n   *\n   * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a\n   * promise (to reduce the noise, each expression is logged only once). To disable this logging use\n   * `$parseProvider.logPromiseWarnings(false)` api.\n   *\n   *\n   * @param {boolean=} value New value.\n   * @returns {boolean|self} Returns the current setting when used as getter and self if used as\n   *                         setter.\n   */\n  this.unwrapPromises = function(value) {\n    if (isDefined(value)) {\n      $parseOptions.unwrapPromises = !!value;\n      return this;\n    } else {\n      return $parseOptions.unwrapPromises;\n    }\n  };\n\n\n  /**\n   * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future.\n   *\n   * @ngdoc method\n   * @name $parseProvider#logPromiseWarnings\n   * @description\n   *\n   * Controls whether Angular should log a warning on any encounter of a promise in an expression.\n   *\n   * The default is set to `true`.\n   *\n   * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well.\n   *\n   * @param {boolean=} value New value.\n   * @returns {boolean|self} Returns the current setting when used as getter and self if used as\n   *                         setter.\n   */\n this.logPromiseWarnings = function(value) {\n    if (isDefined(value)) {\n      $parseOptions.logPromiseWarnings = value;\n      return this;\n    } else {\n      return $parseOptions.logPromiseWarnings;\n    }\n  };\n\n\n  this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) {\n    $parseOptions.csp = $sniffer.csp;\n\n    promiseWarning = function promiseWarningFn(fullExp) {\n      if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return;\n      promiseWarningCache[fullExp] = true;\n      $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' +\n          'Automatic unwrapping of promises in Angular expressions is deprecated.');\n    };\n\n    return function(exp) {\n      var parsedExpression;\n\n      switch (typeof exp) {\n        case 'string':\n\n          if (cache.hasOwnProperty(exp)) {\n            return cache[exp];\n          }\n\n          var lexer = new Lexer($parseOptions);\n          var parser = new Parser(lexer, $filter, $parseOptions);\n          parsedExpression = parser.parse(exp, false);\n\n          if (exp !== 'hasOwnProperty') {\n            // Only cache the value if it's not going to mess up the cache object\n            // This is more performant that using Object.prototype.hasOwnProperty.call\n            cache[exp] = parsedExpression;\n          }\n\n          return parsedExpression;\n\n        case 'function':\n          return exp;\n\n        default:\n          return noop;\n      }\n    };\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $q\n * @requires $rootScope\n *\n * @description\n * A promise/deferred implementation inspired by [Kris Kowal's Q](https://github.com/kriskowal/q).\n *\n * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an\n * interface for interacting with an object that represents the result of an action that is\n * performed asynchronously, and may or may not be finished at any given point in time.\n *\n * From the perspective of dealing with error handling, deferred and promise APIs are to\n * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.\n *\n * ```js\n *   // for the purpose of this example let's assume that variables `$q`, `scope` and `okToGreet`\n *   // are available in the current lexical scope (they could have been injected or passed in).\n *\n *   function asyncGreet(name) {\n *     var deferred = $q.defer();\n *\n *     setTimeout(function() {\n *       // since this fn executes async in a future turn of the event loop, we need to wrap\n *       // our code into an $apply call so that the model changes are properly observed.\n *       scope.$apply(function() {\n *         deferred.notify('About to greet ' + name + '.');\n *\n *         if (okToGreet(name)) {\n *           deferred.resolve('Hello, ' + name + '!');\n *         } else {\n *           deferred.reject('Greeting ' + name + ' is not allowed.');\n *         }\n *       });\n *     }, 1000);\n *\n *     return deferred.promise;\n *   }\n *\n *   var promise = asyncGreet('Robin Hood');\n *   promise.then(function(greeting) {\n *     alert('Success: ' + greeting);\n *   }, function(reason) {\n *     alert('Failed: ' + reason);\n *   }, function(update) {\n *     alert('Got notification: ' + update);\n *   });\n * ```\n *\n * At first it might not be obvious why this extra complexity is worth the trouble. The payoff\n * comes in the way of guarantees that promise and deferred APIs make, see\n * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.\n *\n * Additionally the promise api allows for composition that is very hard to do with the\n * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.\n * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the\n * section on serial or parallel joining of promises.\n *\n *\n * # The Deferred API\n *\n * A new instance of deferred is constructed by calling `$q.defer()`.\n *\n * The purpose of the deferred object is to expose the associated Promise instance as well as APIs\n * that can be used for signaling the successful or unsuccessful completion, as well as the status\n * of the task.\n *\n * **Methods**\n *\n * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection\n *   constructed via `$q.reject`, the promise will be rejected instead.\n * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to\n *   resolving it with a rejection constructed via `$q.reject`.\n * - `notify(value)` - provides updates on the status of the promise's execution. This may be called\n *   multiple times before the promise is either resolved or rejected.\n *\n * **Properties**\n *\n * - promise – `{Promise}` – promise object associated with this deferred.\n *\n *\n * # The Promise API\n *\n * A new promise instance is created when a deferred instance is created and can be retrieved by\n * calling `deferred.promise`.\n *\n * The purpose of the promise object is to allow for interested parties to get access to the result\n * of the deferred task when it completes.\n *\n * **Methods**\n *\n * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or\n *   will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously\n *   as soon as the result is available. The callbacks are called with a single argument: the result\n *   or rejection reason. Additionally, the notify callback may be called zero or more times to\n *   provide a progress indication, before the promise is resolved or rejected.\n *\n *   This method *returns a new promise* which is resolved or rejected via the return value of the\n *   `successCallback`, `errorCallback`. It also notifies via the return value of the\n *   `notifyCallback` method. The promise can not be resolved or rejected from the notifyCallback\n *   method.\n *\n * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`\n *\n * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise,\n *   but to do so without modifying the final value. This is useful to release resources or do some\n *   clean-up that needs to be done whether the promise was rejected or resolved. See the [full\n *   specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for\n *   more information.\n *\n *   Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as\n *   property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to\n *   make your code IE8 and Android 2.x compatible.\n *\n * # Chaining promises\n *\n * Because calling the `then` method of a promise returns a new derived promise, it is easily\n * possible to create a chain of promises:\n *\n * ```js\n *   promiseB = promiseA.then(function(result) {\n *     return result + 1;\n *   });\n *\n *   // promiseB will be resolved immediately after promiseA is resolved and its value\n *   // will be the result of promiseA incremented by 1\n * ```\n *\n * It is possible to create chains of any length and since a promise can be resolved with another\n * promise (which will defer its resolution further), it is possible to pause/defer resolution of\n * the promises at any point in the chain. This makes it possible to implement powerful APIs like\n * $http's response interceptors.\n *\n *\n * # Differences between Kris Kowal's Q and $q\n *\n *  There are two main differences:\n *\n * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation\n *   mechanism in angular, which means faster propagation of resolution or rejection into your\n *   models and avoiding unnecessary browser repaints, which would result in flickering UI.\n * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains\n *   all the important functionality needed for common async tasks.\n *\n *  # Testing\n *\n *  ```js\n *    it('should simulate promise', inject(function($q, $rootScope) {\n *      var deferred = $q.defer();\n *      var promise = deferred.promise;\n *      var resolvedValue;\n *\n *      promise.then(function(value) { resolvedValue = value; });\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Simulate resolving of promise\n *      deferred.resolve(123);\n *      // Note that the 'then' function does not get called synchronously.\n *      // This is because we want the promise API to always be async, whether or not\n *      // it got called synchronously or asynchronously.\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Propagate promise resolution to 'then' functions using $apply().\n *      $rootScope.$apply();\n *      expect(resolvedValue).toEqual(123);\n *    }));\n *  ```\n */\nfunction $QProvider() {\n\n  this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {\n    return qFactory(function(callback) {\n      $rootScope.$evalAsync(callback);\n    }, $exceptionHandler);\n  }];\n}\n\n\n/**\n * Constructs a promise manager.\n *\n * @param {function(Function)} nextTick Function for executing functions in the next turn.\n * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for\n *     debugging purposes.\n * @returns {object} Promise manager.\n */\nfunction qFactory(nextTick, exceptionHandler) {\n\n  /**\n   * @ngdoc method\n   * @name $q#defer\n   * @function\n   *\n   * @description\n   * Creates a `Deferred` object which represents a task which will finish in the future.\n   *\n   * @returns {Deferred} Returns a new instance of deferred.\n   */\n  var defer = function() {\n    var pending = [],\n        value, deferred;\n\n    deferred = {\n\n      resolve: function(val) {\n        if (pending) {\n          var callbacks = pending;\n          pending = undefined;\n          value = ref(val);\n\n          if (callbacks.length) {\n            nextTick(function() {\n              var callback;\n              for (var i = 0, ii = callbacks.length; i < ii; i++) {\n                callback = callbacks[i];\n                value.then(callback[0], callback[1], callback[2]);\n              }\n            });\n          }\n        }\n      },\n\n\n      reject: function(reason) {\n        deferred.resolve(createInternalRejectedPromise(reason));\n      },\n\n\n      notify: function(progress) {\n        if (pending) {\n          var callbacks = pending;\n\n          if (pending.length) {\n            nextTick(function() {\n              var callback;\n              for (var i = 0, ii = callbacks.length; i < ii; i++) {\n                callback = callbacks[i];\n                callback[2](progress);\n              }\n            });\n          }\n        }\n      },\n\n\n      promise: {\n        then: function(callback, errback, progressback) {\n          var result = defer();\n\n          var wrappedCallback = function(value) {\n            try {\n              result.resolve((isFunction(callback) ? callback : defaultCallback)(value));\n            } catch(e) {\n              result.reject(e);\n              exceptionHandler(e);\n            }\n          };\n\n          var wrappedErrback = function(reason) {\n            try {\n              result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));\n            } catch(e) {\n              result.reject(e);\n              exceptionHandler(e);\n            }\n          };\n\n          var wrappedProgressback = function(progress) {\n            try {\n              result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress));\n            } catch(e) {\n              exceptionHandler(e);\n            }\n          };\n\n          if (pending) {\n            pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]);\n          } else {\n            value.then(wrappedCallback, wrappedErrback, wrappedProgressback);\n          }\n\n          return result.promise;\n        },\n\n        \"catch\": function(callback) {\n          return this.then(null, callback);\n        },\n\n        \"finally\": function(callback) {\n\n          function makePromise(value, resolved) {\n            var result = defer();\n            if (resolved) {\n              result.resolve(value);\n            } else {\n              result.reject(value);\n            }\n            return result.promise;\n          }\n\n          function handleCallback(value, isResolved) {\n            var callbackOutput = null;\n            try {\n              callbackOutput = (callback ||defaultCallback)();\n            } catch(e) {\n              return makePromise(e, false);\n            }\n            if (callbackOutput && isFunction(callbackOutput.then)) {\n              return callbackOutput.then(function() {\n                return makePromise(value, isResolved);\n              }, function(error) {\n                return makePromise(error, false);\n              });\n            } else {\n              return makePromise(value, isResolved);\n            }\n          }\n\n          return this.then(function(value) {\n            return handleCallback(value, true);\n          }, function(error) {\n            return handleCallback(error, false);\n          });\n        }\n      }\n    };\n\n    return deferred;\n  };\n\n\n  var ref = function(value) {\n    if (value && isFunction(value.then)) return value;\n    return {\n      then: function(callback) {\n        var result = defer();\n        nextTick(function() {\n          result.resolve(callback(value));\n        });\n        return result.promise;\n      }\n    };\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $q#reject\n   * @function\n   *\n   * @description\n   * Creates a promise that is resolved as rejected with the specified `reason`. This api should be\n   * used to forward rejection in a chain of promises. If you are dealing with the last promise in\n   * a promise chain, you don't need to worry about it.\n   *\n   * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of\n   * `reject` as the `throw` keyword in JavaScript. This also means that if you \"catch\" an error via\n   * a promise error callback and you want to forward the error to the promise derived from the\n   * current promise, you have to \"rethrow\" the error by returning a rejection constructed via\n   * `reject`.\n   *\n   * ```js\n   *   promiseB = promiseA.then(function(result) {\n   *     // success: do something and resolve promiseB\n   *     //          with the old or a new result\n   *     return result;\n   *   }, function(reason) {\n   *     // error: handle the error if possible and\n   *     //        resolve promiseB with newPromiseOrValue,\n   *     //        otherwise forward the rejection to promiseB\n   *     if (canHandle(reason)) {\n   *      // handle the error and recover\n   *      return newPromiseOrValue;\n   *     }\n   *     return $q.reject(reason);\n   *   });\n   * ```\n   *\n   * @param {*} reason Constant, message, exception or an object representing the rejection reason.\n   * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.\n   */\n  var reject = function(reason) {\n    var result = defer();\n    result.reject(reason);\n    return result.promise;\n  };\n\n  var createInternalRejectedPromise = function(reason) {\n    return {\n      then: function(callback, errback) {\n        var result = defer();\n        nextTick(function() {\n          try {\n            result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));\n          } catch(e) {\n            result.reject(e);\n            exceptionHandler(e);\n          }\n        });\n        return result.promise;\n      }\n    };\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $q#when\n   * @function\n   *\n   * @description\n   * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.\n   * This is useful when you are dealing with an object that might or might not be a promise, or if\n   * the promise comes from a source that can't be trusted.\n   *\n   * @param {*} value Value or a promise\n   * @returns {Promise} Returns a promise of the passed value or promise\n   */\n  var when = function(value, callback, errback, progressback) {\n    var result = defer(),\n        done;\n\n    var wrappedCallback = function(value) {\n      try {\n        return (isFunction(callback) ? callback : defaultCallback)(value);\n      } catch (e) {\n        exceptionHandler(e);\n        return reject(e);\n      }\n    };\n\n    var wrappedErrback = function(reason) {\n      try {\n        return (isFunction(errback) ? errback : defaultErrback)(reason);\n      } catch (e) {\n        exceptionHandler(e);\n        return reject(e);\n      }\n    };\n\n    var wrappedProgressback = function(progress) {\n      try {\n        return (isFunction(progressback) ? progressback : defaultCallback)(progress);\n      } catch (e) {\n        exceptionHandler(e);\n      }\n    };\n\n    nextTick(function() {\n      ref(value).then(function(value) {\n        if (done) return;\n        done = true;\n        result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback));\n      }, function(reason) {\n        if (done) return;\n        done = true;\n        result.resolve(wrappedErrback(reason));\n      }, function(progress) {\n        if (done) return;\n        result.notify(wrappedProgressback(progress));\n      });\n    });\n\n    return result.promise;\n  };\n\n\n  function defaultCallback(value) {\n    return value;\n  }\n\n\n  function defaultErrback(reason) {\n    return reject(reason);\n  }\n\n\n  /**\n   * @ngdoc method\n   * @name $q#all\n   * @function\n   *\n   * @description\n   * Combines multiple promises into a single promise that is resolved when all of the input\n   * promises are resolved.\n   *\n   * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.\n   * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,\n   *   each value corresponding to the promise at the same index/key in the `promises` array/hash.\n   *   If any of the promises is resolved with a rejection, this resulting promise will be rejected\n   *   with the same rejection value.\n   */\n  function all(promises) {\n    var deferred = defer(),\n        counter = 0,\n        results = isArray(promises) ? [] : {};\n\n    forEach(promises, function(promise, key) {\n      counter++;\n      ref(promise).then(function(value) {\n        if (results.hasOwnProperty(key)) return;\n        results[key] = value;\n        if (!(--counter)) deferred.resolve(results);\n      }, function(reason) {\n        if (results.hasOwnProperty(key)) return;\n        deferred.reject(reason);\n      });\n    });\n\n    if (counter === 0) {\n      deferred.resolve(results);\n    }\n\n    return deferred.promise;\n  }\n\n  return {\n    defer: defer,\n    reject: reject,\n    when: when,\n    all: all\n  };\n}\n\nfunction $$RAFProvider(){ //rAF\n  this.$get = ['$window', '$timeout', function($window, $timeout) {\n    var requestAnimationFrame = $window.requestAnimationFrame ||\n                                $window.webkitRequestAnimationFrame ||\n                                $window.mozRequestAnimationFrame;\n\n    var cancelAnimationFrame = $window.cancelAnimationFrame ||\n                               $window.webkitCancelAnimationFrame ||\n                               $window.mozCancelAnimationFrame ||\n                               $window.webkitCancelRequestAnimationFrame;\n\n    var rafSupported = !!requestAnimationFrame;\n    var raf = rafSupported\n      ? function(fn) {\n          var id = requestAnimationFrame(fn);\n          return function() {\n            cancelAnimationFrame(id);\n          };\n        }\n      : function(fn) {\n          var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666\n          return function() {\n            $timeout.cancel(timer);\n          };\n        };\n\n    raf.supported = rafSupported;\n\n    return raf;\n  }];\n}\n\n/**\n * DESIGN NOTES\n *\n * The design decisions behind the scope are heavily favored for speed and memory consumption.\n *\n * The typical use of scope is to watch the expressions, which most of the time return the same\n * value as last time so we optimize the operation.\n *\n * Closures construction is expensive in terms of speed as well as memory:\n *   - No closures, instead use prototypical inheritance for API\n *   - Internal state needs to be stored on scope directly, which means that private state is\n *     exposed as $$____ properties\n *\n * Loop operations are optimized by using while(count--) { ... }\n *   - this means that in order to keep the same order of execution as addition we have to add\n *     items to the array at the beginning (shift) instead of at the end (push)\n *\n * Child scopes are created and removed often\n *   - Using an array would be slow since inserts in middle are expensive so we use linked list\n *\n * There are few watches then a lot of observers. This is why you don't want the observer to be\n * implemented in the same way as watch. Watch requires return of initialization function which\n * are expensive to construct.\n */\n\n\n/**\n * @ngdoc provider\n * @name $rootScopeProvider\n * @description\n *\n * Provider for the $rootScope service.\n */\n\n/**\n * @ngdoc method\n * @name $rootScopeProvider#digestTtl\n * @description\n *\n * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and\n * assuming that the model is unstable.\n *\n * The current default is 10 iterations.\n *\n * In complex applications it's possible that the dependencies between `$watch`s will result in\n * several digest iterations. However if an application needs more than the default 10 digest\n * iterations for its model to stabilize then you should investigate what is causing the model to\n * continuously change during the digest.\n *\n * Increasing the TTL could have performance implications, so you should not change it without\n * proper justification.\n *\n * @param {number} limit The number of digest iterations.\n */\n\n\n/**\n * @ngdoc service\n * @name $rootScope\n * @description\n *\n * Every application has a single root {@link ng.$rootScope.Scope scope}.\n * All other scopes are descendant scopes of the root scope. Scopes provide separation\n * between the model and the view, via a mechanism for watching the model for changes.\n * They also provide an event emission/broadcast and subscription facility. See the\n * {@link guide/scope developer guide on scopes}.\n */\nfunction $RootScopeProvider(){\n  var TTL = 10;\n  var $rootScopeMinErr = minErr('$rootScope');\n  var lastDirtyWatch = null;\n\n  this.digestTtl = function(value) {\n    if (arguments.length) {\n      TTL = value;\n    }\n    return TTL;\n  };\n\n  this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',\n      function( $injector,   $exceptionHandler,   $parse,   $browser) {\n\n    /**\n     * @ngdoc type\n     * @name $rootScope.Scope\n     *\n     * @description\n     * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the\n     * {@link auto.$injector $injector}. Child scopes are created using the\n     * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when\n     * compiled HTML template is executed.)\n     *\n     * Here is a simple scope snippet to show how you can interact with the scope.\n     * ```html\n     * <file src=\"./test/ng/rootScopeSpec.js\" tag=\"docs1\" />\n     * ```\n     *\n     * # Inheritance\n     * A scope can inherit from a parent scope, as in this example:\n     * ```js\n         var parent = $rootScope;\n         var child = parent.$new();\n\n         parent.salutation = \"Hello\";\n         child.name = \"World\";\n         expect(child.salutation).toEqual('Hello');\n\n         child.salutation = \"Welcome\";\n         expect(child.salutation).toEqual('Welcome');\n         expect(parent.salutation).toEqual('Hello');\n     * ```\n     *\n     *\n     * @param {Object.<string, function()>=} providers Map of service factory which need to be\n     *                                       provided for the current scope. Defaults to {@link ng}.\n     * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should\n     *                              append/override services provided by `providers`. This is handy\n     *                              when unit-testing and having the need to override a default\n     *                              service.\n     * @returns {Object} Newly created scope.\n     *\n     */\n    function Scope() {\n      this.$id = nextUid();\n      this.$$phase = this.$parent = this.$$watchers =\n                     this.$$nextSibling = this.$$prevSibling =\n                     this.$$childHead = this.$$childTail = null;\n      this['this'] = this.$root =  this;\n      this.$$destroyed = false;\n      this.$$asyncQueue = [];\n      this.$$postDigestQueue = [];\n      this.$$listeners = {};\n      this.$$listenerCount = {};\n      this.$$isolateBindings = {};\n    }\n\n    /**\n     * @ngdoc property\n     * @name $rootScope.Scope#$id\n     * @returns {number} Unique scope ID (monotonically increasing alphanumeric sequence) useful for\n     *   debugging.\n     */\n\n\n    Scope.prototype = {\n      constructor: Scope,\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$new\n       * @function\n       *\n       * @description\n       * Creates a new child {@link ng.$rootScope.Scope scope}.\n       *\n       * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and\n       * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the\n       * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.\n       *\n       * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is\n       * desired for the scope and its child scopes to be permanently detached from the parent and\n       * thus stop participating in model change detection and listener notification by invoking.\n       *\n       * @param {boolean} isolate If true, then the scope does not prototypically inherit from the\n       *         parent scope. The scope is isolated, as it can not see parent scope properties.\n       *         When creating widgets, it is useful for the widget to not accidentally read parent\n       *         state.\n       *\n       * @returns {Object} The newly created child scope.\n       *\n       */\n      $new: function(isolate) {\n        var ChildScope,\n            child;\n\n        if (isolate) {\n          child = new Scope();\n          child.$root = this.$root;\n          // ensure that there is just one async queue per $rootScope and its children\n          child.$$asyncQueue = this.$$asyncQueue;\n          child.$$postDigestQueue = this.$$postDigestQueue;\n        } else {\n          ChildScope = function() {}; // should be anonymous; This is so that when the minifier munges\n            // the name it does not become random set of chars. This will then show up as class\n            // name in the web inspector.\n          ChildScope.prototype = this;\n          child = new ChildScope();\n          child.$id = nextUid();\n        }\n        child['this'] = child;\n        child.$$listeners = {};\n        child.$$listenerCount = {};\n        child.$parent = this;\n        child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null;\n        child.$$prevSibling = this.$$childTail;\n        if (this.$$childHead) {\n          this.$$childTail.$$nextSibling = child;\n          this.$$childTail = child;\n        } else {\n          this.$$childHead = this.$$childTail = child;\n        }\n        return child;\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watch\n       * @function\n       *\n       * @description\n       * Registers a `listener` callback to be executed whenever the `watchExpression` changes.\n       *\n       * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest\n       *   $digest()} and should return the value that will be watched. (Since\n       *   {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the\n       *   `watchExpression` can execute multiple times per\n       *   {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)\n       * - The `listener` is called only when the value from the current `watchExpression` and the\n       *   previous call to `watchExpression` are not equal (with the exception of the initial run,\n       *   see below). The inequality is determined according to\n       *   {@link angular.equals} function. To save the value of the object for later comparison,\n       *   the {@link angular.copy} function is used. It also means that watching complex options\n       *   will have adverse memory and performance implications.\n       * - The watch `listener` may change the model, which may trigger other `listener`s to fire.\n       *   This is achieved by rerunning the watchers until no changes are detected. The rerun\n       *   iteration limit is 10 to prevent an infinite loop deadlock.\n       *\n       *\n       * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,\n       * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`\n       * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a\n       * change is detected, be prepared for multiple calls to your listener.)\n       *\n       * After a watcher is registered with the scope, the `listener` fn is called asynchronously\n       * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the\n       * watcher. In rare cases, this is undesirable because the listener is called when the result\n       * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you\n       * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the\n       * listener was called due to initialization.\n       *\n       * The example below contains an illustration of using a function as your $watch listener\n       *\n       *\n       * # Example\n       * ```js\n           // let's assume that scope was dependency injected as the $rootScope\n           var scope = $rootScope;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // no variable change\n           expect(scope.counter).toEqual(0);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(1);\n\n\n\n           // Using a listener function\n           var food;\n           scope.foodCounter = 0;\n           expect(scope.foodCounter).toEqual(0);\n           scope.$watch(\n             // This is the listener function\n             function() { return food; },\n             // This is the change handler\n             function(newValue, oldValue) {\n               if ( newValue !== oldValue ) {\n                 // Only increment the counter if the value changed\n                 scope.foodCounter = scope.foodCounter + 1;\n               }\n             }\n           );\n           // No digest has been run so the counter will be zero\n           expect(scope.foodCounter).toEqual(0);\n\n           // Run the digest but since food has not changed count will still be zero\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(0);\n\n           // Update food and run digest.  Now the counter will increment\n           food = 'cheeseburger';\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(1);\n\n       * ```\n       *\n       *\n       *\n       * @param {(function()|string)} watchExpression Expression that is evaluated on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers\n       *    a call to the `listener`.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(scope)`: called with current `scope` as a parameter.\n       * @param {(function()|string)=} listener Callback called whenever the return value of\n       *   the `watchExpression` changes.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(newValue, oldValue, scope)`: called with current and previous values as\n       *      parameters.\n       *\n       * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of\n       *     comparing for reference equality.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $watch: function(watchExp, listener, objectEquality) {\n        var scope = this,\n            get = compileToFn(watchExp, 'watch'),\n            array = scope.$$watchers,\n            watcher = {\n              fn: listener,\n              last: initWatchVal,\n              get: get,\n              exp: watchExp,\n              eq: !!objectEquality\n            };\n\n        lastDirtyWatch = null;\n\n        // in the case user pass string, we need to compile it, do we really need this ?\n        if (!isFunction(listener)) {\n          var listenFn = compileToFn(listener || noop, 'listener');\n          watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);};\n        }\n\n        if (typeof watchExp == 'string' && get.constant) {\n          var originalFn = watcher.fn;\n          watcher.fn = function(newVal, oldVal, scope) {\n            originalFn.call(this, newVal, oldVal, scope);\n            arrayRemove(array, watcher);\n          };\n        }\n\n        if (!array) {\n          array = scope.$$watchers = [];\n        }\n        // we use unshift since we use a while loop in $digest for speed.\n        // the while loop reads in reverse order.\n        array.unshift(watcher);\n\n        return function() {\n          arrayRemove(array, watcher);\n          lastDirtyWatch = null;\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watchCollection\n       * @function\n       *\n       * @description\n       * Shallow watches the properties of an object and fires whenever any of the properties change\n       * (for arrays, this implies watching the array items; for object maps, this implies watching\n       * the properties). If a change is detected, the `listener` callback is fired.\n       *\n       * - The `obj` collection is observed via standard $watch operation and is examined on every\n       *   call to $digest() to see if any items have been added, removed, or moved.\n       * - The `listener` is called whenever anything within the `obj` has changed. Examples include\n       *   adding, removing, and moving items belonging to an object or array.\n       *\n       *\n       * # Example\n       * ```js\n          $scope.names = ['igor', 'matias', 'misko', 'james'];\n          $scope.dataCount = 4;\n\n          $scope.$watchCollection('names', function(newNames, oldNames) {\n            $scope.dataCount = newNames.length;\n          });\n\n          expect($scope.dataCount).toEqual(4);\n          $scope.$digest();\n\n          //still at 4 ... no changes\n          expect($scope.dataCount).toEqual(4);\n\n          $scope.names.pop();\n          $scope.$digest();\n\n          //now there's been a change\n          expect($scope.dataCount).toEqual(3);\n       * ```\n       *\n       *\n       * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The\n       *    expression value should evaluate to an object or an array which is observed on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the\n       *    collection will trigger a call to the `listener`.\n       *\n       * @param {function(newCollection, oldCollection, scope)} listener a callback function called\n       *    when a change is detected.\n       *    - The `newCollection` object is the newly modified data obtained from the `obj` expression\n       *    - The `oldCollection` object is a copy of the former collection data.\n       *      Due to performance considerations, the`oldCollection` value is computed only if the\n       *      `listener` function declares two or more arguments.\n       *    - The `scope` argument refers to the current scope.\n       *\n       * @returns {function()} Returns a de-registration function for this listener. When the\n       *    de-registration function is executed, the internal watch operation is terminated.\n       */\n      $watchCollection: function(obj, listener) {\n        var self = this;\n        // the current value, updated on each dirty-check run\n        var newValue;\n        // a shallow copy of the newValue from the last dirty-check run,\n        // updated to match newValue during dirty-check run\n        var oldValue;\n        // a shallow copy of the newValue from when the last change happened\n        var veryOldValue;\n        // only track veryOldValue if the listener is asking for it\n        var trackVeryOldValue = (listener.length > 1);\n        var changeDetected = 0;\n        var objGetter = $parse(obj);\n        var internalArray = [];\n        var internalObject = {};\n        var initRun = true;\n        var oldLength = 0;\n\n        function $watchCollectionWatch() {\n          newValue = objGetter(self);\n          var newLength, key;\n\n          if (!isObject(newValue)) { // if primitive\n            if (oldValue !== newValue) {\n              oldValue = newValue;\n              changeDetected++;\n            }\n          } else if (isArrayLike(newValue)) {\n            if (oldValue !== internalArray) {\n              // we are transitioning from something which was not an array into array.\n              oldValue = internalArray;\n              oldLength = oldValue.length = 0;\n              changeDetected++;\n            }\n\n            newLength = newValue.length;\n\n            if (oldLength !== newLength) {\n              // if lengths do not match we need to trigger change notification\n              changeDetected++;\n              oldValue.length = oldLength = newLength;\n            }\n            // copy the items to oldValue and look for changes.\n            for (var i = 0; i < newLength; i++) {\n              var bothNaN = (oldValue[i] !== oldValue[i]) &&\n                  (newValue[i] !== newValue[i]);\n              if (!bothNaN && (oldValue[i] !== newValue[i])) {\n                changeDetected++;\n                oldValue[i] = newValue[i];\n              }\n            }\n          } else {\n            if (oldValue !== internalObject) {\n              // we are transitioning from something which was not an object into object.\n              oldValue = internalObject = {};\n              oldLength = 0;\n              changeDetected++;\n            }\n            // copy the items to oldValue and look for changes.\n            newLength = 0;\n            for (key in newValue) {\n              if (newValue.hasOwnProperty(key)) {\n                newLength++;\n                if (oldValue.hasOwnProperty(key)) {\n                  if (oldValue[key] !== newValue[key]) {\n                    changeDetected++;\n                    oldValue[key] = newValue[key];\n                  }\n                } else {\n                  oldLength++;\n                  oldValue[key] = newValue[key];\n                  changeDetected++;\n                }\n              }\n            }\n            if (oldLength > newLength) {\n              // we used to have more keys, need to find them and destroy them.\n              changeDetected++;\n              for(key in oldValue) {\n                if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) {\n                  oldLength--;\n                  delete oldValue[key];\n                }\n              }\n            }\n          }\n          return changeDetected;\n        }\n\n        function $watchCollectionAction() {\n          if (initRun) {\n            initRun = false;\n            listener(newValue, newValue, self);\n          } else {\n            listener(newValue, veryOldValue, self);\n          }\n\n          // make a copy for the next time a collection is changed\n          if (trackVeryOldValue) {\n            if (!isObject(newValue)) {\n              //primitive\n              veryOldValue = newValue;\n            } else if (isArrayLike(newValue)) {\n              veryOldValue = new Array(newValue.length);\n              for (var i = 0; i < newValue.length; i++) {\n                veryOldValue[i] = newValue[i];\n              }\n            } else { // if object\n              veryOldValue = {};\n              for (var key in newValue) {\n                if (hasOwnProperty.call(newValue, key)) {\n                  veryOldValue[key] = newValue[key];\n                }\n              }\n            }\n          }\n        }\n\n        return this.$watch($watchCollectionWatch, $watchCollectionAction);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$digest\n       * @function\n       *\n       * @description\n       * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and\n       * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change\n       * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}\n       * until no more listeners are firing. This means that it is possible to get into an infinite\n       * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of\n       * iterations exceeds 10.\n       *\n       * Usually, you don't call `$digest()` directly in\n       * {@link ng.directive:ngController controllers} or in\n       * {@link ng.$compileProvider#directive directives}.\n       * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within\n       * a {@link ng.$compileProvider#directive directives}), which will force a `$digest()`.\n       *\n       * If you want to be notified whenever `$digest()` is called,\n       * you can register a `watchExpression` function with\n       * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.\n       *\n       * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.\n       *\n       * # Example\n       * ```js\n           var scope = ...;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // no variable change\n           expect(scope.counter).toEqual(0);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(1);\n       * ```\n       *\n       */\n      $digest: function() {\n        var watch, value, last,\n            watchers,\n            asyncQueue = this.$$asyncQueue,\n            postDigestQueue = this.$$postDigestQueue,\n            length,\n            dirty, ttl = TTL,\n            next, current, target = this,\n            watchLog = [],\n            logIdx, logMsg, asyncTask;\n\n        beginPhase('$digest');\n\n        lastDirtyWatch = null;\n\n        do { // \"while dirty\" loop\n          dirty = false;\n          current = target;\n\n          while(asyncQueue.length) {\n            try {\n              asyncTask = asyncQueue.shift();\n              asyncTask.scope.$eval(asyncTask.expression);\n            } catch (e) {\n              clearPhase();\n              $exceptionHandler(e);\n            }\n            lastDirtyWatch = null;\n          }\n\n          traverseScopesLoop:\n          do { // \"traverse the scopes\" loop\n            if ((watchers = current.$$watchers)) {\n              // process our watches\n              length = watchers.length;\n              while (length--) {\n                try {\n                  watch = watchers[length];\n                  // Most common watches are on primitives, in which case we can short\n                  // circuit it with === operator, only when === fails do we use .equals\n                  if (watch) {\n                    if ((value = watch.get(current)) !== (last = watch.last) &&\n                        !(watch.eq\n                            ? equals(value, last)\n                            : (typeof value == 'number' && typeof last == 'number'\n                               && isNaN(value) && isNaN(last)))) {\n                      dirty = true;\n                      lastDirtyWatch = watch;\n                      watch.last = watch.eq ? copy(value) : value;\n                      watch.fn(value, ((last === initWatchVal) ? value : last), current);\n                      if (ttl < 5) {\n                        logIdx = 4 - ttl;\n                        if (!watchLog[logIdx]) watchLog[logIdx] = [];\n                        logMsg = (isFunction(watch.exp))\n                            ? 'fn: ' + (watch.exp.name || watch.exp.toString())\n                            : watch.exp;\n                        logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last);\n                        watchLog[logIdx].push(logMsg);\n                      }\n                    } else if (watch === lastDirtyWatch) {\n                      // If the most recently dirty watcher is now clean, short circuit since the remaining watchers\n                      // have already been tested.\n                      dirty = false;\n                      break traverseScopesLoop;\n                    }\n                  }\n                } catch (e) {\n                  clearPhase();\n                  $exceptionHandler(e);\n                }\n              }\n            }\n\n            // Insanity Warning: scope depth-first traversal\n            // yes, this code is a bit crazy, but it works and we have tests to prove it!\n            // this piece should be kept in sync with the traversal in $broadcast\n            if (!(next = (current.$$childHead ||\n                (current !== target && current.$$nextSibling)))) {\n              while(current !== target && !(next = current.$$nextSibling)) {\n                current = current.$parent;\n              }\n            }\n          } while ((current = next));\n\n          // `break traverseScopesLoop;` takes us to here\n\n          if((dirty || asyncQueue.length) && !(ttl--)) {\n            clearPhase();\n            throw $rootScopeMinErr('infdig',\n                '{0} $digest() iterations reached. Aborting!\\n' +\n                'Watchers fired in the last 5 iterations: {1}',\n                TTL, toJson(watchLog));\n          }\n\n        } while (dirty || asyncQueue.length);\n\n        clearPhase();\n\n        while(postDigestQueue.length) {\n          try {\n            postDigestQueue.shift()();\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        }\n      },\n\n\n      /**\n       * @ngdoc event\n       * @name $rootScope.Scope#$destroy\n       * @eventType broadcast on scope being destroyed\n       *\n       * @description\n       * Broadcasted when a scope and its children are being destroyed.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$destroy\n       * @function\n       *\n       * @description\n       * Removes the current scope (and all of its children) from the parent scope. Removal implies\n       * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer\n       * propagate to the current scope and its children. Removal also implies that the current\n       * scope is eligible for garbage collection.\n       *\n       * The `$destroy()` is usually used by directives such as\n       * {@link ng.directive:ngRepeat ngRepeat} for managing the\n       * unrolling of the loop.\n       *\n       * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.\n       * Application code can register a `$destroy` event handler that will give it a chance to\n       * perform any necessary cleanup.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n      $destroy: function() {\n        // we can't destroy the root scope or a scope that has been already destroyed\n        if (this.$$destroyed) return;\n        var parent = this.$parent;\n\n        this.$broadcast('$destroy');\n        this.$$destroyed = true;\n        if (this === $rootScope) return;\n\n        forEach(this.$$listenerCount, bind(null, decrementListenerCount, this));\n\n        // sever all the references to parent scopes (after this cleanup, the current scope should\n        // not be retained by any of our references and should be eligible for garbage collection)\n        if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;\n        if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;\n        if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;\n        if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;\n\n\n        // All of the code below is bogus code that works around V8's memory leak via optimized code\n        // and inline caches.\n        //\n        // see:\n        // - https://code.google.com/p/v8/issues/detail?id=2073#c26\n        // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909\n        // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451\n\n        this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =\n            this.$$childTail = this.$root = null;\n\n        // don't reset these to null in case some async task tries to register a listener/watch/task\n        this.$$listeners = {};\n        this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = [];\n\n        // prevent NPEs since these methods have references to properties we nulled out\n        this.$destroy = this.$digest = this.$apply = noop;\n        this.$on = this.$watch = function() { return noop; };\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$eval\n       * @function\n       *\n       * @description\n       * Executes the `expression` on the current scope and returns the result. Any exceptions in\n       * the expression are propagated (uncaught). This is useful when evaluating Angular\n       * expressions.\n       *\n       * # Example\n       * ```js\n           var scope = ng.$rootScope.Scope();\n           scope.a = 1;\n           scope.b = 2;\n\n           expect(scope.$eval('a+b')).toEqual(3);\n           expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);\n       * ```\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in  {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       * @param {(object)=} locals Local variables object, useful for overriding values in scope.\n       * @returns {*} The result of evaluating the expression.\n       */\n      $eval: function(expr, locals) {\n        return $parse(expr)(this, locals);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$evalAsync\n       * @function\n       *\n       * @description\n       * Executes the expression on the current scope at a later point in time.\n       *\n       * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only\n       * that:\n       *\n       *   - it will execute after the function that scheduled the evaluation (preferably before DOM\n       *     rendering).\n       *   - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after\n       *     `expression` execution.\n       *\n       * Any exceptions from the execution of the expression are forwarded to the\n       * {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle\n       * will be scheduled. However, it is encouraged to always call code that changes the model\n       * from within an `$apply` call. That includes code evaluated via `$evalAsync`.\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       */\n      $evalAsync: function(expr) {\n        // if we are outside of an $digest loop and this is the first time we are scheduling async\n        // task also schedule async auto-flush\n        if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) {\n          $browser.defer(function() {\n            if ($rootScope.$$asyncQueue.length) {\n              $rootScope.$digest();\n            }\n          });\n        }\n\n        this.$$asyncQueue.push({scope: this, expression: expr});\n      },\n\n      $$postDigest : function(fn) {\n        this.$$postDigestQueue.push(fn);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$apply\n       * @function\n       *\n       * @description\n       * `$apply()` is used to execute an expression in angular from outside of the angular\n       * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).\n       * Because we are calling into the angular framework we need to perform proper scope life\n       * cycle of {@link ng.$exceptionHandler exception handling},\n       * {@link ng.$rootScope.Scope#$digest executing watches}.\n       *\n       * ## Life cycle\n       *\n       * # Pseudo-Code of `$apply()`\n       * ```js\n           function $apply(expr) {\n             try {\n               return $eval(expr);\n             } catch (e) {\n               $exceptionHandler(e);\n             } finally {\n               $root.$digest();\n             }\n           }\n       * ```\n       *\n       *\n       * Scope's `$apply()` method transitions through the following stages:\n       *\n       * 1. The {@link guide/expression expression} is executed using the\n       *    {@link ng.$rootScope.Scope#$eval $eval()} method.\n       * 2. Any exceptions from the execution of the expression are forwarded to the\n       *    {@link ng.$exceptionHandler $exceptionHandler} service.\n       * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the\n       *    expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.\n       *\n       *\n       * @param {(string|function())=} exp An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with current `scope` parameter.\n       *\n       * @returns {*} The result of evaluating the expression.\n       */\n      $apply: function(expr) {\n        try {\n          beginPhase('$apply');\n          return this.$eval(expr);\n        } catch (e) {\n          $exceptionHandler(e);\n        } finally {\n          clearPhase();\n          try {\n            $rootScope.$digest();\n          } catch (e) {\n            $exceptionHandler(e);\n            throw e;\n          }\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$on\n       * @function\n       *\n       * @description\n       * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for\n       * discussion of event life cycle.\n       *\n       * The event listener function format is: `function(event, args...)`. The `event` object\n       * passed into the listener has the following attributes:\n       *\n       *   - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or\n       *     `$broadcast`-ed.\n       *   - `currentScope` - `{Scope}`: the current scope which is handling the event.\n       *   - `name` - `{string}`: name of the event.\n       *   - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel\n       *     further event propagation (available only for events that were `$emit`-ed).\n       *   - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag\n       *     to true.\n       *   - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.\n       *\n       * @param {string} name Event name to listen on.\n       * @param {function(event, ...args)} listener Function to call when the event is emitted.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $on: function(name, listener) {\n        var namedListeners = this.$$listeners[name];\n        if (!namedListeners) {\n          this.$$listeners[name] = namedListeners = [];\n        }\n        namedListeners.push(listener);\n\n        var current = this;\n        do {\n          if (!current.$$listenerCount[name]) {\n            current.$$listenerCount[name] = 0;\n          }\n          current.$$listenerCount[name]++;\n        } while ((current = current.$parent));\n\n        var self = this;\n        return function() {\n          namedListeners[indexOf(namedListeners, listener)] = null;\n          decrementListenerCount(self, 1, name);\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$emit\n       * @function\n       *\n       * @description\n       * Dispatches an event `name` upwards through the scope hierarchy notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$emit` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event traverses upwards toward the root scope and calls all\n       * registered listeners along the way. The event will stop propagating if one of the listeners\n       * cancels it.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to emit.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).\n       */\n      $emit: function(name, args) {\n        var empty = [],\n            namedListeners,\n            scope = this,\n            stopPropagation = false,\n            event = {\n              name: name,\n              targetScope: scope,\n              stopPropagation: function() {stopPropagation = true;},\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            i, length;\n\n        do {\n          namedListeners = scope.$$listeners[name] || empty;\n          event.currentScope = scope;\n          for (i=0, length=namedListeners.length; i<length; i++) {\n\n            // if listeners were deregistered, defragment the array\n            if (!namedListeners[i]) {\n              namedListeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n            try {\n              //allow all listeners attached to the current scope to run\n              namedListeners[i].apply(null, listenerArgs);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n          //if any listener on the current scope stops propagation, prevent bubbling\n          if (stopPropagation) return event;\n          //traverse upwards\n          scope = scope.$parent;\n        } while (scope);\n\n        return event;\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$broadcast\n       * @function\n       *\n       * @description\n       * Dispatches an event `name` downwards to all child scopes (and their children) notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$broadcast` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event propagates to all direct and indirect scopes of the current\n       * scope and calls all registered listeners along the way. The event cannot be canceled.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to broadcast.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}\n       */\n      $broadcast: function(name, args) {\n        var target = this,\n            current = target,\n            next = target,\n            event = {\n              name: name,\n              targetScope: target,\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            listeners, i, length;\n\n        //down while you can, then up and next sibling or up and next sibling until back at root\n        while ((current = next)) {\n          event.currentScope = current;\n          listeners = current.$$listeners[name] || [];\n          for (i=0, length = listeners.length; i<length; i++) {\n            // if listeners were deregistered, defragment the array\n            if (!listeners[i]) {\n              listeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n\n            try {\n              listeners[i].apply(null, listenerArgs);\n            } catch(e) {\n              $exceptionHandler(e);\n            }\n          }\n\n          // Insanity Warning: scope depth-first traversal\n          // yes, this code is a bit crazy, but it works and we have tests to prove it!\n          // this piece should be kept in sync with the traversal in $digest\n          // (though it differs due to having the extra check for $$listenerCount)\n          if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||\n              (current !== target && current.$$nextSibling)))) {\n            while(current !== target && !(next = current.$$nextSibling)) {\n              current = current.$parent;\n            }\n          }\n        }\n\n        return event;\n      }\n    };\n\n    var $rootScope = new Scope();\n\n    return $rootScope;\n\n\n    function beginPhase(phase) {\n      if ($rootScope.$$phase) {\n        throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);\n      }\n\n      $rootScope.$$phase = phase;\n    }\n\n    function clearPhase() {\n      $rootScope.$$phase = null;\n    }\n\n    function compileToFn(exp, name) {\n      var fn = $parse(exp);\n      assertArgFn(fn, name);\n      return fn;\n    }\n\n    function decrementListenerCount(current, count, name) {\n      do {\n        current.$$listenerCount[name] -= count;\n\n        if (current.$$listenerCount[name] === 0) {\n          delete current.$$listenerCount[name];\n        }\n      } while ((current = current.$parent));\n    }\n\n    /**\n     * function used as an initial value for watchers.\n     * because it's unique we can easily tell it apart from other values\n     */\n    function initWatchVal() {}\n  }];\n}\n\n/**\n * @description\n * Private service to sanitize uris for links and images. Used by $compile and $sanitize.\n */\nfunction $$SanitizeUriProvider() {\n  var aHrefSanitizationWhitelist = /^\\s*(https?|ftp|mailto|tel|file):/,\n    imgSrcSanitizationWhitelist = /^\\s*(https?|ftp|file):|data:image\\//;\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      aHrefSanitizationWhitelist = regexp;\n      return this;\n    }\n    return aHrefSanitizationWhitelist;\n  };\n\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      imgSrcSanitizationWhitelist = regexp;\n      return this;\n    }\n    return imgSrcSanitizationWhitelist;\n  };\n\n  this.$get = function() {\n    return function sanitizeUri(uri, isImage) {\n      var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;\n      var normalizedVal;\n      // NOTE: urlResolve() doesn't support IE < 8 so we don't sanitize for that case.\n      if (!msie || msie >= 8 ) {\n        normalizedVal = urlResolve(uri).href;\n        if (normalizedVal !== '' && !normalizedVal.match(regex)) {\n          return 'unsafe:'+normalizedVal;\n        }\n      }\n      return uri;\n    };\n  };\n}\n\nvar $sceMinErr = minErr('$sce');\n\nvar SCE_CONTEXTS = {\n  HTML: 'html',\n  CSS: 'css',\n  URL: 'url',\n  // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a\n  // url.  (e.g. ng-include, script src, templateUrl)\n  RESOURCE_URL: 'resourceUrl',\n  JS: 'js'\n};\n\n// Helper functions follow.\n\n// Copied from:\n// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962\n// Prereq: s is a string.\nfunction escapeForRegexp(s) {\n  return s.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g, '\\\\$1').\n           replace(/\\x08/g, '\\\\x08');\n}\n\n\nfunction adjustMatcher(matcher) {\n  if (matcher === 'self') {\n    return matcher;\n  } else if (isString(matcher)) {\n    // Strings match exactly except for 2 wildcards - '*' and '**'.\n    // '*' matches any character except those from the set ':/.?&'.\n    // '**' matches any character (like .* in a RegExp).\n    // More than 2 *'s raises an error as it's ill defined.\n    if (matcher.indexOf('***') > -1) {\n      throw $sceMinErr('iwcard',\n          'Illegal sequence *** in string matcher.  String: {0}', matcher);\n    }\n    matcher = escapeForRegexp(matcher).\n                  replace('\\\\*\\\\*', '.*').\n                  replace('\\\\*', '[^:/.?&;]*');\n    return new RegExp('^' + matcher + '$');\n  } else if (isRegExp(matcher)) {\n    // The only other type of matcher allowed is a Regexp.\n    // Match entire URL / disallow partial matches.\n    // Flags are reset (i.e. no global, ignoreCase or multiline)\n    return new RegExp('^' + matcher.source + '$');\n  } else {\n    throw $sceMinErr('imatcher',\n        'Matchers may only be \"self\", string patterns or RegExp objects');\n  }\n}\n\n\nfunction adjustMatchers(matchers) {\n  var adjustedMatchers = [];\n  if (isDefined(matchers)) {\n    forEach(matchers, function(matcher) {\n      adjustedMatchers.push(adjustMatcher(matcher));\n    });\n  }\n  return adjustedMatchers;\n}\n\n\n/**\n * @ngdoc service\n * @name $sceDelegate\n * @function\n *\n * @description\n *\n * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict\n * Contextual Escaping (SCE)} services to AngularJS.\n *\n * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of\n * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS.  This is\n * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to\n * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things\n * work because `$sce` delegates to `$sceDelegate` for these operations.\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.\n *\n * The default instance of `$sceDelegate` should work out of the box with little pain.  While you\n * can override it completely to change the behavior of `$sce`, the common case would\n * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting\n * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as\n * templates.  Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist\n * $sceDelegateProvider.resourceUrlWhitelist} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n */\n\n/**\n * @ngdoc provider\n * @name $sceDelegateProvider\n * @description\n *\n * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate\n * $sceDelegate} service.  This allows one to get/set the whitelists and blacklists used to ensure\n * that the URLs used for sourcing Angular templates are safe.  Refer {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and\n * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n *\n * For the general details about this service in Angular, read the main page for {@link ng.$sce\n * Strict Contextual Escaping (SCE)}.\n *\n * **Example**:  Consider the following case. <a name=\"example\"></a>\n *\n * - your app is hosted at url `http://myapp.example.com/`\n * - but some of your templates are hosted on other domains you control such as\n *   `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.\n * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.\n *\n * Here is what a secure configuration for this scenario might look like:\n *\n * <pre class=\"prettyprint\">\n *    angular.module('myApp', []).config(function($sceDelegateProvider) {\n *      $sceDelegateProvider.resourceUrlWhitelist([\n *        // Allow same origin resource loads.\n *        'self',\n *        // Allow loading from our assets domain.  Notice the difference between * and **.\n *        'http://srv*.assets.example.com/**']);\n *\n *      // The blacklist overrides the whitelist so the open redirect here is blocked.\n *      $sceDelegateProvider.resourceUrlBlacklist([\n *        'http://myapp.example.com/clickThru**']);\n *      });\n * </pre>\n */\n\nfunction $SceDelegateProvider() {\n  this.SCE_CONTEXTS = SCE_CONTEXTS;\n\n  // Resource URLs can also be trusted by policy.\n  var resourceUrlWhitelist = ['self'],\n      resourceUrlBlacklist = [];\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlWhitelist\n   * @function\n   *\n   * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     Note: **an empty whitelist array will block all URLs**!\n   *\n   * @return {Array} the currently set whitelist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is `['self']` allowing only\n   * same origin resource requests.\n   *\n   * @description\n   * Sets/Gets the whitelist of trusted resource URLs.\n   */\n  this.resourceUrlWhitelist = function (value) {\n    if (arguments.length) {\n      resourceUrlWhitelist = adjustMatchers(value);\n    }\n    return resourceUrlWhitelist;\n  };\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlBlacklist\n   * @function\n   *\n   * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     The typical usage for the blacklist is to **block\n   *     [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as\n   *     these would otherwise be trusted but actually return content from the redirected domain.\n   *\n   *     Finally, **the blacklist overrides the whitelist** and has the final say.\n   *\n   * @return {Array} the currently set blacklist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there\n   * is no blacklist.)\n   *\n   * @description\n   * Sets/Gets the blacklist of trusted resource URLs.\n   */\n\n  this.resourceUrlBlacklist = function (value) {\n    if (arguments.length) {\n      resourceUrlBlacklist = adjustMatchers(value);\n    }\n    return resourceUrlBlacklist;\n  };\n\n  this.$get = ['$injector', function($injector) {\n\n    var htmlSanitizer = function htmlSanitizer(html) {\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    };\n\n    if ($injector.has('$sanitize')) {\n      htmlSanitizer = $injector.get('$sanitize');\n    }\n\n\n    function matchUrl(matcher, parsedUrl) {\n      if (matcher === 'self') {\n        return urlIsSameOrigin(parsedUrl);\n      } else {\n        // definitely a regex.  See adjustMatchers()\n        return !!matcher.exec(parsedUrl.href);\n      }\n    }\n\n    function isResourceUrlAllowedByPolicy(url) {\n      var parsedUrl = urlResolve(url.toString());\n      var i, n, allowed = false;\n      // Ensure that at least one item from the whitelist allows this url.\n      for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {\n        if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {\n          allowed = true;\n          break;\n        }\n      }\n      if (allowed) {\n        // Ensure that no item from the blacklist blocked this url.\n        for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {\n          if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {\n            allowed = false;\n            break;\n          }\n        }\n      }\n      return allowed;\n    }\n\n    function generateHolderType(Base) {\n      var holderType = function TrustedValueHolderType(trustedValue) {\n        this.$$unwrapTrustedValue = function() {\n          return trustedValue;\n        };\n      };\n      if (Base) {\n        holderType.prototype = new Base();\n      }\n      holderType.prototype.valueOf = function sceValueOf() {\n        return this.$$unwrapTrustedValue();\n      };\n      holderType.prototype.toString = function sceToString() {\n        return this.$$unwrapTrustedValue().toString();\n      };\n      return holderType;\n    }\n\n    var trustedValueHolderBase = generateHolderType(),\n        byType = {};\n\n    byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#trustAs\n     *\n     * @description\n     * Returns an object that is trusted by angular for use in specified strict\n     * contextual escaping contexts (such as ng-bind-html, ng-include, any src\n     * attribute interpolation, any dom event binding attribute interpolation\n     * such as for onclick,  etc.) that uses the provided value.\n     * See {@link ng.$sce $sce} for enabling strict contextual escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resourceUrl, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n    function trustAs(type, trustedValue) {\n      var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (!Constructor) {\n        throw $sceMinErr('icontext',\n            'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',\n            type, trustedValue);\n      }\n      if (trustedValue === null || trustedValue === undefined || trustedValue === '') {\n        return trustedValue;\n      }\n      // All the current contexts in SCE_CONTEXTS happen to be strings.  In order to avoid trusting\n      // mutable objects, we ensure here that the value passed in is actually a string.\n      if (typeof trustedValue !== 'string') {\n        throw $sceMinErr('itype',\n            'Attempted to trust a non-string value in a content requiring a string: Context: {0}',\n            type);\n      }\n      return new Constructor(trustedValue);\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#valueOf\n     *\n     * @description\n     * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs\n     * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.\n     *\n     * If the passed parameter is not a value that had been returned by {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.\n     *\n     * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}\n     *      call or anything else.\n     * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if `value` is the result of such a call.  Otherwise, returns\n     *     `value` unchanged.\n     */\n    function valueOf(maybeTrusted) {\n      if (maybeTrusted instanceof trustedValueHolderBase) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      } else {\n        return maybeTrusted;\n      }\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#getTrusted\n     *\n     * @description\n     * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and\n     * returns the originally supplied value if the queried context type is a supertype of the\n     * created type.  If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} call.\n     * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if valid in this context.  Otherwise, throws an exception.\n     */\n    function getTrusted(type, maybeTrusted) {\n      if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') {\n        return maybeTrusted;\n      }\n      var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (constructor && maybeTrusted instanceof constructor) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      }\n      // If we get here, then we may only take one of two actions.\n      // 1. sanitize the value for the requested type, or\n      // 2. throw an exception.\n      if (type === SCE_CONTEXTS.RESOURCE_URL) {\n        if (isResourceUrlAllowedByPolicy(maybeTrusted)) {\n          return maybeTrusted;\n        } else {\n          throw $sceMinErr('insecurl',\n              'Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}',\n              maybeTrusted.toString());\n        }\n      } else if (type === SCE_CONTEXTS.HTML) {\n        return htmlSanitizer(maybeTrusted);\n      }\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    }\n\n    return { trustAs: trustAs,\n             getTrusted: getTrusted,\n             valueOf: valueOf };\n  }];\n}\n\n\n/**\n * @ngdoc provider\n * @name $sceProvider\n * @description\n *\n * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.\n * -   enable/disable Strict Contextual Escaping (SCE) in a module\n * -   override the default implementation with a custom delegate\n *\n * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.\n */\n\n/* jshint maxlen: false*/\n\n/**\n * @ngdoc service\n * @name $sce\n * @function\n *\n * @description\n *\n * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.\n *\n * # Strict Contextual Escaping\n *\n * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain\n * contexts to result in a value that is marked as safe to use for that context.  One example of\n * such a context is binding arbitrary html controlled by the user via `ng-bind-html`.  We refer\n * to these contexts as privileged or SCE contexts.\n *\n * As of version 1.2, Angular ships with SCE enabled by default.\n *\n * Note:  When enabled (the default), IE8 in quirks mode is not supported.  In this mode, IE8 allows\n * one to execute arbitrary javascript by the use of the expression() syntax.  Refer\n * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.\n * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`\n * to the top of your HTML document.\n *\n * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for\n * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.\n *\n * Here's an example of a binding in a privileged context:\n *\n * <pre class=\"prettyprint\">\n *     <input ng-model=\"userHtml\">\n *     <div ng-bind-html=\"userHtml\">\n * </pre>\n *\n * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user.  With SCE\n * disabled, this application allows the user to render arbitrary HTML into the DIV.\n * In a more realistic example, one may be rendering user comments, blog articles, etc. via\n * bindings.  (HTML is just one example of a context where rendering user controlled input creates\n * security vulnerabilities.)\n *\n * For the case of HTML, you might use a library, either on the client side, or on the server side,\n * to sanitize unsafe HTML before binding to the value and rendering it in the document.\n *\n * How would you ensure that every place that used these types of bindings was bound to a value that\n * was sanitized by your library (or returned as safe for rendering by your server?)  How can you\n * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some\n * properties/fields and forgot to update the binding to the sanitized value?\n *\n * To be secure by default, you want to ensure that any such bindings are disallowed unless you can\n * determine that something explicitly says it's safe to use a value for binding in that\n * context.  You can then audit your code (a simple grep would do) to ensure that this is only done\n * for those values that you can easily tell are safe - because they were received from your server,\n * sanitized by your library, etc.  You can organize your codebase to help with this - perhaps\n * allowing only the files in a specific directory to do this.  Ensuring that the internal API\n * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.\n *\n * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}\n * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to\n * obtain values that will be accepted by SCE / privileged contexts.\n *\n *\n * ## How does it work?\n *\n * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted\n * $sce.getTrusted(context, value)} rather than to the value directly.  Directives use {@link\n * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the\n * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.\n *\n * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link\n * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}.  Here's the actual code (slightly\n * simplified):\n *\n * <pre class=\"prettyprint\">\n *   var ngBindHtmlDirective = ['$sce', function($sce) {\n *     return function(scope, element, attr) {\n *       scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {\n *         element.html(value || '');\n *       });\n *     };\n *   }];\n * </pre>\n *\n * ## Impact on loading templates\n *\n * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as\n * `templateUrl`'s specified by {@link guide/directive directives}.\n *\n * By default, Angular only loads templates from the same domain and protocol as the application\n * document.  This is done by calling {@link ng.$sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on the template URL.  To load templates from other domains and/or\n * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist\n * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.\n *\n * *Please note*:\n * The browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy apply in addition to this and may further restrict whether the template is successfully\n * loaded.  This means that without the right CORS policy, loading templates from a different domain\n * won't work on all browsers.  Also, loading templates from `file://` URL does not work on some\n * browsers.\n *\n * ## This feels like too much overhead for the developer?\n *\n * It's important to remember that SCE only applies to interpolation expressions.\n *\n * If your expressions are constant literals, they're automatically trusted and you don't need to\n * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.\n * `<div ng-bind-html=\"'<b>implicitly trusted</b>'\"></div>`) just works.\n *\n * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them\n * through {@link ng.$sce#getTrusted $sce.getTrusted}.  SCE doesn't play a role here.\n *\n * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load\n * templates in `ng-include` from your application's domain without having to even know about SCE.\n * It blocks loading templates from other domains or loading templates over http from an https\n * served document.  You can change these by setting your own custom {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.\n *\n * This significantly reduces the overhead.  It is far easier to pay the small overhead and have an\n * application that's secure and can be audited to verify that with much more ease than bolting\n * security onto an application later.\n *\n * <a name=\"contexts\"></a>\n * ## What trusted context types are supported?\n *\n * | Context             | Notes          |\n * |---------------------|----------------|\n * | `$sce.HTML`         | For HTML that's safe to source into the application.  The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. |\n * | `$sce.CSS`          | For CSS that's safe to source into the application.  Currently unused.  Feel free to use it in your own directives. |\n * | `$sce.URL`          | For URLs that are safe to follow as links.  Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |\n * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application.  Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)  <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |\n * | `$sce.JS`           | For JavaScript that is safe to execute in your application's context.  Currently unused.  Feel free to use it in your own directives. |\n *\n * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name=\"resourceUrlPatternItem\"></a>\n *\n *  Each element in these arrays must be one of the following:\n *\n *  - **'self'**\n *    - The special **string**, `'self'`, can be used to match against all URLs of the **same\n *      domain** as the application document using the **same protocol**.\n *  - **String** (except the special value `'self'`)\n *    - The string is matched against the full *normalized / absolute URL* of the resource\n *      being tested (substring matches are not good enough.)\n *    - There are exactly **two wildcard sequences** - `*` and `**`.  All other characters\n *      match themselves.\n *    - `*`: matches zero or more occurrences of any character other than one of the following 6\n *      characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'.  It's a useful wildcard for use\n *      in a whitelist.\n *    - `**`: matches zero or more occurrences of *any* character.  As such, it's not\n *      not appropriate to use in for a scheme, domain, etc. as it would match too much.  (e.g.\n *      http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might\n *      not have been the intention.)  It's usage at the very end of the path is ok.  (e.g.\n *      http://foo.example.com/templates/**).\n *  - **RegExp** (*see caveat below*)\n *    - *Caveat*:  While regular expressions are powerful and offer great flexibility,  their syntax\n *      (and all the inevitable escaping) makes them *harder to maintain*.  It's easy to\n *      accidentally introduce a bug when one updates a complex expression (imho, all regexes should\n *      have good test coverage.).  For instance, the use of `.` in the regex is correct only in a\n *      small number of cases.  A `.` character in the regex used when matching the scheme or a\n *      subdomain could be matched against a `:` or literal `.` that was likely not intended.   It\n *      is highly recommended to use the string patterns and only fall back to regular expressions\n *      if they as a last resort.\n *    - The regular expression must be an instance of RegExp (i.e. not a string.)  It is\n *      matched against the **entire** *normalized / absolute URL* of the resource being tested\n *      (even when the RegExp did not have the `^` and `$` codes.)  In addition, any flags\n *      present on the RegExp (such as multiline, global, ignoreCase) are ignored.\n *    - If you are generating your JavaScript from some other templating engine (not\n *      recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),\n *      remember to escape your regular expression (and be aware that you might need more than\n *      one level of escaping depending on your templating engine and the way you interpolated\n *      the value.)  Do make use of your platform's escaping mechanism as it might be good\n *      enough before coding your own.  e.g. Ruby has\n *      [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)\n *      and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).\n *      Javascript lacks a similar built in function for escaping.  Take a look at Google\n *      Closure library's [goog.string.regExpEscape(s)](\n *      http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.\n *\n * ## Show me an example using SCE.\n *\n * @example\n<example module=\"mySceApp\" deps=\"angular-sanitize.js\">\n<file name=\"index.html\">\n  <div ng-controller=\"myAppController as myCtrl\">\n    <i ng-bind-html=\"myCtrl.explicitlyTrustedHtml\" id=\"explicitlyTrustedHtml\"></i><br><br>\n    <b>User comments</b><br>\n    By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when\n    $sanitize is available.  If $sanitize isn't available, this results in an error instead of an\n    exploit.\n    <div class=\"well\">\n      <div ng-repeat=\"userComment in myCtrl.userComments\">\n        <b>{{userComment.name}}</b>:\n        <span ng-bind-html=\"userComment.htmlComment\" class=\"htmlComment\"></span>\n        <br>\n      </div>\n    </div>\n  </div>\n</file>\n\n<file name=\"script.js\">\n  var mySceApp = angular.module('mySceApp', ['ngSanitize']);\n\n  mySceApp.controller(\"myAppController\", function myAppController($http, $templateCache, $sce) {\n    var self = this;\n    $http.get(\"test_data.json\", {cache: $templateCache}).success(function(userComments) {\n      self.userComments = userComments;\n    });\n    self.explicitlyTrustedHtml = $sce.trustAsHtml(\n        '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n        'sanitization.&quot;\">Hover over this text.</span>');\n  });\n</file>\n\n<file name=\"test_data.json\">\n[\n  { \"name\": \"Alice\",\n    \"htmlComment\":\n        \"<span onmouseover='this.textContent=\\\"PWN3D!\\\"'>Is <i>anyone</i> reading this?</span>\"\n  },\n  { \"name\": \"Bob\",\n    \"htmlComment\": \"<i>Yes!</i>  Am I the only other one?\"\n  }\n]\n</file>\n\n<file name=\"protractor.js\" type=\"protractor\">\n  describe('SCE doc demo', function() {\n    it('should sanitize untrusted values', function() {\n      expect(element(by.css('.htmlComment')).getInnerHtml())\n          .toBe('<span>Is <i>anyone</i> reading this?</span>');\n    });\n\n    it('should NOT sanitize explicitly trusted values', function() {\n      expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(\n          '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n          'sanitization.&quot;\">Hover over this text.</span>');\n    });\n  });\n</file>\n</example>\n *\n *\n *\n * ## Can I disable SCE completely?\n *\n * Yes, you can.  However, this is strongly discouraged.  SCE gives you a lot of security benefits\n * for little coding overhead.  It will be much harder to take an SCE disabled application and\n * either secure it on your own or enable SCE at a later stage.  It might make sense to disable SCE\n * for cases where you have a lot of existing code that was written before SCE was introduced and\n * you're migrating them a module at a time.\n *\n * That said, here's how you can completely disable SCE:\n *\n * <pre class=\"prettyprint\">\n *   angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {\n *     // Completely disable SCE.  For demonstration purposes only!\n *     // Do not use in new projects.\n *     $sceProvider.enabled(false);\n *   });\n * </pre>\n *\n */\n/* jshint maxlen: 100 */\n\nfunction $SceProvider() {\n  var enabled = true;\n\n  /**\n   * @ngdoc method\n   * @name $sceProvider#enabled\n   * @function\n   *\n   * @param {boolean=} value If provided, then enables/disables SCE.\n   * @return {boolean} true if SCE is enabled, false otherwise.\n   *\n   * @description\n   * Enables/disables SCE and returns the current value.\n   */\n  this.enabled = function (value) {\n    if (arguments.length) {\n      enabled = !!value;\n    }\n    return enabled;\n  };\n\n\n  /* Design notes on the default implementation for SCE.\n   *\n   * The API contract for the SCE delegate\n   * -------------------------------------\n   * The SCE delegate object must provide the following 3 methods:\n   *\n   * - trustAs(contextEnum, value)\n   *     This method is used to tell the SCE service that the provided value is OK to use in the\n   *     contexts specified by contextEnum.  It must return an object that will be accepted by\n   *     getTrusted() for a compatible contextEnum and return this value.\n   *\n   * - valueOf(value)\n   *     For values that were not produced by trustAs(), return them as is.  For values that were\n   *     produced by trustAs(), return the corresponding input value to trustAs.  Basically, if\n   *     trustAs is wrapping the given values into some type, this operation unwraps it when given\n   *     such a value.\n   *\n   * - getTrusted(contextEnum, value)\n   *     This function should return the a value that is safe to use in the context specified by\n   *     contextEnum or throw and exception otherwise.\n   *\n   * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be\n   * opaque or wrapped in some holder object.  That happens to be an implementation detail.  For\n   * instance, an implementation could maintain a registry of all trusted objects by context.  In\n   * such a case, trustAs() would return the same object that was passed in.  getTrusted() would\n   * return the same object passed in if it was found in the registry under a compatible context or\n   * throw an exception otherwise.  An implementation might only wrap values some of the time based\n   * on some criteria.  getTrusted() might return a value and not throw an exception for special\n   * constants or objects even if not wrapped.  All such implementations fulfill this contract.\n   *\n   *\n   * A note on the inheritance model for SCE contexts\n   * ------------------------------------------------\n   * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types.  This\n   * is purely an implementation details.\n   *\n   * The contract is simply this:\n   *\n   *     getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)\n   *     will also succeed.\n   *\n   * Inheritance happens to capture this in a natural way.  In some future, we\n   * may not use inheritance anymore.  That is OK because no code outside of\n   * sce.js and sceSpecs.js would need to be aware of this detail.\n   */\n\n  this.$get = ['$parse', '$sniffer', '$sceDelegate', function(\n                $parse,   $sniffer,   $sceDelegate) {\n    // Prereq: Ensure that we're not running in IE8 quirks mode.  In that mode, IE allows\n    // the \"expression(javascript expression)\" syntax which is insecure.\n    if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) {\n      throw $sceMinErr('iequirks',\n        'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' +\n        'mode.  You can fix this by adding the text <!doctype html> to the top of your HTML ' +\n        'document.  See http://docs.angularjs.org/api/ng.$sce for more information.');\n    }\n\n    var sce = copy(SCE_CONTEXTS);\n\n    /**\n     * @ngdoc method\n     * @name $sce#isEnabled\n     * @function\n     *\n     * @return {Boolean} true if SCE is enabled, false otherwise.  If you want to set the value, you\n     * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.\n     *\n     * @description\n     * Returns a boolean indicating if SCE is enabled.\n     */\n    sce.isEnabled = function () {\n      return enabled;\n    };\n    sce.trustAs = $sceDelegate.trustAs;\n    sce.getTrusted = $sceDelegate.getTrusted;\n    sce.valueOf = $sceDelegate.valueOf;\n\n    if (!enabled) {\n      sce.trustAs = sce.getTrusted = function(type, value) { return value; };\n      sce.valueOf = identity;\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sce#parse\n     *\n     * @description\n     * Converts Angular {@link guide/expression expression} into a function.  This is like {@link\n     * ng.$parse $parse} and is identical when the expression is a literal constant.  Otherwise, it\n     * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,\n     * *result*)}\n     *\n     * @param {string} type The kind of SCE context in which this result will be used.\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n    sce.parseAs = function sceParseAs(type, expr) {\n      var parsed = $parse(expr);\n      if (parsed.literal && parsed.constant) {\n        return parsed;\n      } else {\n        return function sceParseAsTrusted(self, locals) {\n          return sce.getTrusted(type, parsed(self, locals));\n        };\n      }\n    };\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAs\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.  As such,\n     * returns an object that is trusted by angular for use in specified strict contextual\n     * escaping contexts (such as ng-bind-html, ng-include, any src attribute\n     * interpolation, any dom event binding attribute interpolation such as for onclick,  etc.)\n     * that uses the provided value.  See * {@link ng.$sce $sce} for enabling strict contextual\n     * escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resource_url, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsHtml(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml\n     *     $sce.getTrustedHtml(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl\n     *     $sce.getTrustedUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl\n     *     $sce.getTrustedResourceUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the return\n     *     value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsJs(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs\n     *     $sce.getTrustedJs(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrusted\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}.  As such,\n     * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the\n     * originally supplied value if the queried context type is a supertype of the created type.\n     * If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}\n     *                         call.\n     * @returns {*} The value the was originally provided to\n     *              {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.\n     *              Otherwise, throws an exception.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedHtml(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedCss\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedCss(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sceDelegate.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedJs\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedJs(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsHtml(expression string)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsCss\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsCss(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsUrl(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsResourceUrl(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsJs(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    // Shorthand delegations.\n    var parse = sce.parseAs,\n        getTrusted = sce.getTrusted,\n        trustAs = sce.trustAs;\n\n    forEach(SCE_CONTEXTS, function (enumValue, name) {\n      var lName = lowercase(name);\n      sce[camelCase(\"parse_as_\" + lName)] = function (expr) {\n        return parse(enumValue, expr);\n      };\n      sce[camelCase(\"get_trusted_\" + lName)] = function (value) {\n        return getTrusted(enumValue, value);\n      };\n      sce[camelCase(\"trust_as_\" + lName)] = function (value) {\n        return trustAs(enumValue, value);\n      };\n    });\n\n    return sce;\n  }];\n}\n\n/**\n * !!! This is an undocumented \"private\" service !!!\n *\n * @name $sniffer\n * @requires $window\n * @requires $document\n *\n * @property {boolean} history Does the browser support html5 history api ?\n * @property {boolean} hashchange Does the browser support hashchange event ?\n * @property {boolean} transitions Does the browser support CSS transition events ?\n * @property {boolean} animations Does the browser support CSS animation events ?\n *\n * @description\n * This is very simple implementation of testing browser's features.\n */\nfunction $SnifferProvider() {\n  this.$get = ['$window', '$document', function($window, $document) {\n    var eventSupport = {},\n        android =\n          int((/android (\\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),\n        boxee = /Boxee/i.test(($window.navigator || {}).userAgent),\n        document = $document[0] || {},\n        documentMode = document.documentMode,\n        vendorPrefix,\n        vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/,\n        bodyStyle = document.body && document.body.style,\n        transitions = false,\n        animations = false,\n        match;\n\n    if (bodyStyle) {\n      for(var prop in bodyStyle) {\n        if(match = vendorRegex.exec(prop)) {\n          vendorPrefix = match[0];\n          vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);\n          break;\n        }\n      }\n\n      if(!vendorPrefix) {\n        vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';\n      }\n\n      transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));\n      animations  = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));\n\n      if (android && (!transitions||!animations)) {\n        transitions = isString(document.body.style.webkitTransition);\n        animations = isString(document.body.style.webkitAnimation);\n      }\n    }\n\n\n    return {\n      // Android has history.pushState, but it does not update location correctly\n      // so let's not use the history API at all.\n      // http://code.google.com/p/android/issues/detail?id=17471\n      // https://github.com/angular/angular.js/issues/904\n\n      // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has\n      // so let's not use the history API also\n      // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined\n      // jshint -W018\n      history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),\n      // jshint +W018\n      hashchange: 'onhashchange' in $window &&\n                  // IE8 compatible mode lies\n                  (!documentMode || documentMode > 7),\n      hasEvent: function(event) {\n        // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have\n        // it. In particular the event is not fired when backspace or delete key are pressed or\n        // when cut operation is performed.\n        if (event == 'input' && msie == 9) return false;\n\n        if (isUndefined(eventSupport[event])) {\n          var divElm = document.createElement('div');\n          eventSupport[event] = 'on' + event in divElm;\n        }\n\n        return eventSupport[event];\n      },\n      csp: csp(),\n      vendorPrefix: vendorPrefix,\n      transitions : transitions,\n      animations : animations,\n      android: android,\n      msie : msie,\n      msieDocumentMode: documentMode\n    };\n  }];\n}\n\nfunction $TimeoutProvider() {\n  this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler',\n       function($rootScope,   $browser,   $q,   $exceptionHandler) {\n    var deferreds = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $timeout\n      *\n      * @description\n      * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch\n      * block and delegates any exceptions to\n      * {@link ng.$exceptionHandler $exceptionHandler} service.\n      *\n      * The return value of registering a timeout function is a promise, which will be resolved when\n      * the timeout is reached and the timeout function is executed.\n      *\n      * To cancel a timeout request, call `$timeout.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to\n      * synchronously flush the queue of deferred functions.\n      *\n      * @param {function()} fn A function, whose execution should be delayed.\n      * @param {number=} [delay=0] Delay in milliseconds.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this\n      *   promise will be resolved with is the return value of the `fn` function.\n      *\n      */\n    function timeout(fn, delay, invokeApply) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          skipApply = (isDefined(invokeApply) && !invokeApply),\n          timeoutId;\n\n      timeoutId = $browser.defer(function() {\n        try {\n          deferred.resolve(fn());\n        } catch(e) {\n          deferred.reject(e);\n          $exceptionHandler(e);\n        }\n        finally {\n          delete deferreds[promise.$$timeoutId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n      }, delay);\n\n      promise.$$timeoutId = timeoutId;\n      deferreds[timeoutId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $timeout#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`. As a result of this, the promise will be\n      * resolved with a rejection.\n      *\n      * @param {Promise=} promise Promise returned by the `$timeout` function.\n      * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n      *   canceled.\n      */\n    timeout.cancel = function(promise) {\n      if (promise && promise.$$timeoutId in deferreds) {\n        deferreds[promise.$$timeoutId].reject('canceled');\n        delete deferreds[promise.$$timeoutId];\n        return $browser.defer.cancel(promise.$$timeoutId);\n      }\n      return false;\n    };\n\n    return timeout;\n  }];\n}\n\n// NOTE:  The usage of window and document instead of $window and $document here is\n// deliberate.  This service depends on the specific behavior of anchor nodes created by the\n// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and\n// cause us to break tests.  In addition, when the browser resolves a URL for XHR, it\n// doesn't know about mocked locations and resolves URLs to the real document - which is\n// exactly the behavior needed here.  There is little value is mocking these out for this\n// service.\nvar urlParsingNode = document.createElement(\"a\");\nvar originUrl = urlResolve(window.location.href, true);\n\n\n/**\n *\n * Implementation Notes for non-IE browsers\n * ----------------------------------------\n * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,\n * results both in the normalizing and parsing of the URL.  Normalizing means that a relative\n * URL will be resolved into an absolute URL in the context of the application document.\n * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related\n * properties are all populated to reflect the normalized URL.  This approach has wide\n * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc.  See\n * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *\n * Implementation Notes for IE\n * ---------------------------\n * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other\n * browsers.  However, the parsed components will not be set if the URL assigned did not specify\n * them.  (e.g. if you assign a.href = \"foo\", then a.protocol, a.host, etc. will be empty.)  We\n * work around that by performing the parsing in a 2nd step by taking a previously normalized\n * URL (e.g. by assigning to a.href) and assigning it a.href again.  This correctly populates the\n * properties such as protocol, hostname, port, etc.\n *\n * IE7 does not normalize the URL when assigned to an anchor node.  (Apparently, it does, if one\n * uses the inner HTML approach to assign the URL as part of an HTML snippet -\n * http://stackoverflow.com/a/472729)  However, setting img[src] does normalize the URL.\n * Unfortunately, setting img[src] to something like \"javascript:foo\" on IE throws an exception.\n * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that\n * method and IE < 8 is unsupported.\n *\n * References:\n *   http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement\n *   http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *   http://url.spec.whatwg.org/#urlutils\n *   https://github.com/angular/angular.js/pull/2902\n *   http://james.padolsey.com/javascript/parsing-urls-with-the-dom/\n *\n * @function\n * @param {string} url The URL to be parsed.\n * @description Normalizes and parses a URL.\n * @returns {object} Returns the normalized URL as a dictionary.\n *\n *   | member name   | Description    |\n *   |---------------|----------------|\n *   | href          | A normalized version of the provided URL if it was not an absolute URL |\n *   | protocol      | The protocol including the trailing colon                              |\n *   | host          | The host and port (if the port is non-default) of the normalizedUrl    |\n *   | search        | The search params, minus the question mark                             |\n *   | hash          | The hash string, minus the hash symbol\n *   | hostname      | The hostname\n *   | port          | The port, without \":\"\n *   | pathname      | The pathname, beginning with \"/\"\n *\n */\nfunction urlResolve(url, base) {\n  var href = url;\n\n  if (msie) {\n    // Normalize before parse.  Refer Implementation Notes on why this is\n    // done in two steps on IE.\n    urlParsingNode.setAttribute(\"href\", href);\n    href = urlParsingNode.href;\n  }\n\n  urlParsingNode.setAttribute('href', href);\n\n  // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n  return {\n    href: urlParsingNode.href,\n    protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n    host: urlParsingNode.host,\n    search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n    hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n    hostname: urlParsingNode.hostname,\n    port: urlParsingNode.port,\n    pathname: (urlParsingNode.pathname.charAt(0) === '/')\n      ? urlParsingNode.pathname\n      : '/' + urlParsingNode.pathname\n  };\n}\n\n/**\n * Parse a request URL and determine whether this is a same-origin request as the application document.\n *\n * @param {string|object} requestUrl The url of the request as a string that will be resolved\n * or a parsed URL object.\n * @returns {boolean} Whether the request is for the same origin as the application document.\n */\nfunction urlIsSameOrigin(requestUrl) {\n  var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n  return (parsed.protocol === originUrl.protocol &&\n          parsed.host === originUrl.host);\n}\n\n/**\n * @ngdoc service\n * @name $window\n *\n * @description\n * A reference to the browser's `window` object. While `window`\n * is globally available in JavaScript, it causes testability problems, because\n * it is a global variable. In angular we always refer to it through the\n * `$window` service, so it may be overridden, removed or mocked for testing.\n *\n * Expressions, like the one defined for the `ngClick` directive in the example\n * below, are evaluated with respect to the current scope.  Therefore, there is\n * no risk of inadvertently coding in a dependency on a global value in such an\n * expression.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope, $window) {\n           $scope.greeting = 'Hello, World!';\n           $scope.doGreeting = function(greeting) {\n               $window.alert(greeting);\n           };\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input type=\"text\" ng-model=\"greeting\" />\n         <button ng-click=\"doGreeting(greeting)\">ALERT</button>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n      it('should display the greeting in the input box', function() {\n       element(by.model('greeting')).sendKeys('Hello, E2E Tests');\n       // If we click the button it will block the test runner\n       // element(':button').click();\n      });\n     </file>\n   </example>\n */\nfunction $WindowProvider(){\n  this.$get = valueFn(window);\n}\n\n/**\n * @ngdoc provider\n * @name $filterProvider\n * @description\n *\n * Filters are just functions which transform input to an output. However filters need to be\n * Dependency Injected. To achieve this a filter definition consists of a factory function which is\n * annotated with dependencies and is responsible for creating a filter function.\n *\n * ```js\n *   // Filter registration\n *   function MyModule($provide, $filterProvider) {\n *     // create a service to demonstrate injection (not always needed)\n *     $provide.value('greet', function(name){\n *       return 'Hello ' + name + '!';\n *     });\n *\n *     // register a filter factory which uses the\n *     // greet service to demonstrate DI.\n *     $filterProvider.register('greet', function(greet){\n *       // return the filter function which uses the greet service\n *       // to generate salutation\n *       return function(text) {\n *         // filters need to be forgiving so check input validity\n *         return text && greet(text) || text;\n *       };\n *     });\n *   }\n * ```\n *\n * The filter function is registered with the `$injector` under the filter name suffix with\n * `Filter`.\n *\n * ```js\n *   it('should be the same instance', inject(\n *     function($filterProvider) {\n *       $filterProvider.register('reverse', function(){\n *         return ...;\n *       });\n *     },\n *     function($filter, reverseFilter) {\n *       expect($filter('reverse')).toBe(reverseFilter);\n *     });\n * ```\n *\n *\n * For more information about how angular filters work, and how to create your own filters, see\n * {@link guide/filter Filters} in the Angular Developer Guide.\n */\n/**\n * @ngdoc method\n * @name $filterProvider#register\n * @description\n * Register filter factory function.\n *\n * @param {String} name Name of the filter.\n * @param {Function} fn The filter factory function which is injectable.\n */\n\n\n/**\n * @ngdoc service\n * @name $filter\n * @function\n * @description\n * Filters are used for formatting data displayed to the user.\n *\n * The general syntax in templates is as follows:\n *\n *         {{ expression [| filter_name[:parameter_value] ... ] }}\n *\n * @param {String} name Name of the filter function to retrieve\n * @return {Function} the filter function\n */\n$FilterProvider.$inject = ['$provide'];\nfunction $FilterProvider($provide) {\n  var suffix = 'Filter';\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#register\n   * @param {string|Object} name Name of the filter function, or an object map of filters where\n   *    the keys are the filter names and the values are the filter factories.\n   * @returns {Object} Registered filter instance, or if a map of filters was provided then a map\n   *    of the registered filter instances.\n   */\n  function register(name, factory) {\n    if(isObject(name)) {\n      var filters = {};\n      forEach(name, function(filter, key) {\n        filters[key] = register(key, filter);\n      });\n      return filters;\n    } else {\n      return $provide.factory(name + suffix, factory);\n    }\n  }\n  this.register = register;\n\n  this.$get = ['$injector', function($injector) {\n    return function(name) {\n      return $injector.get(name + suffix);\n    };\n  }];\n\n  ////////////////////////////////////////\n\n  /* global\n    currencyFilter: false,\n    dateFilter: false,\n    filterFilter: false,\n    jsonFilter: false,\n    limitToFilter: false,\n    lowercaseFilter: false,\n    numberFilter: false,\n    orderByFilter: false,\n    uppercaseFilter: false,\n  */\n\n  register('currency', currencyFilter);\n  register('date', dateFilter);\n  register('filter', filterFilter);\n  register('json', jsonFilter);\n  register('limitTo', limitToFilter);\n  register('lowercase', lowercaseFilter);\n  register('number', numberFilter);\n  register('orderBy', orderByFilter);\n  register('uppercase', uppercaseFilter);\n}\n\n/**\n * @ngdoc filter\n * @name filter\n * @function\n *\n * @description\n * Selects a subset of items from `array` and returns it as a new array.\n *\n * @param {Array} array The source array.\n * @param {string|Object|function()} expression The predicate to be used for selecting items from\n *   `array`.\n *\n *   Can be one of:\n *\n *   - `string`: The string is evaluated as an expression and the resulting value is used for substring match against\n *     the contents of the `array`. All strings or objects with string properties in `array` that contain this string\n *     will be returned. The predicate can be negated by prefixing the string with `!`.\n *\n *   - `Object`: A pattern object can be used to filter specific properties on objects contained\n *     by `array`. For example `{name:\"M\", phone:\"1\"}` predicate will return an array of items\n *     which have property `name` containing \"M\" and property `phone` containing \"1\". A special\n *     property name `$` can be used (as in `{$:\"text\"}`) to accept a match against any\n *     property of the object. That's equivalent to the simple substring match with a `string`\n *     as described above.\n *\n *   - `function(value)`: A predicate function can be used to write arbitrary filters. The function is\n *     called for each element of `array`. The final result is an array of those elements that\n *     the predicate returned true for.\n *\n * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in\n *     determining if the expected value (from the filter expression) and actual value (from\n *     the object in the array) should be considered a match.\n *\n *   Can be one of:\n *\n *     - `function(actual, expected)`:\n *       The function will be given the object value and the predicate value to compare and\n *       should return true if the item should be included in filtered result.\n *\n *     - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.\n *       this is essentially strict comparison of expected and actual.\n *\n *     - `false|undefined`: A short hand for a function which will look for a substring match in case\n *       insensitive way.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div ng-init=\"friends = [{name:'John', phone:'555-1276'},\n                                {name:'Mary', phone:'800-BIG-MARY'},\n                                {name:'Mike', phone:'555-4321'},\n                                {name:'Adam', phone:'555-5678'},\n                                {name:'Julie', phone:'555-8765'},\n                                {name:'Juliette', phone:'555-5678'}]\"></div>\n\n       Search: <input ng-model=\"searchText\">\n       <table id=\"searchTextResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friend in friends | filter:searchText\">\n           <td>{{friend.name}}</td>\n           <td>{{friend.phone}}</td>\n         </tr>\n       </table>\n       <hr>\n       Any: <input ng-model=\"search.$\"> <br>\n       Name only <input ng-model=\"search.name\"><br>\n       Phone only <input ng-model=\"search.phone\"><br>\n       Equality <input type=\"checkbox\" ng-model=\"strict\"><br>\n       <table id=\"searchObjResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friendObj in friends | filter:search:strict\">\n           <td>{{friendObj.name}}</td>\n           <td>{{friendObj.phone}}</td>\n         </tr>\n       </table>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var expectFriendNames = function(expectedNames, key) {\n         element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {\n           arr.forEach(function(wd, i) {\n             expect(wd.getText()).toMatch(expectedNames[i]);\n           });\n         });\n       };\n\n       it('should search across all fields when filtering with a string', function() {\n         var searchText = element(by.model('searchText'));\n         searchText.clear();\n         searchText.sendKeys('m');\n         expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');\n\n         searchText.clear();\n         searchText.sendKeys('76');\n         expectFriendNames(['John', 'Julie'], 'friend');\n       });\n\n       it('should search in specific fields when filtering with a predicate object', function() {\n         var searchAny = element(by.model('search.$'));\n         searchAny.clear();\n         searchAny.sendKeys('i');\n         expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');\n       });\n       it('should use a equal comparison when comparator is true', function() {\n         var searchName = element(by.model('search.name'));\n         var strict = element(by.model('strict'));\n         searchName.clear();\n         searchName.sendKeys('Julie');\n         strict.click();\n         expectFriendNames(['Julie'], 'friendObj');\n       });\n     </file>\n   </example>\n */\nfunction filterFilter() {\n  return function(array, expression, comparator) {\n    if (!isArray(array)) return array;\n\n    var comparatorType = typeof(comparator),\n        predicates = [];\n\n    predicates.check = function(value) {\n      for (var j = 0; j < predicates.length; j++) {\n        if(!predicates[j](value)) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    if (comparatorType !== 'function') {\n      if (comparatorType === 'boolean' && comparator) {\n        comparator = function(obj, text) {\n          return angular.equals(obj, text);\n        };\n      } else {\n        comparator = function(obj, text) {\n          if (obj && text && typeof obj === 'object' && typeof text === 'object') {\n            for (var objKey in obj) {\n              if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) &&\n                  comparator(obj[objKey], text[objKey])) {\n                return true;\n              }\n            }\n            return false;\n          }\n          text = (''+text).toLowerCase();\n          return (''+obj).toLowerCase().indexOf(text) > -1;\n        };\n      }\n    }\n\n    var search = function(obj, text){\n      if (typeof text == 'string' && text.charAt(0) === '!') {\n        return !search(obj, text.substr(1));\n      }\n      switch (typeof obj) {\n        case \"boolean\":\n        case \"number\":\n        case \"string\":\n          return comparator(obj, text);\n        case \"object\":\n          switch (typeof text) {\n            case \"object\":\n              return comparator(obj, text);\n            default:\n              for ( var objKey in obj) {\n                if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {\n                  return true;\n                }\n              }\n              break;\n          }\n          return false;\n        case \"array\":\n          for ( var i = 0; i < obj.length; i++) {\n            if (search(obj[i], text)) {\n              return true;\n            }\n          }\n          return false;\n        default:\n          return false;\n      }\n    };\n    switch (typeof expression) {\n      case \"boolean\":\n      case \"number\":\n      case \"string\":\n        // Set up expression object and fall through\n        expression = {$:expression};\n        // jshint -W086\n      case \"object\":\n        // jshint +W086\n        for (var key in expression) {\n          (function(path) {\n            if (typeof expression[path] == 'undefined') return;\n            predicates.push(function(value) {\n              return search(path == '$' ? value : (value && value[path]), expression[path]);\n            });\n          })(key);\n        }\n        break;\n      case 'function':\n        predicates.push(expression);\n        break;\n      default:\n        return array;\n    }\n    var filtered = [];\n    for ( var j = 0; j < array.length; j++) {\n      var value = array[j];\n      if (predicates.check(value)) {\n        filtered.push(value);\n      }\n    }\n    return filtered;\n  };\n}\n\n/**\n * @ngdoc filter\n * @name currency\n * @function\n *\n * @description\n * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default\n * symbol for current locale is used.\n *\n * @param {number} amount Input to filter.\n * @param {string=} symbol Currency symbol or identifier to be displayed.\n * @returns {string} Formatted number.\n *\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.amount = 1234.56;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input type=\"number\" ng-model=\"amount\"> <br>\n         default currency symbol ($): <span id=\"currency-default\">{{amount | currency}}</span><br>\n         custom currency identifier (USD$): <span>{{amount | currency:\"USD$\"}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should init with 1234.56', function() {\n         expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');\n         expect(element(by.binding('amount | currency:\"USD$\"')).getText()).toBe('USD$1,234.56');\n       });\n       it('should update', function() {\n         if (browser.params.browser == 'safari') {\n           // Safari does not understand the minus key. See\n           // https://github.com/angular/protractor/issues/481\n           return;\n         }\n         element(by.model('amount')).clear();\n         element(by.model('amount')).sendKeys('-1234');\n         expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');\n         expect(element(by.binding('amount | currency:\"USD$\"')).getText()).toBe('(USD$1,234.00)');\n       });\n     </file>\n   </example>\n */\ncurrencyFilter.$inject = ['$locale'];\nfunction currencyFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(amount, currencySymbol){\n    if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM;\n    return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2).\n                replace(/\\u00A4/g, currencySymbol);\n  };\n}\n\n/**\n * @ngdoc filter\n * @name number\n * @function\n *\n * @description\n * Formats a number as text.\n *\n * If the input is not a number an empty string is returned.\n *\n * @param {number|string} number Number to format.\n * @param {(number|string)=} fractionSize Number of decimal places to round the number to.\n * If this is not provided then the fraction size is computed from the current locale's number\n * formatting pattern. In the case of the default locale, it will be 3.\n * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.val = 1234.56789;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Enter number: <input ng-model='val'><br>\n         Default formatting: <span id='number-default'>{{val | number}}</span><br>\n         No fractions: <span>{{val | number:0}}</span><br>\n         Negative number: <span>{{-val | number:4}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format numbers', function() {\n         expect(element(by.id('number-default')).getText()).toBe('1,234.568');\n         expect(element(by.binding('val | number:0')).getText()).toBe('1,235');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');\n       });\n\n       it('should update', function() {\n         element(by.model('val')).clear();\n         element(by.model('val')).sendKeys('3374.333');\n         expect(element(by.id('number-default')).getText()).toBe('3,374.333');\n         expect(element(by.binding('val | number:0')).getText()).toBe('3,374');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');\n      });\n     </file>\n   </example>\n */\n\n\nnumberFilter.$inject = ['$locale'];\nfunction numberFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(number, fractionSize) {\n    return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,\n      fractionSize);\n  };\n}\n\nvar DECIMAL_SEP = '.';\nfunction formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {\n  if (number == null || !isFinite(number) || isObject(number)) return '';\n\n  var isNegative = number < 0;\n  number = Math.abs(number);\n  var numStr = number + '',\n      formatedText = '',\n      parts = [];\n\n  var hasExponent = false;\n  if (numStr.indexOf('e') !== -1) {\n    var match = numStr.match(/([\\d\\.]+)e(-?)(\\d+)/);\n    if (match && match[2] == '-' && match[3] > fractionSize + 1) {\n      numStr = '0';\n    } else {\n      formatedText = numStr;\n      hasExponent = true;\n    }\n  }\n\n  if (!hasExponent) {\n    var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;\n\n    // determine fractionSize if it is not specified\n    if (isUndefined(fractionSize)) {\n      fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);\n    }\n\n    var pow = Math.pow(10, fractionSize);\n    number = Math.round(number * pow) / pow;\n    var fraction = ('' + number).split(DECIMAL_SEP);\n    var whole = fraction[0];\n    fraction = fraction[1] || '';\n\n    var i, pos = 0,\n        lgroup = pattern.lgSize,\n        group = pattern.gSize;\n\n    if (whole.length >= (lgroup + group)) {\n      pos = whole.length - lgroup;\n      for (i = 0; i < pos; i++) {\n        if ((pos - i)%group === 0 && i !== 0) {\n          formatedText += groupSep;\n        }\n        formatedText += whole.charAt(i);\n      }\n    }\n\n    for (i = pos; i < whole.length; i++) {\n      if ((whole.length - i)%lgroup === 0 && i !== 0) {\n        formatedText += groupSep;\n      }\n      formatedText += whole.charAt(i);\n    }\n\n    // format fraction part.\n    while(fraction.length < fractionSize) {\n      fraction += '0';\n    }\n\n    if (fractionSize && fractionSize !== \"0\") formatedText += decimalSep + fraction.substr(0, fractionSize);\n  } else {\n\n    if (fractionSize > 0 && number > -1 && number < 1) {\n      formatedText = number.toFixed(fractionSize);\n    }\n  }\n\n  parts.push(isNegative ? pattern.negPre : pattern.posPre);\n  parts.push(formatedText);\n  parts.push(isNegative ? pattern.negSuf : pattern.posSuf);\n  return parts.join('');\n}\n\nfunction padNumber(num, digits, trim) {\n  var neg = '';\n  if (num < 0) {\n    neg =  '-';\n    num = -num;\n  }\n  num = '' + num;\n  while(num.length < digits) num = '0' + num;\n  if (trim)\n    num = num.substr(num.length - digits);\n  return neg + num;\n}\n\n\nfunction dateGetter(name, size, offset, trim) {\n  offset = offset || 0;\n  return function(date) {\n    var value = date['get' + name]();\n    if (offset > 0 || value > -offset)\n      value += offset;\n    if (value === 0 && offset == -12 ) value = 12;\n    return padNumber(value, size, trim);\n  };\n}\n\nfunction dateStrGetter(name, shortForm) {\n  return function(date, formats) {\n    var value = date['get' + name]();\n    var get = uppercase(shortForm ? ('SHORT' + name) : name);\n\n    return formats[get][value];\n  };\n}\n\nfunction timeZoneGetter(date) {\n  var zone = -1 * date.getTimezoneOffset();\n  var paddedZone = (zone >= 0) ? \"+\" : \"\";\n\n  paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +\n                padNumber(Math.abs(zone % 60), 2);\n\n  return paddedZone;\n}\n\nfunction ampmGetter(date, formats) {\n  return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];\n}\n\nvar DATE_FORMATS = {\n  yyyy: dateGetter('FullYear', 4),\n    yy: dateGetter('FullYear', 2, 0, true),\n     y: dateGetter('FullYear', 1),\n  MMMM: dateStrGetter('Month'),\n   MMM: dateStrGetter('Month', true),\n    MM: dateGetter('Month', 2, 1),\n     M: dateGetter('Month', 1, 1),\n    dd: dateGetter('Date', 2),\n     d: dateGetter('Date', 1),\n    HH: dateGetter('Hours', 2),\n     H: dateGetter('Hours', 1),\n    hh: dateGetter('Hours', 2, -12),\n     h: dateGetter('Hours', 1, -12),\n    mm: dateGetter('Minutes', 2),\n     m: dateGetter('Minutes', 1),\n    ss: dateGetter('Seconds', 2),\n     s: dateGetter('Seconds', 1),\n     // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n     // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions\n   sss: dateGetter('Milliseconds', 3),\n  EEEE: dateStrGetter('Day'),\n   EEE: dateStrGetter('Day', true),\n     a: ampmGetter,\n     Z: timeZoneGetter\n};\n\nvar DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,\n    NUMBER_STRING = /^\\-?\\d+$/;\n\n/**\n * @ngdoc filter\n * @name date\n * @function\n *\n * @description\n *   Formats `date` to a string based on the requested `format`.\n *\n *   `format` string can be composed of the following elements:\n *\n *   * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)\n *   * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n *   * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)\n *   * `'MMMM'`: Month in year (January-December)\n *   * `'MMM'`: Month in year (Jan-Dec)\n *   * `'MM'`: Month in year, padded (01-12)\n *   * `'M'`: Month in year (1-12)\n *   * `'dd'`: Day in month, padded (01-31)\n *   * `'d'`: Day in month (1-31)\n *   * `'EEEE'`: Day in Week,(Sunday-Saturday)\n *   * `'EEE'`: Day in Week, (Sun-Sat)\n *   * `'HH'`: Hour in day, padded (00-23)\n *   * `'H'`: Hour in day (0-23)\n *   * `'hh'`: Hour in am/pm, padded (01-12)\n *   * `'h'`: Hour in am/pm, (1-12)\n *   * `'mm'`: Minute in hour, padded (00-59)\n *   * `'m'`: Minute in hour (0-59)\n *   * `'ss'`: Second in minute, padded (00-59)\n *   * `'s'`: Second in minute (0-59)\n *   * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)\n *   * `'a'`: am/pm marker\n *   * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)\n *\n *   `format` string can also be one of the following predefined\n *   {@link guide/i18n localizable formats}:\n *\n *   * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale\n *     (e.g. Sep 3, 2010 12:05:08 pm)\n *   * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US  locale (e.g. 9/3/10 12:05 pm)\n *   * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US  locale\n *     (e.g. Friday, September 3, 2010)\n *   * `'longDate'`: equivalent to `'MMMM d, y'` for en_US  locale (e.g. September 3, 2010)\n *   * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US  locale (e.g. Sep 3, 2010)\n *   * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)\n *   * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm)\n *   * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm)\n *\n *   `format` string can contain literal values. These need to be quoted with single quotes (e.g.\n *   `\"h 'in the morning'\"`). In order to output single quote, use two single quotes in a sequence\n *   (e.g. `\"h 'o''clock'\"`).\n *\n * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or\n *    number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its\n *    shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is\n *    specified in the string input, the time is considered to be in the local timezone.\n * @param {string=} format Formatting rules (see Description). If not specified,\n *    `mediumDate` is used.\n * @returns {string} Formatted string or the input if input is not recognized as date/millis.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:\n           <span>{{1288323623006 | date:'medium'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:\n          <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:\n          <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format date', function() {\n         expect(element(by.binding(\"1288323623006 | date:'medium'\")).getText()).\n            toMatch(/Oct 2\\d, 2010 \\d{1,2}:\\d{2}:\\d{2} (AM|PM)/);\n         expect(element(by.binding(\"1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'\")).getText()).\n            toMatch(/2010\\-10\\-2\\d \\d{2}:\\d{2}:\\d{2} (\\-|\\+)?\\d{4}/);\n         expect(element(by.binding(\"'1288323623006' | date:'MM/dd/yyyy @ h:mma'\")).getText()).\n            toMatch(/10\\/2\\d\\/2010 @ \\d{1,2}:\\d{2}(AM|PM)/);\n       });\n     </file>\n   </example>\n */\ndateFilter.$inject = ['$locale'];\nfunction dateFilter($locale) {\n\n\n  var R_ISO8601_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n                     // 1        2       3         4          5          6          7          8  9     10      11\n  function jsonStringToDate(string) {\n    var match;\n    if (match = string.match(R_ISO8601_STR)) {\n      var date = new Date(0),\n          tzHour = 0,\n          tzMin  = 0,\n          dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,\n          timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n      if (match[9]) {\n        tzHour = int(match[9] + match[10]);\n        tzMin = int(match[9] + match[11]);\n      }\n      dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));\n      var h = int(match[4]||0) - tzHour;\n      var m = int(match[5]||0) - tzMin;\n      var s = int(match[6]||0);\n      var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000);\n      timeSetter.call(date, h, m, s, ms);\n      return date;\n    }\n    return string;\n  }\n\n\n  return function(date, format) {\n    var text = '',\n        parts = [],\n        fn, match;\n\n    format = format || 'mediumDate';\n    format = $locale.DATETIME_FORMATS[format] || format;\n    if (isString(date)) {\n      if (NUMBER_STRING.test(date)) {\n        date = int(date);\n      } else {\n        date = jsonStringToDate(date);\n      }\n    }\n\n    if (isNumber(date)) {\n      date = new Date(date);\n    }\n\n    if (!isDate(date)) {\n      return date;\n    }\n\n    while(format) {\n      match = DATE_FORMATS_SPLIT.exec(format);\n      if (match) {\n        parts = concat(parts, match, 1);\n        format = parts.pop();\n      } else {\n        parts.push(format);\n        format = null;\n      }\n    }\n\n    forEach(parts, function(value){\n      fn = DATE_FORMATS[value];\n      text += fn ? fn(date, $locale.DATETIME_FORMATS)\n                 : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n    });\n\n    return text;\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name json\n * @function\n *\n * @description\n *   Allows you to convert a JavaScript object into JSON string.\n *\n *   This filter is mostly useful for debugging. When using the double curly {{value}} notation\n *   the binding is automatically converted to JSON.\n *\n * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.\n * @returns {string} JSON string.\n *\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <pre>{{ {'name':'value'} | json }}</pre>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should jsonify filtered objects', function() {\n         expect(element(by.binding(\"{'name':'value'}\")).getText()).toMatch(/\\{\\n  \"name\": ?\"value\"\\n}/);\n       });\n     </file>\n   </example>\n *\n */\nfunction jsonFilter() {\n  return function(object) {\n    return toJson(object, true);\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name lowercase\n * @function\n * @description\n * Converts string to lowercase.\n * @see angular.lowercase\n */\nvar lowercaseFilter = valueFn(lowercase);\n\n\n/**\n * @ngdoc filter\n * @name uppercase\n * @function\n * @description\n * Converts string to uppercase.\n * @see angular.uppercase\n */\nvar uppercaseFilter = valueFn(uppercase);\n\n/**\n * @ngdoc filter\n * @name limitTo\n * @function\n *\n * @description\n * Creates a new array or string containing only a specified number of elements. The elements\n * are taken from either the beginning or the end of the source array or string, as specified by\n * the value and sign (positive or negative) of `limit`.\n *\n * @param {Array|string} input Source array or string to be limited.\n * @param {string|number} limit The length of the returned array or string. If the `limit` number\n *     is positive, `limit` number of items from the beginning of the source array/string are copied.\n *     If the number is negative, `limit` number  of items from the end of the source array/string\n *     are copied. The `limit` will be trimmed if it exceeds `array.length`\n * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array\n *     had less than `limit` elements.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.numbers = [1,2,3,4,5,6,7,8,9];\n           $scope.letters = \"abcdefghi\";\n           $scope.numLimit = 3;\n           $scope.letterLimit = 3;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Limit {{numbers}} to: <input type=\"integer\" ng-model=\"numLimit\">\n         <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>\n         Limit {{letters}} to: <input type=\"integer\" ng-model=\"letterLimit\">\n         <p>Output letters: {{ letters | limitTo:letterLimit }}</p>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var numLimitInput = element(by.model('numLimit'));\n       var letterLimitInput = element(by.model('letterLimit'));\n       var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));\n       var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));\n\n       it('should limit the number array to first three items', function() {\n         expect(numLimitInput.getAttribute('value')).toBe('3');\n         expect(letterLimitInput.getAttribute('value')).toBe('3');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abc');\n       });\n\n       it('should update the output when -3 is entered', function() {\n         numLimitInput.clear();\n         numLimitInput.sendKeys('-3');\n         letterLimitInput.clear();\n         letterLimitInput.sendKeys('-3');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');\n         expect(limitedLetters.getText()).toEqual('Output letters: ghi');\n       });\n\n       it('should not exceed the maximum size of input array', function() {\n         numLimitInput.clear();\n         numLimitInput.sendKeys('100');\n         letterLimitInput.clear();\n         letterLimitInput.sendKeys('100');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');\n       });\n     </file>\n   </example>\n */\nfunction limitToFilter(){\n  return function(input, limit) {\n    if (!isArray(input) && !isString(input)) return input;\n\n    limit = int(limit);\n\n    if (isString(input)) {\n      //NaN check on limit\n      if (limit) {\n        return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);\n      } else {\n        return \"\";\n      }\n    }\n\n    var out = [],\n      i, n;\n\n    // if abs(limit) exceeds maximum length, trim it\n    if (limit > input.length)\n      limit = input.length;\n    else if (limit < -input.length)\n      limit = -input.length;\n\n    if (limit > 0) {\n      i = 0;\n      n = limit;\n    } else {\n      i = input.length + limit;\n      n = input.length;\n    }\n\n    for (; i<n; i++) {\n      out.push(input[i]);\n    }\n\n    return out;\n  };\n}\n\n/**\n * @ngdoc filter\n * @name orderBy\n * @function\n *\n * @description\n * Orders a specified `array` by the `expression` predicate.\n *\n * @param {Array} array The array to sort.\n * @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be\n *    used by the comparator to determine the order of elements.\n *\n *    Can be one of:\n *\n *    - `function`: Getter function. The result of this function will be sorted using the\n *      `<`, `=`, `>` operator.\n *    - `string`: An Angular expression which evaluates to an object to order by, such as 'name'\n *      to sort by a property called 'name'. Optionally prefixed with `+` or `-` to control\n *      ascending or descending sort order (for example, +name or -name).\n *    - `Array`: An array of function or string predicates. The first predicate in the array\n *      is used for sorting, but when two items are equivalent, the next predicate is used.\n *\n * @param {boolean=} reverse Reverse the order of the array.\n * @returns {Array} Sorted copy of the source array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.friends =\n               [{name:'John', phone:'555-1212', age:10},\n                {name:'Mary', phone:'555-9876', age:19},\n                {name:'Mike', phone:'555-4321', age:21},\n                {name:'Adam', phone:'555-5678', age:35},\n                {name:'Julie', phone:'555-8765', age:29}]\n           $scope.predicate = '-age';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>\n         <hr/>\n         [ <a href=\"\" ng-click=\"predicate=''\">unsorted</a> ]\n         <table class=\"friend\">\n           <tr>\n             <th><a href=\"\" ng-click=\"predicate = 'name'; reverse=false\">Name</a>\n                 (<a href=\"\" ng-click=\"predicate = '-name'; reverse=false\">^</a>)</th>\n             <th><a href=\"\" ng-click=\"predicate = 'phone'; reverse=!reverse\">Phone Number</a></th>\n             <th><a href=\"\" ng-click=\"predicate = 'age'; reverse=!reverse\">Age</a></th>\n           </tr>\n           <tr ng-repeat=\"friend in friends | orderBy:predicate:reverse\">\n             <td>{{friend.name}}</td>\n             <td>{{friend.phone}}</td>\n             <td>{{friend.age}}</td>\n           </tr>\n         </table>\n       </div>\n     </file>\n   </example>\n */\norderByFilter.$inject = ['$parse'];\nfunction orderByFilter($parse){\n  return function(array, sortPredicate, reverseOrder) {\n    if (!isArray(array)) return array;\n    if (!sortPredicate) return array;\n    sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate];\n    sortPredicate = map(sortPredicate, function(predicate){\n      var descending = false, get = predicate || identity;\n      if (isString(predicate)) {\n        if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {\n          descending = predicate.charAt(0) == '-';\n          predicate = predicate.substring(1);\n        }\n        get = $parse(predicate);\n        if (get.constant) {\n          var key = get();\n          return reverseComparator(function(a,b) {\n            return compare(a[key], b[key]);\n          }, descending);\n        }\n      }\n      return reverseComparator(function(a,b){\n        return compare(get(a),get(b));\n      }, descending);\n    });\n    var arrayCopy = [];\n    for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); }\n    return arrayCopy.sort(reverseComparator(comparator, reverseOrder));\n\n    function comparator(o1, o2){\n      for ( var i = 0; i < sortPredicate.length; i++) {\n        var comp = sortPredicate[i](o1, o2);\n        if (comp !== 0) return comp;\n      }\n      return 0;\n    }\n    function reverseComparator(comp, descending) {\n      return toBoolean(descending)\n          ? function(a,b){return comp(b,a);}\n          : comp;\n    }\n    function compare(v1, v2){\n      var t1 = typeof v1;\n      var t2 = typeof v2;\n      if (t1 == t2) {\n        if (t1 == \"string\") {\n           v1 = v1.toLowerCase();\n           v2 = v2.toLowerCase();\n        }\n        if (v1 === v2) return 0;\n        return v1 < v2 ? -1 : 1;\n      } else {\n        return t1 < t2 ? -1 : 1;\n      }\n    }\n  };\n}\n\nfunction ngDirective(directive) {\n  if (isFunction(directive)) {\n    directive = {\n      link: directive\n    };\n  }\n  directive.restrict = directive.restrict || 'AC';\n  return valueFn(directive);\n}\n\n/**\n * @ngdoc directive\n * @name a\n * @restrict E\n *\n * @description\n * Modifies the default behavior of the html A tag so that the default action is prevented when\n * the href attribute is empty.\n *\n * This change permits the easy creation of action links with the `ngClick` directive\n * without changing the location or causing page reloads, e.g.:\n * `<a href=\"\" ng-click=\"list.addItem()\">Add Item</a>`\n */\nvar htmlAnchorDirective = valueFn({\n  restrict: 'E',\n  compile: function(element, attr) {\n\n    if (msie <= 8) {\n\n      // turn <a href ng-click=\"..\">link</a> into a stylable link in IE\n      // but only if it doesn't have name attribute, in which case it's an anchor\n      if (!attr.href && !attr.name) {\n        attr.$set('href', '');\n      }\n\n      // add a comment node to anchors to workaround IE bug that causes element content to be reset\n      // to new attribute content if attribute is updated with value containing @ and element also\n      // contains value with @\n      // see issue #1949\n      element.append(document.createComment('IE fix'));\n    }\n\n    if (!attr.href && !attr.xlinkHref && !attr.name) {\n      return function(scope, element) {\n        // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.\n        var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?\n                   'xlink:href' : 'href';\n        element.on('click', function(event){\n          // if we have no href url, then don't navigate anywhere.\n          if (!element.attr(href)) {\n            event.preventDefault();\n          }\n        });\n      };\n    }\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngHref\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in an href attribute will\n * make the link go to the wrong URL if the user clicks it before\n * Angular has a chance to replace the `{{hash}}` markup with its\n * value. Until Angular replaces the markup the link will be broken\n * and will most likely return a 404 error.\n *\n * The `ngHref` directive solves this problem.\n *\n * The wrong way to write it:\n * ```html\n * <a href=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <a ng-href=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * @element A\n * @param {template} ngHref any string which can contain `{{}}` markup.\n *\n * @example\n * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes\n * in links and their different behaviors:\n    <example>\n      <file name=\"index.html\">\n        <input ng-model=\"value\" /><br />\n        <a id=\"link-1\" href ng-click=\"value = 1\">link 1</a> (link, don't reload)<br />\n        <a id=\"link-2\" href=\"\" ng-click=\"value = 2\">link 2</a> (link, don't reload)<br />\n        <a id=\"link-3\" ng-href=\"/{{'123'}}\">link 3</a> (link, reload!)<br />\n        <a id=\"link-4\" href=\"\" name=\"xx\" ng-click=\"value = 4\">anchor</a> (link, don't reload)<br />\n        <a id=\"link-5\" name=\"xxx\" ng-click=\"value = 5\">anchor</a> (no link)<br />\n        <a id=\"link-6\" ng-href=\"{{value}}\">link</a> (link, change location)\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should execute ng-click but not reload when href without value', function() {\n          element(by.id('link-1')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('1');\n          expect(element(by.id('link-1')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when href empty string', function() {\n          element(by.id('link-2')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('2');\n          expect(element(by.id('link-2')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click and change url when ng-href specified', function() {\n          expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\\/123$/);\n\n          element(by.id('link-3')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/123$/);\n            });\n          }, 1000, 'page should navigate to /123');\n        });\n\n        xit('should execute ng-click but not reload when href empty string and name specified', function() {\n          element(by.id('link-4')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('4');\n          expect(element(by.id('link-4')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when no href but name specified', function() {\n          element(by.id('link-5')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('5');\n          expect(element(by.id('link-5')).getAttribute('href')).toBe(null);\n        });\n\n        it('should only change url when only ng-href', function() {\n          element(by.model('value')).clear();\n          element(by.model('value')).sendKeys('6');\n          expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\\/6$/);\n\n          element(by.id('link-6')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/6$/);\n            });\n          }, 1000, 'page should navigate to /6');\n        });\n      </file>\n    </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngSrc\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `src` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrc` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * @element IMG\n * @param {template} ngSrc any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngSrcset\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrcset` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * ```\n *\n * @element IMG\n * @param {template} ngSrcset any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngDisabled\n * @restrict A\n * @priority 100\n *\n * @description\n *\n * The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:\n * ```html\n * <div ng-init=\"scope = { isDisabled: false }\">\n *  <button disabled=\"{{scope.isDisabled}}\">Disabled</button>\n * </div>\n * ```\n *\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as disabled. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngDisabled` directive solves this problem for the `disabled` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        Click me to toggle: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <button ng-model=\"button\" ng-disabled=\"checked\">Button</button>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle button', function() {\n          expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,\n *     then special attribute \"disabled\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngChecked\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as checked. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngChecked` directive solves this problem for the `checked` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to check both: <input type=\"checkbox\" ng-model=\"master\"><br/>\n        <input id=\"checkSlave\" type=\"checkbox\" ng-checked=\"master\">\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should check both checkBoxes', function() {\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();\n          element(by.model('master')).click();\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,\n *     then special attribute \"checked\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngReadonly\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as readonly. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngReadonly` directive solves this problem for the `readonly` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to make text readonly: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <input type=\"text\" ng-readonly=\"checked\" value=\"I'm Angular\"/>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle readonly attr', function() {\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,\n *     then special attribute \"readonly\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSelected\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as selected. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngSelected` directive solves this problem for the `selected` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to select: <input type=\"checkbox\" ng-model=\"selected\"><br/>\n        <select>\n          <option>Hello!</option>\n          <option id=\"greet\" ng-selected=\"selected\">Greetings!</option>\n        </select>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should select Greetings!', function() {\n          expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();\n          element(by.model('selected')).click();\n          expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element OPTION\n * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,\n *     then special attribute \"selected\" will be set on the element\n */\n\n/**\n * @ngdoc directive\n * @name ngOpen\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as open. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngOpen` directive solves this problem for the `open` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n     <example>\n       <file name=\"index.html\">\n         Check me check multiple: <input type=\"checkbox\" ng-model=\"open\"><br/>\n         <details id=\"details\" ng-open=\"open\">\n            <summary>Show/Hide me</summary>\n         </details>\n       </file>\n       <file name=\"protractor.js\" type=\"protractor\">\n         it('should toggle open', function() {\n           expect(element(by.id('details')).getAttribute('open')).toBeFalsy();\n           element(by.model('open')).click();\n           expect(element(by.id('details')).getAttribute('open')).toBeTruthy();\n         });\n       </file>\n     </example>\n *\n * @element DETAILS\n * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,\n *     then special attribute \"open\" will be set on the element\n */\n\nvar ngAttributeAliasDirectives = {};\n\n\n// boolean attrs are evaluated\nforEach(BOOLEAN_ATTR, function(propName, attrName) {\n  // binding to multiple is not supported\n  if (propName == \"multiple\") return;\n\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 100,\n      link: function(scope, element, attr) {\n        scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {\n          attr.$set(attrName, !!value);\n        });\n      }\n    };\n  };\n});\n\n\n// ng-src, ng-srcset, ng-href are interpolated\nforEach(['src', 'srcset', 'href'], function(attrName) {\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 99, // it needs to run after the attributes are interpolated\n      link: function(scope, element, attr) {\n        var propName = attrName,\n            name = attrName;\n\n        if (attrName === 'href' &&\n            toString.call(element.prop('href')) === '[object SVGAnimatedString]') {\n          name = 'xlinkHref';\n          attr.$attr[name] = 'xlink:href';\n          propName = null;\n        }\n\n        attr.$observe(normalized, function(value) {\n          if (!value)\n             return;\n\n          attr.$set(name, value);\n\n          // on IE, if \"ng:src\" directive declaration is used and \"src\" attribute doesn't exist\n          // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need\n          // to set the property as well to achieve the desired effect.\n          // we use attr[attrName] value since $set can sanitize the url.\n          if (msie && propName) element.prop(propName, attr[name]);\n        });\n      }\n    };\n  };\n});\n\n/* global -nullFormCtrl */\nvar nullFormCtrl = {\n  $addControl: noop,\n  $removeControl: noop,\n  $setValidity: noop,\n  $setDirty: noop,\n  $setPristine: noop\n};\n\n/**\n * @ngdoc type\n * @name form.FormController\n *\n * @property {boolean} $pristine True if user has not interacted with the form yet.\n * @property {boolean} $dirty True if user has already interacted with the form.\n * @property {boolean} $valid True if all of the containing forms and controls are valid.\n * @property {boolean} $invalid True if at least one containing control or form is invalid.\n *\n * @property {Object} $error Is an object hash, containing references to all invalid controls or\n *  forms, where:\n *\n *  - keys are validation tokens (error names),\n *  - values are arrays of controls or forms that are invalid for given error name.\n *\n *\n *  Built-in validation tokens:\n *\n *  - `email`\n *  - `max`\n *  - `maxlength`\n *  - `min`\n *  - `minlength`\n *  - `number`\n *  - `pattern`\n *  - `required`\n *  - `url`\n *\n * @description\n * `FormController` keeps track of all its controls and nested forms as well as state of them,\n * such as being valid/invalid or dirty/pristine.\n *\n * Each {@link ng.directive:form form} directive creates an instance\n * of `FormController`.\n *\n */\n//asks for $scope to fool the BC controller module\nFormController.$inject = ['$element', '$attrs', '$scope', '$animate'];\nfunction FormController(element, attrs, $scope, $animate) {\n  var form = this,\n      parentForm = element.parent().controller('form') || nullFormCtrl,\n      invalidCount = 0, // used to easily determine if we are valid\n      errors = form.$error = {},\n      controls = [];\n\n  // init state\n  form.$name = attrs.name || attrs.ngForm;\n  form.$dirty = false;\n  form.$pristine = true;\n  form.$valid = true;\n  form.$invalid = false;\n\n  parentForm.$addControl(form);\n\n  // Setup initial state of the control\n  element.addClass(PRISTINE_CLASS);\n  toggleValidCss(true);\n\n  // convenience method for easy toggling of classes\n  function toggleValidCss(isValid, validationErrorKey) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n    $animate.removeClass(element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey);\n    $animate.addClass(element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);\n  }\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$addControl\n   *\n   * @description\n   * Register a control with the form.\n   *\n   * Input elements using ngModelController do this automatically when they are linked.\n   */\n  form.$addControl = function(control) {\n    // Breaking change - before, inputs whose name was \"hasOwnProperty\" were quietly ignored\n    // and not added to the scope.  Now we throw an error.\n    assertNotHasOwnProperty(control.$name, 'input');\n    controls.push(control);\n\n    if (control.$name) {\n      form[control.$name] = control;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$removeControl\n   *\n   * @description\n   * Deregister a control from the form.\n   *\n   * Input elements using ngModelController do this automatically when they are destroyed.\n   */\n  form.$removeControl = function(control) {\n    if (control.$name && form[control.$name] === control) {\n      delete form[control.$name];\n    }\n    forEach(errors, function(queue, validationToken) {\n      form.$setValidity(validationToken, true, control);\n    });\n\n    arrayRemove(controls, control);\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setValidity\n   *\n   * @description\n   * Sets the validity of a form control.\n   *\n   * This method will also propagate to parent forms.\n   */\n  form.$setValidity = function(validationToken, isValid, control) {\n    var queue = errors[validationToken];\n\n    if (isValid) {\n      if (queue) {\n        arrayRemove(queue, control);\n        if (!queue.length) {\n          invalidCount--;\n          if (!invalidCount) {\n            toggleValidCss(isValid);\n            form.$valid = true;\n            form.$invalid = false;\n          }\n          errors[validationToken] = false;\n          toggleValidCss(true, validationToken);\n          parentForm.$setValidity(validationToken, true, form);\n        }\n      }\n\n    } else {\n      if (!invalidCount) {\n        toggleValidCss(isValid);\n      }\n      if (queue) {\n        if (includes(queue, control)) return;\n      } else {\n        errors[validationToken] = queue = [];\n        invalidCount++;\n        toggleValidCss(false, validationToken);\n        parentForm.$setValidity(validationToken, false, form);\n      }\n      queue.push(control);\n\n      form.$valid = false;\n      form.$invalid = true;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setDirty\n   *\n   * @description\n   * Sets the form to a dirty state.\n   *\n   * This method can be called to add the 'ng-dirty' class and set the form to a dirty\n   * state (ng-dirty class). This method will also propagate to parent forms.\n   */\n  form.$setDirty = function() {\n    $animate.removeClass(element, PRISTINE_CLASS);\n    $animate.addClass(element, DIRTY_CLASS);\n    form.$dirty = true;\n    form.$pristine = false;\n    parentForm.$setDirty();\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setPristine\n   *\n   * @description\n   * Sets the form to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the form to its pristine\n   * state (ng-pristine class). This method will also propagate to all the controls contained\n   * in this form.\n   *\n   * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after\n   * saving or resetting it.\n   */\n  form.$setPristine = function () {\n    $animate.removeClass(element, DIRTY_CLASS);\n    $animate.addClass(element, PRISTINE_CLASS);\n    form.$dirty = false;\n    form.$pristine = true;\n    forEach(controls, function(control) {\n      control.$setPristine();\n    });\n  };\n}\n\n\n/**\n * @ngdoc directive\n * @name ngForm\n * @restrict EAC\n *\n * @description\n * Nestable alias of {@link ng.directive:form `form`} directive. HTML\n * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a\n * sub-group of controls needs to be determined.\n *\n * Note: the purpose of `ngForm` is to group controls,\n * but not to be a replacement for the `<form>` tag with all of its capabilities\n * (e.g. posting to the server, ...).\n *\n * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n */\n\n /**\n * @ngdoc directive\n * @name form\n * @restrict E\n *\n * @description\n * Directive that instantiates\n * {@link form.FormController FormController}.\n *\n * If the `name` attribute is specified, the form controller is published onto the current scope under\n * this name.\n *\n * # Alias: {@link ng.directive:ngForm `ngForm`}\n *\n * In Angular forms can be nested. This means that the outer form is valid when all of the child\n * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so\n * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to\n * `<form>` but can be nested.  This allows you to have nested forms, which is very useful when\n * using Angular validation directives in forms that are dynamically generated using the\n * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`\n * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an\n * `ngForm` directive and nest these in an outer `form` element.\n *\n *\n * # CSS classes\n *  - `ng-valid` is set if the form is valid.\n *  - `ng-invalid` is set if the form is invalid.\n *  - `ng-pristine` is set if the form is pristine.\n *  - `ng-dirty` is set if the form is dirty.\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n *\n * # Submitting a form and preventing the default action\n *\n * Since the role of forms in client-side Angular applications is different than in classical\n * roundtrip apps, it is desirable for the browser not to translate the form submission into a full\n * page reload that sends the data to the server. Instead some javascript logic should be triggered\n * to handle the form submission in an application-specific way.\n *\n * For this reason, Angular prevents the default action (form submission to the server) unless the\n * `<form>` element has an `action` attribute specified.\n *\n * You can use one of the following two ways to specify what javascript method should be called when\n * a form is submitted:\n *\n * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element\n * - {@link ng.directive:ngClick ngClick} directive on the first\n  *  button or input field of type submit (input[type=submit])\n *\n * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}\n * or {@link ng.directive:ngClick ngClick} directives.\n * This is because of the following form submission rules in the HTML specification:\n *\n * - If a form has only one input field then hitting enter in this field triggers form submit\n * (`ngSubmit`)\n * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter\n * doesn't trigger submit\n * - if a form has one or more input fields and one or more buttons or input[type=submit] then\n * hitting enter in any of the input fields will trigger the click handler on the *first* button or\n * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)\n *\n * @param {string=} name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n * ## Animation Hooks\n *\n * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.\n * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any\n * other validations that are performed within the form. Animations in ngForm are similar to how\n * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well\n * as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style a form element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-form {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-form.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n    <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\">\n      <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.userType = 'guest';\n         }\n       </script>\n       <style>\n        .my-form {\n          -webkit-transition:all linear 0.5s;\n          transition:all linear 0.5s;\n          background: transparent;\n        }\n        .my-form.ng-invalid {\n          background: red;\n        }\n       </style>\n       <form name=\"myForm\" ng-controller=\"Ctrl\" class=\"my-form\">\n         userType: <input name=\"input\" ng-model=\"userType\" required>\n         <span class=\"error\" ng-show=\"myForm.input.$error.required\">Required!</span><br>\n         <tt>userType = {{userType}}</tt><br>\n         <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>\n         <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should initialize to model', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n\n          expect(userType.getText()).toContain('guest');\n          expect(valid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var userInput = element(by.model('userType'));\n\n          userInput.clear();\n          userInput.sendKeys('');\n\n          expect(userType.getText()).toEqual('userType =');\n          expect(valid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n *\n */\nvar formDirectiveFactory = function(isNgForm) {\n  return ['$timeout', function($timeout) {\n    var formDirective = {\n      name: 'form',\n      restrict: isNgForm ? 'EAC' : 'E',\n      controller: FormController,\n      compile: function() {\n        return {\n          pre: function(scope, formElement, attr, controller) {\n            if (!attr.action) {\n              // we can't use jq events because if a form is destroyed during submission the default\n              // action is not prevented. see #1238\n              //\n              // IE 9 is not affected because it doesn't fire a submit event and try to do a full\n              // page reload if the form was destroyed by submission of the form via a click handler\n              // on a button in the form. Looks like an IE9 specific bug.\n              var preventDefaultListener = function(event) {\n                event.preventDefault\n                  ? event.preventDefault()\n                  : event.returnValue = false; // IE\n              };\n\n              addEventListenerFn(formElement[0], 'submit', preventDefaultListener);\n\n              // unregister the preventDefault listener so that we don't not leak memory but in a\n              // way that will achieve the prevention of the default action.\n              formElement.on('$destroy', function() {\n                $timeout(function() {\n                  removeEventListenerFn(formElement[0], 'submit', preventDefaultListener);\n                }, 0, false);\n              });\n            }\n\n            var parentFormCtrl = formElement.parent().controller('form'),\n                alias = attr.name || attr.ngForm;\n\n            if (alias) {\n              setter(scope, alias, controller, alias);\n            }\n            if (parentFormCtrl) {\n              formElement.on('$destroy', function() {\n                parentFormCtrl.$removeControl(controller);\n                if (alias) {\n                  setter(scope, alias, undefined, alias);\n                }\n                extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards\n              });\n            }\n          }\n        };\n      }\n    };\n\n    return formDirective;\n  }];\n};\n\nvar formDirective = formDirectiveFactory();\nvar ngFormDirective = formDirectiveFactory(true);\n\n/* global\n\n    -VALID_CLASS,\n    -INVALID_CLASS,\n    -PRISTINE_CLASS,\n    -DIRTY_CLASS\n*/\n\nvar URL_REGEXP = /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/;\nvar EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\\.[a-z0-9-]+)*$/i;\nvar NUMBER_REGEXP = /^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))\\s*$/;\n\nvar inputType = {\n\n  /**\n   * @ngdoc input\n   * @name input[text]\n   *\n   * @description\n   * Standard HTML text input with angular data binding.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Adds `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n   *\n   * @example\n      <example name=\"text-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'guest';\n             $scope.word = /^\\s*\\w*\\s*$/;\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Single word: <input type=\"text\" name=\"input\" ng-model=\"text\"\n                               ng-pattern=\"word\" required ng-trim=\"false\">\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.pattern\">\n             Single word only!</span>\n\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('guest');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if multi word', function() {\n            input.clear();\n            input.sendKeys('hello world');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'text': textInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[number]\n   *\n   * @description\n   * Text input with number validation and transformation. Sets the `number` validation\n   * error if not a valid number.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"number-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.value = 12;\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Number: <input type=\"number\" name=\"input\" ng-model=\"value\"\n                          min=\"0\" max=\"99\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.number\">\n             Not valid number!</span>\n           <tt>value = {{value}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var value = element(by.binding('value'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('value'));\n\n          it('should initialize to model', function() {\n            expect(value.getText()).toContain('12');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if over max', function() {\n            input.clear();\n            input.sendKeys('123');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'number': numberInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[url]\n   *\n   * @description\n   * Text input with URL validation. Sets the `url` validation error key if the content is not a\n   * valid URL.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"url-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'http://google.com';\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           URL: <input type=\"url\" name=\"input\" ng-model=\"text\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.url\">\n             Not valid url!</span>\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n           <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('http://google.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not url', function() {\n            input.clear();\n            input.sendKeys('box');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'url': urlInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[email]\n   *\n   * @description\n   * Text input with email validation. Sets the `email` validation error key if not a valid email\n   * address.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"email-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'me@example.com';\n           }\n         </script>\n           <form name=\"myForm\" ng-controller=\"Ctrl\">\n             Email: <input type=\"email\" name=\"input\" ng-model=\"text\" required>\n             <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n               Required!</span>\n             <span class=\"error\" ng-show=\"myForm.input.$error.email\">\n               Not valid email!</span>\n             <tt>text = {{text}}</tt><br/>\n             <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n             <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n             <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n             <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n             <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>\n           </form>\n         </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('me@example.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not email', function() {\n            input.clear();\n            input.sendKeys('xxx');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'email': emailInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[radio]\n   *\n   * @description\n   * HTML radio button.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string} value The value to which the expression should be set when selected.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {string} ngValue Angular expression which sets the value to which the expression should\n   *    be set when selected.\n   *\n   * @example\n      <example name=\"radio-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.color = 'blue';\n             $scope.specialValue = {\n               \"id\": \"12345\",\n               \"value\": \"green\"\n             };\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           <input type=\"radio\" ng-model=\"color\" value=\"red\">  Red <br/>\n           <input type=\"radio\" ng-model=\"color\" ng-value=\"specialValue\"> Green <br/>\n           <input type=\"radio\" ng-model=\"color\" value=\"blue\"> Blue <br/>\n           <tt>color = {{color | json}}</tt><br/>\n          </form>\n          Note that `ng-value=\"specialValue\"` sets radio item's value to be the value of `$scope.specialValue`.\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var color = element(by.binding('color'));\n\n            expect(color.getText()).toContain('blue');\n\n            element.all(by.model('color')).get(0).click();\n\n            expect(color.getText()).toContain('red');\n          });\n        </file>\n      </example>\n   */\n  'radio': radioInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[checkbox]\n   *\n   * @description\n   * HTML checkbox.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngTrueValue The value to which the expression should be set when selected.\n   * @param {string=} ngFalseValue The value to which the expression should be set when not selected.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"checkbox-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.value1 = true;\n             $scope.value2 = 'YES'\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Value1: <input type=\"checkbox\" ng-model=\"value1\"> <br/>\n           Value2: <input type=\"checkbox\" ng-model=\"value2\"\n                          ng-true-value=\"YES\" ng-false-value=\"NO\"> <br/>\n           <tt>value1 = {{value1}}</tt><br/>\n           <tt>value2 = {{value2}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var value1 = element(by.binding('value1'));\n            var value2 = element(by.binding('value2'));\n\n            expect(value1.getText()).toContain('true');\n            expect(value2.getText()).toContain('YES');\n\n            element(by.model('value1')).click();\n            element(by.model('value2')).click();\n\n            expect(value1.getText()).toContain('false');\n            expect(value2.getText()).toContain('NO');\n          });\n        </file>\n      </example>\n   */\n  'checkbox': checkboxInputType,\n\n  'hidden': noop,\n  'button': noop,\n  'submit': noop,\n  'reset': noop,\n  'file': noop\n};\n\n// A helper function to call $setValidity and return the value / undefined,\n// a pattern that is repeated a lot in the input validation logic.\nfunction validate(ctrl, validatorName, validity, value){\n  ctrl.$setValidity(validatorName, validity);\n  return validity ? value : undefined;\n}\n\n\nfunction addNativeHtml5Validators(ctrl, validatorName, element) {\n  var validity = element.prop('validity');\n  if (isObject(validity)) {\n    var validator = function(value) {\n      // Don't overwrite previous validation, don't consider valueMissing to apply (ng-required can\n      // perform the required validation)\n      if (!ctrl.$error[validatorName] && (validity.badInput || validity.customError ||\n          validity.typeMismatch) && !validity.valueMissing) {\n        ctrl.$setValidity(validatorName, false);\n        return;\n      }\n      return value;\n    };\n    ctrl.$parsers.push(validator);\n  }\n}\n\nfunction textInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  var validity = element.prop('validity');\n  // In composition mode, users are still inputing intermediate text buffer,\n  // hold the listener until composition is done.\n  // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent\n  if (!$sniffer.android) {\n    var composing = false;\n\n    element.on('compositionstart', function(data) {\n      composing = true;\n    });\n\n    element.on('compositionend', function() {\n      composing = false;\n      listener();\n    });\n  }\n\n  var listener = function() {\n    if (composing) return;\n    var value = element.val();\n\n    // By default we will trim the value\n    // If the attribute ng-trim exists we will avoid trimming\n    // e.g. <input ng-model=\"foo\" ng-trim=\"false\">\n    if (toBoolean(attr.ngTrim || 'T')) {\n      value = trim(value);\n    }\n\n    if (ctrl.$viewValue !== value ||\n        // If the value is still empty/falsy, and there is no `required` error, run validators\n        // again. This enables HTML5 constraint validation errors to affect Angular validation\n        // even when the first character entered causes an error.\n        (validity && value === '' && !validity.valueMissing)) {\n      if (scope.$$phase) {\n        ctrl.$setViewValue(value);\n      } else {\n        scope.$apply(function() {\n          ctrl.$setViewValue(value);\n        });\n      }\n    }\n  };\n\n  // if the browser does support \"input\" event, we are fine - except on IE9 which doesn't fire the\n  // input event on backspace, delete or cut\n  if ($sniffer.hasEvent('input')) {\n    element.on('input', listener);\n  } else {\n    var timeout;\n\n    var deferListener = function() {\n      if (!timeout) {\n        timeout = $browser.defer(function() {\n          listener();\n          timeout = null;\n        });\n      }\n    };\n\n    element.on('keydown', function(event) {\n      var key = event.keyCode;\n\n      // ignore\n      //    command            modifiers                   arrows\n      if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;\n\n      deferListener();\n    });\n\n    // if user modifies input value using context menu in IE, we need \"paste\" and \"cut\" events to catch it\n    if ($sniffer.hasEvent('paste')) {\n      element.on('paste cut', deferListener);\n    }\n  }\n\n  // if user paste into input using mouse on older browser\n  // or form autocomplete on newer browser, we need \"change\" event to catch it\n  element.on('change', listener);\n\n  ctrl.$render = function() {\n    element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);\n  };\n\n  // pattern validator\n  var pattern = attr.ngPattern,\n      patternValidator,\n      match;\n\n  if (pattern) {\n    var validateRegex = function(regexp, value) {\n      return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value);\n    };\n    match = pattern.match(/^\\/(.*)\\/([gim]*)$/);\n    if (match) {\n      pattern = new RegExp(match[1], match[2]);\n      patternValidator = function(value) {\n        return validateRegex(pattern, value);\n      };\n    } else {\n      patternValidator = function(value) {\n        var patternObj = scope.$eval(pattern);\n\n        if (!patternObj || !patternObj.test) {\n          throw minErr('ngPattern')('noregexp',\n            'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern,\n            patternObj, startingTag(element));\n        }\n        return validateRegex(patternObj, value);\n      };\n    }\n\n    ctrl.$formatters.push(patternValidator);\n    ctrl.$parsers.push(patternValidator);\n  }\n\n  // min length validator\n  if (attr.ngMinlength) {\n    var minlength = int(attr.ngMinlength);\n    var minLengthValidator = function(value) {\n      return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value);\n    };\n\n    ctrl.$parsers.push(minLengthValidator);\n    ctrl.$formatters.push(minLengthValidator);\n  }\n\n  // max length validator\n  if (attr.ngMaxlength) {\n    var maxlength = int(attr.ngMaxlength);\n    var maxLengthValidator = function(value) {\n      return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value);\n    };\n\n    ctrl.$parsers.push(maxLengthValidator);\n    ctrl.$formatters.push(maxLengthValidator);\n  }\n}\n\nfunction numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  ctrl.$parsers.push(function(value) {\n    var empty = ctrl.$isEmpty(value);\n    if (empty || NUMBER_REGEXP.test(value)) {\n      ctrl.$setValidity('number', true);\n      return value === '' ? null : (empty ? value : parseFloat(value));\n    } else {\n      ctrl.$setValidity('number', false);\n      return undefined;\n    }\n  });\n\n  addNativeHtml5Validators(ctrl, 'number', element);\n\n  ctrl.$formatters.push(function(value) {\n    return ctrl.$isEmpty(value) ? '' : '' + value;\n  });\n\n  if (attr.min) {\n    var minValidator = function(value) {\n      var min = parseFloat(attr.min);\n      return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value);\n    };\n\n    ctrl.$parsers.push(minValidator);\n    ctrl.$formatters.push(minValidator);\n  }\n\n  if (attr.max) {\n    var maxValidator = function(value) {\n      var max = parseFloat(attr.max);\n      return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value);\n    };\n\n    ctrl.$parsers.push(maxValidator);\n    ctrl.$formatters.push(maxValidator);\n  }\n\n  ctrl.$formatters.push(function(value) {\n    return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value);\n  });\n}\n\nfunction urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  var urlValidator = function(value) {\n    return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value);\n  };\n\n  ctrl.$formatters.push(urlValidator);\n  ctrl.$parsers.push(urlValidator);\n}\n\nfunction emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  var emailValidator = function(value) {\n    return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value);\n  };\n\n  ctrl.$formatters.push(emailValidator);\n  ctrl.$parsers.push(emailValidator);\n}\n\nfunction radioInputType(scope, element, attr, ctrl) {\n  // make the name unique, if not defined\n  if (isUndefined(attr.name)) {\n    element.attr('name', nextUid());\n  }\n\n  element.on('click', function() {\n    if (element[0].checked) {\n      scope.$apply(function() {\n        ctrl.$setViewValue(attr.value);\n      });\n    }\n  });\n\n  ctrl.$render = function() {\n    var value = attr.value;\n    element[0].checked = (value == ctrl.$viewValue);\n  };\n\n  attr.$observe('value', ctrl.$render);\n}\n\nfunction checkboxInputType(scope, element, attr, ctrl) {\n  var trueValue = attr.ngTrueValue,\n      falseValue = attr.ngFalseValue;\n\n  if (!isString(trueValue)) trueValue = true;\n  if (!isString(falseValue)) falseValue = false;\n\n  element.on('click', function() {\n    scope.$apply(function() {\n      ctrl.$setViewValue(element[0].checked);\n    });\n  });\n\n  ctrl.$render = function() {\n    element[0].checked = ctrl.$viewValue;\n  };\n\n  // Override the standard `$isEmpty` because a value of `false` means empty in a checkbox.\n  ctrl.$isEmpty = function(value) {\n    return value !== trueValue;\n  };\n\n  ctrl.$formatters.push(function(value) {\n    return value === trueValue;\n  });\n\n  ctrl.$parsers.push(function(value) {\n    return value ? trueValue : falseValue;\n  });\n}\n\n\n/**\n * @ngdoc directive\n * @name textarea\n * @restrict E\n *\n * @description\n * HTML textarea element control with angular data-binding. The data-binding and validation\n * properties of this element are exactly the same as those of the\n * {@link ng.directive:input input element}.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n */\n\n\n/**\n * @ngdoc directive\n * @name input\n * @restrict E\n *\n * @description\n * HTML input element control with angular data-binding. Input control follows HTML5 input types\n * and polyfills the HTML5 validation behavior for older browsers.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {boolean=} ngRequired Sets `required` attribute if set to true\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n *\n * @example\n    <example name=\"input-directive\">\n      <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.user = {name: 'guest', last: 'visitor'};\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <form name=\"myForm\">\n           User name: <input type=\"text\" name=\"userName\" ng-model=\"user.name\" required>\n           <span class=\"error\" ng-show=\"myForm.userName.$error.required\">\n             Required!</span><br>\n           Last name: <input type=\"text\" name=\"lastName\" ng-model=\"user.last\"\n             ng-minlength=\"3\" ng-maxlength=\"10\">\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.minlength\">\n             Too short!</span>\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.maxlength\">\n             Too long!</span><br>\n         </form>\n         <hr>\n         <tt>user = {{user}}</tt><br/>\n         <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br>\n         <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br>\n         <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br>\n         <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n         <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br>\n         <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br>\n       </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var user = element(by.binding('{{user}}'));\n        var userNameValid = element(by.binding('myForm.userName.$valid'));\n        var lastNameValid = element(by.binding('myForm.lastName.$valid'));\n        var lastNameError = element(by.binding('myForm.lastName.$error'));\n        var formValid = element(by.binding('myForm.$valid'));\n        var userNameInput = element(by.model('user.name'));\n        var userLastInput = element(by.model('user.last'));\n\n        it('should initialize to model', function() {\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty when required', function() {\n          userNameInput.clear();\n          userNameInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('false');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be valid if empty when min length is set', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"\"}');\n          expect(lastNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if less than required min length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('xx');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('minlength');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be invalid if longer than max length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('some ridiculously long name');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('maxlength');\n          expect(formValid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n */\nvar inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) {\n  return {\n    restrict: 'E',\n    require: '?ngModel',\n    link: function(scope, element, attr, ctrl) {\n      if (ctrl) {\n        (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer,\n                                                            $browser);\n      }\n    }\n  };\n}];\n\nvar VALID_CLASS = 'ng-valid',\n    INVALID_CLASS = 'ng-invalid',\n    PRISTINE_CLASS = 'ng-pristine',\n    DIRTY_CLASS = 'ng-dirty';\n\n/**\n * @ngdoc type\n * @name ngModel.NgModelController\n *\n * @property {string} $viewValue Actual string value in the view.\n * @property {*} $modelValue The value in the model, that the control is bound to.\n * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever\n       the control reads value from the DOM.  Each function is called, in turn, passing the value\n       through to the next. The last return value is used to populate the model.\n       Used to sanitize / convert the value as well as validation. For validation,\n       the parsers should update the validity state using\n       {@link ngModel.NgModelController#$setValidity $setValidity()},\n       and return `undefined` for invalid values.\n\n *\n * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever\n       the model value changes. Each function is called, in turn, passing the value through to the\n       next. Used to format / convert values for display in the control and validation.\n *      ```js\n *      function formatter(value) {\n *        if (value) {\n *          return value.toUpperCase();\n *        }\n *      }\n *      ngModel.$formatters.push(formatter);\n *      ```\n *\n * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the\n *     view value has changed. It is called with no arguments, and its return value is ignored.\n *     This can be used in place of additional $watches against the model value.\n *\n * @property {Object} $error An object hash with all errors as keys.\n *\n * @property {boolean} $pristine True if user has not interacted with the control yet.\n * @property {boolean} $dirty True if user has already interacted with the control.\n * @property {boolean} $valid True if there is no error.\n * @property {boolean} $invalid True if at least one error on the control.\n *\n * @description\n *\n * `NgModelController` provides API for the `ng-model` directive. The controller contains\n * services for data-binding, validation, CSS updates, and value formatting and parsing. It\n * purposefully does not contain any logic which deals with DOM rendering or listening to\n * DOM events. Such DOM related logic should be provided by other directives which make use of\n * `NgModelController` for data-binding.\n *\n * ## Custom Control Example\n * This example shows how to use `NgModelController` with a custom control to achieve\n * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)\n * collaborate together to achieve the desired result.\n *\n * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element\n * contents be edited in place by the user.  This will not work on older browsers.\n *\n * <example name=\"NgModelController\" module=\"customControl\">\n    <file name=\"style.css\">\n      [contenteditable] {\n        border: 1px solid black;\n        background-color: white;\n        min-height: 20px;\n      }\n\n      .ng-invalid {\n        border: 1px solid red;\n      }\n\n    </file>\n    <file name=\"script.js\">\n      angular.module('customControl', []).\n        directive('contenteditable', function() {\n          return {\n            restrict: 'A', // only activate on element attribute\n            require: '?ngModel', // get a hold of NgModelController\n            link: function(scope, element, attrs, ngModel) {\n              if(!ngModel) return; // do nothing if no ng-model\n\n              // Specify how UI should be updated\n              ngModel.$render = function() {\n                element.html(ngModel.$viewValue || '');\n              };\n\n              // Listen for change events to enable binding\n              element.on('blur keyup change', function() {\n                scope.$apply(read);\n              });\n              read(); // initialize\n\n              // Write data to the model\n              function read() {\n                var html = element.html();\n                // When we clear the content editable the browser leaves a <br> behind\n                // If strip-br attribute is provided then we strip this out\n                if( attrs.stripBr && html == '<br>' ) {\n                  html = '';\n                }\n                ngModel.$setViewValue(html);\n              }\n            }\n          };\n        });\n    </file>\n    <file name=\"index.html\">\n      <form name=\"myForm\">\n       <div contenteditable\n            name=\"myWidget\" ng-model=\"userContent\"\n            strip-br=\"true\"\n            required>Change me!</div>\n        <span ng-show=\"myForm.myWidget.$error.required\">Required!</span>\n       <hr>\n       <textarea ng-model=\"userContent\"></textarea>\n      </form>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n    it('should data-bind and become invalid', function() {\n      if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {\n        // SafariDriver can't handle contenteditable\n        // and Firefox driver can't clear contenteditables very well\n        return;\n      }\n      var contentEditable = element(by.css('[contenteditable]'));\n      var content = 'Change me!';\n\n      expect(contentEditable.getText()).toEqual(content);\n\n      contentEditable.clear();\n      contentEditable.sendKeys(protractor.Key.BACK_SPACE);\n      expect(contentEditable.getText()).toEqual('');\n      expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);\n    });\n    </file>\n * </example>\n *\n *\n */\nvar NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate',\n    function($scope, $exceptionHandler, $attr, $element, $parse, $animate) {\n  this.$viewValue = Number.NaN;\n  this.$modelValue = Number.NaN;\n  this.$parsers = [];\n  this.$formatters = [];\n  this.$viewChangeListeners = [];\n  this.$pristine = true;\n  this.$dirty = false;\n  this.$valid = true;\n  this.$invalid = false;\n  this.$name = $attr.name;\n\n  var ngModelGet = $parse($attr.ngModel),\n      ngModelSet = ngModelGet.assign;\n\n  if (!ngModelSet) {\n    throw minErr('ngModel')('nonassign', \"Expression '{0}' is non-assignable. Element: {1}\",\n        $attr.ngModel, startingTag($element));\n  }\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$render\n   *\n   * @description\n   * Called when the view needs to be updated. It is expected that the user of the ng-model\n   * directive will implement this method.\n   */\n  this.$render = noop;\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$isEmpty\n   *\n   * @description\n   * This is called when we need to determine if the value of the input is empty.\n   *\n   * For instance, the required directive does this to work out if the input has data or not.\n   * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.\n   *\n   * You can override this for input directives whose concept of being empty is different to the\n   * default. The `checkboxInputType` directive does this because in its case a value of `false`\n   * implies empty.\n   *\n   * @param {*} value Reference to check.\n   * @returns {boolean} True if `value` is empty.\n   */\n  this.$isEmpty = function(value) {\n    return isUndefined(value) || value === '' || value === null || value !== value;\n  };\n\n  var parentForm = $element.inheritedData('$formController') || nullFormCtrl,\n      invalidCount = 0, // used to easily determine if we are valid\n      $error = this.$error = {}; // keep invalid keys here\n\n\n  // Setup initial state of the control\n  $element.addClass(PRISTINE_CLASS);\n  toggleValidCss(true);\n\n  // convenience method for easy toggling of classes\n  function toggleValidCss(isValid, validationErrorKey) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n    $animate.removeClass($element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey);\n    $animate.addClass($element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);\n  }\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setValidity\n   *\n   * @description\n   * Change the validity state, and notifies the form when the control changes validity. (i.e. it\n   * does not notify form if given validator is already marked as invalid).\n   *\n   * This method should be called by validators - i.e. the parser or formatter functions.\n   *\n   * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign\n   *        to `$error[validationErrorKey]=isValid` so that it is available for data-binding.\n   *        The `validationErrorKey` should be in camelCase and will get converted into dash-case\n   *        for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`\n   *        class and can be bound to as  `{{someForm.someControl.$error.myError}}` .\n   * @param {boolean} isValid Whether the current state is valid (true) or invalid (false).\n   */\n  this.$setValidity = function(validationErrorKey, isValid) {\n    // Purposeful use of ! here to cast isValid to boolean in case it is undefined\n    // jshint -W018\n    if ($error[validationErrorKey] === !isValid) return;\n    // jshint +W018\n\n    if (isValid) {\n      if ($error[validationErrorKey]) invalidCount--;\n      if (!invalidCount) {\n        toggleValidCss(true);\n        this.$valid = true;\n        this.$invalid = false;\n      }\n    } else {\n      toggleValidCss(false);\n      this.$invalid = true;\n      this.$valid = false;\n      invalidCount++;\n    }\n\n    $error[validationErrorKey] = !isValid;\n    toggleValidCss(isValid, validationErrorKey);\n\n    parentForm.$setValidity(validationErrorKey, isValid, this);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setPristine\n   *\n   * @description\n   * Sets the control to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the control to its pristine\n   * state (ng-pristine class).\n   */\n  this.$setPristine = function () {\n    this.$dirty = false;\n    this.$pristine = true;\n    $animate.removeClass($element, DIRTY_CLASS);\n    $animate.addClass($element, PRISTINE_CLASS);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setViewValue\n   *\n   * @description\n   * Update the view value.\n   *\n   * This method should be called when the view value changes, typically from within a DOM event handler.\n   * For example {@link ng.directive:input input} and\n   * {@link ng.directive:select select} directives call it.\n   *\n   * It will update the $viewValue, then pass this value through each of the functions in `$parsers`,\n   * which includes any validators. The value that comes out of this `$parsers` pipeline, be applied to\n   * `$modelValue` and the **expression** specified in the `ng-model` attribute.\n   *\n   * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called.\n   *\n   * Note that calling this function does not trigger a `$digest`.\n   *\n   * @param {string} value Value from the view.\n   */\n  this.$setViewValue = function(value) {\n    this.$viewValue = value;\n\n    // change to dirty\n    if (this.$pristine) {\n      this.$dirty = true;\n      this.$pristine = false;\n      $animate.removeClass($element, PRISTINE_CLASS);\n      $animate.addClass($element, DIRTY_CLASS);\n      parentForm.$setDirty();\n    }\n\n    forEach(this.$parsers, function(fn) {\n      value = fn(value);\n    });\n\n    if (this.$modelValue !== value) {\n      this.$modelValue = value;\n      ngModelSet($scope, value);\n      forEach(this.$viewChangeListeners, function(listener) {\n        try {\n          listener();\n        } catch(e) {\n          $exceptionHandler(e);\n        }\n      });\n    }\n  };\n\n  // model -> value\n  var ctrl = this;\n\n  $scope.$watch(function ngModelWatch() {\n    var value = ngModelGet($scope);\n\n    // if scope model value and ngModel value are out of sync\n    if (ctrl.$modelValue !== value) {\n\n      var formatters = ctrl.$formatters,\n          idx = formatters.length;\n\n      ctrl.$modelValue = value;\n      while(idx--) {\n        value = formatters[idx](value);\n      }\n\n      if (ctrl.$viewValue !== value) {\n        ctrl.$viewValue = value;\n        ctrl.$render();\n      }\n    }\n\n    return value;\n  });\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngModel\n *\n * @element input\n *\n * @description\n * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a\n * property on the scope using {@link ngModel.NgModelController NgModelController},\n * which is created and exposed by this directive.\n *\n * `ngModel` is responsible for:\n *\n * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`\n *   require.\n * - Providing validation behavior (i.e. required, number, email, url).\n * - Keeping the state of the control (valid/invalid, dirty/pristine, validation errors).\n * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`) including animations.\n * - Registering the control with its parent {@link ng.directive:form form}.\n *\n * Note: `ngModel` will try to bind to the property given by evaluating the expression on the\n * current scope. If the property doesn't already exist on this scope, it will be created\n * implicitly and added to the scope.\n *\n * For best practices on using `ngModel`, see:\n *\n *  - [https://github.com/angular/angular.js/wiki/Understanding-Scopes]\n *\n * For basic examples, how to use `ngModel`, see:\n *\n *  - {@link ng.directive:input input}\n *    - {@link input[text] text}\n *    - {@link input[checkbox] checkbox}\n *    - {@link input[radio] radio}\n *    - {@link input[number] number}\n *    - {@link input[email] email}\n *    - {@link input[url] url}\n *  - {@link ng.directive:select select}\n *  - {@link ng.directive:textarea textarea}\n *\n * # CSS classes\n * The following CSS classes are added and removed on the associated input/select/textarea element\n * depending on the validity of the model.\n *\n *  - `ng-valid` is set if the model is valid.\n *  - `ng-invalid` is set if the model is invalid.\n *  - `ng-pristine` is set if the model is pristine.\n *  - `ng-dirty` is set if the model is dirty.\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n * ## Animation Hooks\n *\n * Animations within models are triggered when any of the associated CSS classes are added and removed\n * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,\n * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.\n * The animations that are triggered within ngModel are similar to how they work in ngClass and\n * animations can be hooked into using CSS transitions, keyframes as well as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style an input element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-input {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-input.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n * <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\">\n     <file name=\"index.html\">\n       <script>\n        function Ctrl($scope) {\n          $scope.val = '1';\n        }\n       </script>\n       <style>\n         .my-input {\n           -webkit-transition:all linear 0.5s;\n           transition:all linear 0.5s;\n           background: transparent;\n         }\n         .my-input.ng-invalid {\n           color:white;\n           background: red;\n         }\n       </style>\n       Update input to see transitions when valid/invalid.\n       Integer is a valid value.\n       <form name=\"testForm\" ng-controller=\"Ctrl\">\n         <input ng-model=\"val\" ng-pattern=\"/^\\d+$/\" name=\"anim\" class=\"my-input\" />\n       </form>\n     </file>\n * </example>\n */\nvar ngModelDirective = function() {\n  return {\n    require: ['ngModel', '^?form'],\n    controller: NgModelController,\n    link: function(scope, element, attr, ctrls) {\n      // notify others, especially parent forms\n\n      var modelCtrl = ctrls[0],\n          formCtrl = ctrls[1] || nullFormCtrl;\n\n      formCtrl.$addControl(modelCtrl);\n\n      scope.$on('$destroy', function() {\n        formCtrl.$removeControl(modelCtrl);\n      });\n    }\n  };\n};\n\n\n/**\n * @ngdoc directive\n * @name ngChange\n *\n * @description\n * Evaluate the given expression when the user changes the input.\n * The expression is evaluated immediately, unlike the JavaScript onchange event\n * which only triggers at the end of a change (usually, when the user leaves the\n * form element or presses the return key).\n * The expression is not evaluated when the value change is coming from the model.\n *\n * Note, this directive requires `ngModel` to be present.\n *\n * @element input\n * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change\n * in input value.\n *\n * @example\n * <example name=\"ngChange-directive\">\n *   <file name=\"index.html\">\n *     <script>\n *       function Controller($scope) {\n *         $scope.counter = 0;\n *         $scope.change = function() {\n *           $scope.counter++;\n *         };\n *       }\n *     </script>\n *     <div ng-controller=\"Controller\">\n *       <input type=\"checkbox\" ng-model=\"confirmed\" ng-change=\"change()\" id=\"ng-change-example1\" />\n *       <input type=\"checkbox\" ng-model=\"confirmed\" id=\"ng-change-example2\" />\n *       <label for=\"ng-change-example2\">Confirmed</label><br />\n *       <tt>debug = {{confirmed}}</tt><br/>\n *       <tt>counter = {{counter}}</tt><br/>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     var counter = element(by.binding('counter'));\n *     var debug = element(by.binding('confirmed'));\n *\n *     it('should evaluate the expression if changing from view', function() {\n *       expect(counter.getText()).toContain('0');\n *\n *       element(by.id('ng-change-example1')).click();\n *\n *       expect(counter.getText()).toContain('1');\n *       expect(debug.getText()).toContain('true');\n *     });\n *\n *     it('should not evaluate the expression if changing from model', function() {\n *       element(by.id('ng-change-example2')).click();\n\n *       expect(counter.getText()).toContain('0');\n *       expect(debug.getText()).toContain('true');\n *     });\n *   </file>\n * </example>\n */\nvar ngChangeDirective = valueFn({\n  require: 'ngModel',\n  link: function(scope, element, attr, ctrl) {\n    ctrl.$viewChangeListeners.push(function() {\n      scope.$eval(attr.ngChange);\n    });\n  }\n});\n\n\nvar requiredDirective = function() {\n  return {\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n      attr.required = true; // force truthy in case we are on non input element\n\n      var validator = function(value) {\n        if (attr.required && ctrl.$isEmpty(value)) {\n          ctrl.$setValidity('required', false);\n          return;\n        } else {\n          ctrl.$setValidity('required', true);\n          return value;\n        }\n      };\n\n      ctrl.$formatters.push(validator);\n      ctrl.$parsers.unshift(validator);\n\n      attr.$observe('required', function() {\n        validator(ctrl.$viewValue);\n      });\n    }\n  };\n};\n\n\n/**\n * @ngdoc directive\n * @name ngList\n *\n * @description\n * Text input that converts between a delimited string and an array of strings. The delimiter\n * can be a fixed string (by default a comma) or a regular expression.\n *\n * @element input\n * @param {string=} ngList optional delimiter that should be used to split the value. If\n *   specified in form `/something/` then the value will be converted into a regular expression.\n *\n * @example\n    <example name=\"ngList-directive\">\n      <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.names = ['igor', 'misko', 'vojta'];\n         }\n       </script>\n       <form name=\"myForm\" ng-controller=\"Ctrl\">\n         List: <input name=\"namesInput\" ng-model=\"names\" ng-list required>\n         <span class=\"error\" ng-show=\"myForm.namesInput.$error.required\">\n           Required!</span>\n         <br>\n         <tt>names = {{names}}</tt><br/>\n         <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>\n         <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var listInput = element(by.model('names'));\n        var names = element(by.binding('{{names}}'));\n        var valid = element(by.binding('myForm.namesInput.$valid'));\n        var error = element(by.css('span.error'));\n\n        it('should initialize to model', function() {\n          expect(names.getText()).toContain('[\"igor\",\"misko\",\"vojta\"]');\n          expect(valid.getText()).toContain('true');\n          expect(error.getCssValue('display')).toBe('none');\n        });\n\n        it('should be invalid if empty', function() {\n          listInput.clear();\n          listInput.sendKeys('');\n\n          expect(names.getText()).toContain('');\n          expect(valid.getText()).toContain('false');\n          expect(error.getCssValue('display')).not.toBe('none');        });\n      </file>\n    </example>\n */\nvar ngListDirective = function() {\n  return {\n    require: 'ngModel',\n    link: function(scope, element, attr, ctrl) {\n      var match = /\\/(.*)\\//.exec(attr.ngList),\n          separator = match && new RegExp(match[1]) || attr.ngList || ',';\n\n      var parse = function(viewValue) {\n        // If the viewValue is invalid (say required but empty) it will be `undefined`\n        if (isUndefined(viewValue)) return;\n\n        var list = [];\n\n        if (viewValue) {\n          forEach(viewValue.split(separator), function(value) {\n            if (value) list.push(trim(value));\n          });\n        }\n\n        return list;\n      };\n\n      ctrl.$parsers.push(parse);\n      ctrl.$formatters.push(function(value) {\n        if (isArray(value)) {\n          return value.join(', ');\n        }\n\n        return undefined;\n      });\n\n      // Override the standard $isEmpty because an empty array means the input is empty.\n      ctrl.$isEmpty = function(value) {\n        return !value || !value.length;\n      };\n    }\n  };\n};\n\n\nvar CONSTANT_VALUE_REGEXP = /^(true|false|\\d+)$/;\n/**\n * @ngdoc directive\n * @name ngValue\n *\n * @description\n * Binds the given expression to the value of `input[select]` or `input[radio]`, so\n * that when the element is selected, the `ngModel` of that element is set to the\n * bound value.\n *\n * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as\n * shown below.\n *\n * @element input\n * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute\n *   of the `input` element\n *\n * @example\n    <example name=\"ngValue-directive\">\n      <file name=\"index.html\">\n       <script>\n          function Ctrl($scope) {\n            $scope.names = ['pizza', 'unicorns', 'robots'];\n            $scope.my = { favorite: 'unicorns' };\n          }\n       </script>\n        <form ng-controller=\"Ctrl\">\n          <h2>Which is your favorite?</h2>\n            <label ng-repeat=\"name in names\" for=\"{{name}}\">\n              {{name}}\n              <input type=\"radio\"\n                     ng-model=\"my.favorite\"\n                     ng-value=\"name\"\n                     id=\"{{name}}\"\n                     name=\"favorite\">\n            </label>\n          <div>You chose {{my.favorite}}</div>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var favorite = element(by.binding('my.favorite'));\n\n        it('should initialize to model', function() {\n          expect(favorite.getText()).toContain('unicorns');\n        });\n        it('should bind the values to the inputs', function() {\n          element.all(by.model('my.favorite')).get(0).click();\n          expect(favorite.getText()).toContain('pizza');\n        });\n      </file>\n    </example>\n */\nvar ngValueDirective = function() {\n  return {\n    priority: 100,\n    compile: function(tpl, tplAttr) {\n      if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {\n        return function ngValueConstantLink(scope, elm, attr) {\n          attr.$set('value', scope.$eval(attr.ngValue));\n        };\n      } else {\n        return function ngValueLink(scope, elm, attr) {\n          scope.$watch(attr.ngValue, function valueWatchAction(value) {\n            attr.$set('value', value);\n          });\n        };\n      }\n    }\n  };\n};\n\n/**\n * @ngdoc directive\n * @name ngBind\n * @restrict AC\n *\n * @description\n * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element\n * with the value of a given expression, and to update the text content when the value of that\n * expression changes.\n *\n * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like\n * `{{ expression }}` which is similar but less verbose.\n *\n * It is preferable to use `ngBind` instead of `{{ expression }}` when a template is momentarily\n * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an\n * element attribute, it makes the bindings invisible to the user while the page is loading.\n *\n * An alternative solution to this problem would be using the\n * {@link ng.directive:ngCloak ngCloak} directive.\n *\n *\n * @element ANY\n * @param {expression} ngBind {@link guide/expression Expression} to evaluate.\n *\n * @example\n * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.name = 'Whirled';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Enter name: <input type=\"text\" ng-model=\"name\"><br>\n         Hello <span ng-bind=\"name\"></span>!\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var nameInput = element(by.model('name'));\n\n         expect(element(by.binding('name')).getText()).toBe('Whirled');\n         nameInput.clear();\n         nameInput.sendKeys('world');\n         expect(element(by.binding('name')).getText()).toBe('world');\n       });\n     </file>\n   </example>\n */\nvar ngBindDirective = ngDirective(function(scope, element, attr) {\n  element.addClass('ng-binding').data('$binding', attr.ngBind);\n  scope.$watch(attr.ngBind, function ngBindWatchAction(value) {\n    // We are purposefully using == here rather than === because we want to\n    // catch when value is \"null or undefined\"\n    // jshint -W041\n    element.text(value == undefined ? '' : value);\n  });\n});\n\n\n/**\n * @ngdoc directive\n * @name ngBindTemplate\n *\n * @description\n * The `ngBindTemplate` directive specifies that the element\n * text content should be replaced with the interpolation of the template\n * in the `ngBindTemplate` attribute.\n * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`\n * expressions. This directive is needed since some HTML elements\n * (such as TITLE and OPTION) cannot contain SPAN elements.\n *\n * @element ANY\n * @param {string} ngBindTemplate template of form\n *   <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.\n *\n * @example\n * Try it here: enter text in text box and watch the greeting change.\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.salutation = 'Hello';\n           $scope.name = 'World';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n        Salutation: <input type=\"text\" ng-model=\"salutation\"><br>\n        Name: <input type=\"text\" ng-model=\"name\"><br>\n        <pre ng-bind-template=\"{{salutation}} {{name}}!\"></pre>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var salutationElem = element(by.binding('salutation'));\n         var salutationInput = element(by.model('salutation'));\n         var nameInput = element(by.model('name'));\n\n         expect(salutationElem.getText()).toBe('Hello World!');\n\n         salutationInput.clear();\n         salutationInput.sendKeys('Greetings');\n         nameInput.clear();\n         nameInput.sendKeys('user');\n\n         expect(salutationElem.getText()).toBe('Greetings user!');\n       });\n     </file>\n   </example>\n */\nvar ngBindTemplateDirective = ['$interpolate', function($interpolate) {\n  return function(scope, element, attr) {\n    // TODO: move this to scenario runner\n    var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));\n    element.addClass('ng-binding').data('$binding', interpolateFn);\n    attr.$observe('ngBindTemplate', function(value) {\n      element.text(value);\n    });\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngBindHtml\n *\n * @description\n * Creates a binding that will innerHTML the result of evaluating the `expression` into the current\n * element in a secure way.  By default, the innerHTML-ed content will be sanitized using the {@link\n * ngSanitize.$sanitize $sanitize} service.  To utilize this functionality, ensure that `$sanitize`\n * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in\n * core Angular.)  You may also bypass sanitization for values you know are safe. To do so, bind to\n * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}.  See the example\n * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}.\n *\n * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you\n * will have an exception (instead of an exploit.)\n *\n * @element ANY\n * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.\n *\n * @example\n   Try it here: enter text in text box and watch the greeting change.\n\n   <example module=\"ngBindHtmlExample\" deps=\"angular-sanitize.js\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ngBindHtmlCtrl\">\n        <p ng-bind-html=\"myHTML\"></p>\n       </div>\n     </file>\n\n     <file name=\"script.js\">\n       angular.module('ngBindHtmlExample', ['ngSanitize'])\n\n       .controller('ngBindHtmlCtrl', ['$scope', function ngBindHtmlCtrl($scope) {\n         $scope.myHTML =\n            'I am an <code>HTML</code>string with <a href=\"#\">links!</a> and other <em>stuff</em>';\n       }]);\n     </file>\n\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind-html', function() {\n         expect(element(by.binding('myHTML')).getText()).toBe(\n             'I am an HTMLstring with links! and other stuff');\n       });\n     </file>\n   </example>\n */\nvar ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) {\n  return function(scope, element, attr) {\n    element.addClass('ng-binding').data('$binding', attr.ngBindHtml);\n\n    var parsed = $parse(attr.ngBindHtml);\n    function getStringValue() { return (parsed(scope) || '').toString(); }\n\n    scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) {\n      element.html($sce.getTrustedHtml(parsed(scope)) || '');\n    });\n  };\n}];\n\nfunction classDirective(name, selector) {\n  name = 'ngClass' + name;\n  return ['$animate', function($animate) {\n    return {\n      restrict: 'AC',\n      link: function(scope, element, attr) {\n        var oldVal;\n\n        scope.$watch(attr[name], ngClassWatchAction, true);\n\n        attr.$observe('class', function(value) {\n          ngClassWatchAction(scope.$eval(attr[name]));\n        });\n\n\n        if (name !== 'ngClass') {\n          scope.$watch('$index', function($index, old$index) {\n            // jshint bitwise: false\n            var mod = $index & 1;\n            if (mod !== old$index & 1) {\n              var classes = arrayClasses(scope.$eval(attr[name]));\n              mod === selector ?\n                addClasses(classes) :\n                removeClasses(classes);\n            }\n          });\n        }\n\n        function addClasses(classes) {\n          var newClasses = digestClassCounts(classes, 1);\n          attr.$addClass(newClasses);\n        }\n\n        function removeClasses(classes) {\n          var newClasses = digestClassCounts(classes, -1);\n          attr.$removeClass(newClasses);\n        }\n\n        function digestClassCounts (classes, count) {\n          var classCounts = element.data('$classCounts') || {};\n          var classesToUpdate = [];\n          forEach(classes, function (className) {\n            if (count > 0 || classCounts[className]) {\n              classCounts[className] = (classCounts[className] || 0) + count;\n              if (classCounts[className] === +(count > 0)) {\n                classesToUpdate.push(className);\n              }\n            }\n          });\n          element.data('$classCounts', classCounts);\n          return classesToUpdate.join(' ');\n        }\n\n        function updateClasses (oldClasses, newClasses) {\n          var toAdd = arrayDifference(newClasses, oldClasses);\n          var toRemove = arrayDifference(oldClasses, newClasses);\n          toRemove = digestClassCounts(toRemove, -1);\n          toAdd = digestClassCounts(toAdd, 1);\n\n          if (toAdd.length === 0) {\n            $animate.removeClass(element, toRemove);\n          } else if (toRemove.length === 0) {\n            $animate.addClass(element, toAdd);\n          } else {\n            $animate.setClass(element, toAdd, toRemove);\n          }\n        }\n\n        function ngClassWatchAction(newVal) {\n          if (selector === true || scope.$index % 2 === selector) {\n            var newClasses = arrayClasses(newVal || []);\n            if (!oldVal) {\n              addClasses(newClasses);\n            } else if (!equals(newVal,oldVal)) {\n              var oldClasses = arrayClasses(oldVal);\n              updateClasses(oldClasses, newClasses);\n            }\n          }\n          oldVal = copy(newVal);\n        }\n      }\n    };\n\n    function arrayDifference(tokens1, tokens2) {\n      var values = [];\n\n      outer:\n      for(var i = 0; i < tokens1.length; i++) {\n        var token = tokens1[i];\n        for(var j = 0; j < tokens2.length; j++) {\n          if(token == tokens2[j]) continue outer;\n        }\n        values.push(token);\n      }\n      return values;\n    }\n\n    function arrayClasses (classVal) {\n      if (isArray(classVal)) {\n        return classVal;\n      } else if (isString(classVal)) {\n        return classVal.split(' ');\n      } else if (isObject(classVal)) {\n        var classes = [], i = 0;\n        forEach(classVal, function(v, k) {\n          if (v) {\n            classes.push(k);\n          }\n        });\n        return classes;\n      }\n      return classVal;\n    }\n  }];\n}\n\n/**\n * @ngdoc directive\n * @name ngClass\n * @restrict AC\n *\n * @description\n * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding\n * an expression that represents all classes to be added.\n *\n * The directive operates in three different ways, depending on which of three types the expression\n * evaluates to:\n *\n * 1. If the expression evaluates to a string, the string should be one or more space-delimited class\n * names.\n *\n * 2. If the expression evaluates to an array, each element of the array should be a string that is\n * one or more space-delimited class names.\n *\n * 3. If the expression evaluates to an object, then for each key-value pair of the\n * object with a truthy value the corresponding key is used as a class name.\n *\n * The directive won't add duplicate classes if a particular class was already set.\n *\n * When the expression changes, the previously added classes are removed and only then the\n * new classes are added.\n *\n * @animations\n * add - happens just before the class is applied to the element\n * remove - happens just before the class is removed from the element\n *\n * @element ANY\n * @param {expression} ngClass {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class\n *   names, an array, or a map of class names to boolean values. In the case of a map, the\n *   names of the properties whose values are truthy will be added as css classes to the\n *   element.\n *\n * @example Example that demonstrates basic bindings via ngClass directive.\n   <example>\n     <file name=\"index.html\">\n       <p ng-class=\"{strike: deleted, bold: important, red: error}\">Map Syntax Example</p>\n       <input type=\"checkbox\" ng-model=\"deleted\"> deleted (apply \"strike\" class)<br>\n       <input type=\"checkbox\" ng-model=\"important\"> important (apply \"bold\" class)<br>\n       <input type=\"checkbox\" ng-model=\"error\"> error (apply \"red\" class)\n       <hr>\n       <p ng-class=\"style\">Using String Syntax</p>\n       <input type=\"text\" ng-model=\"style\" placeholder=\"Type: bold strike red\">\n       <hr>\n       <p ng-class=\"[style1, style2, style3]\">Using Array Syntax</p>\n       <input ng-model=\"style1\" placeholder=\"Type: bold, strike or red\"><br>\n       <input ng-model=\"style2\" placeholder=\"Type: bold, strike or red\"><br>\n       <input ng-model=\"style3\" placeholder=\"Type: bold, strike or red\"><br>\n     </file>\n     <file name=\"style.css\">\n       .strike {\n         text-decoration: line-through;\n       }\n       .bold {\n           font-weight: bold;\n       }\n       .red {\n           color: red;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var ps = element.all(by.css('p'));\n\n       it('should let you toggle the class', function() {\n\n         expect(ps.first().getAttribute('class')).not.toMatch(/bold/);\n         expect(ps.first().getAttribute('class')).not.toMatch(/red/);\n\n         element(by.model('important')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/bold/);\n\n         element(by.model('error')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/red/);\n       });\n\n       it('should let you toggle string example', function() {\n         expect(ps.get(1).getAttribute('class')).toBe('');\n         element(by.model('style')).clear();\n         element(by.model('style')).sendKeys('red');\n         expect(ps.get(1).getAttribute('class')).toBe('red');\n       });\n\n       it('array example should have 3 classes', function() {\n         expect(ps.last().getAttribute('class')).toBe('');\n         element(by.model('style1')).sendKeys('bold');\n         element(by.model('style2')).sendKeys('strike');\n         element(by.model('style3')).sendKeys('red');\n         expect(ps.last().getAttribute('class')).toBe('bold strike red');\n       });\n     </file>\n   </example>\n\n   ## Animations\n\n   The example below demonstrates how to perform animations using ngClass.\n\n   <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n     <file name=\"index.html\">\n      <input id=\"setbtn\" type=\"button\" value=\"set\" ng-click=\"myVar='my-class'\">\n      <input id=\"clearbtn\" type=\"button\" value=\"clear\" ng-click=\"myVar=''\">\n      <br>\n      <span class=\"base-class\" ng-class=\"myVar\">Sample Text</span>\n     </file>\n     <file name=\"style.css\">\n       .base-class {\n         -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n         transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n       }\n\n       .base-class.my-class {\n         color: red;\n         font-size:3em;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class', function() {\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n\n         element(by.id('setbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).\n           toMatch(/my-class/);\n\n         element(by.id('clearbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n       });\n     </file>\n   </example>\n\n\n   ## ngClass and pre-existing CSS3 Transitions/Animations\n   The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.\n   Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder\n   any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure\n   to view the step by step details of {@link ngAnimate.$animate#addclass $animate.addClass} and\n   {@link ngAnimate.$animate#removeclass $animate.removeClass}.\n */\nvar ngClassDirective = classDirective('', true);\n\n/**\n * @ngdoc directive\n * @name ngClassOdd\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}}\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassOddDirective = classDirective('Odd', 0);\n\n/**\n * @ngdoc directive\n * @name ngClassEven\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The\n *   result of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}} &nbsp; &nbsp; &nbsp;\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassEvenDirective = classDirective('Even', 1);\n\n/**\n * @ngdoc directive\n * @name ngCloak\n * @restrict AC\n *\n * @description\n * The `ngCloak` directive is used to prevent the Angular html template from being briefly\n * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this\n * directive to avoid the undesirable flicker effect caused by the html template display.\n *\n * The directive can be applied to the `<body>` element, but the preferred usage is to apply\n * multiple `ngCloak` directives to small portions of the page to permit progressive rendering\n * of the browser view.\n *\n * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and\n * `angular.min.js`.\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```css\n * [ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {\n *   display: none !important;\n * }\n * ```\n *\n * When this css rule is loaded by the browser, all html elements (including their children) that\n * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive\n * during the compilation of the template it deletes the `ngCloak` element attribute, making\n * the compiled element visible.\n *\n * For the best result, the `angular.js` script must be loaded in the head section of the html\n * document; alternatively, the css rule above must be included in the external stylesheet of the\n * application.\n *\n * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they\n * cannot match the `[ng\\:cloak]` selector. To work around this limitation, you must add the css\n * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below.\n *\n * @element ANY\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <div id=\"template1\" ng-cloak>{{ 'hello' }}</div>\n        <div id=\"template2\" ng-cloak class=\"ng-cloak\">{{ 'hello IE7' }}</div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should remove the template directive and css class', function() {\n         expect($('#template1').getAttribute('ng-cloak')).\n           toBeNull();\n         expect($('#template2').getAttribute('ng-cloak')).\n           toBeNull();\n       });\n     </file>\n   </example>\n *\n */\nvar ngCloakDirective = ngDirective({\n  compile: function(element, attr) {\n    attr.$set('ngCloak', undefined);\n    element.removeClass('ng-cloak');\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngController\n *\n * @description\n * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular\n * supports the principles behind the Model-View-Controller design pattern.\n *\n * MVC components in angular:\n *\n * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties\n *   are accessed through bindings.\n * * View — The template (HTML with data bindings) that is rendered into the View.\n * * Controller — The `ngController` directive specifies a Controller class; the class contains business\n *   logic behind the application to decorate the scope with functions and values\n *\n * Note that you can also attach controllers to the DOM by declaring it in a route definition\n * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller\n * again using `ng-controller` in the template itself.  This will cause the controller to be attached\n * and executed twice.\n *\n * @element ANY\n * @scope\n * @param {expression} ngController Name of a globally accessible constructor function or an\n *     {@link guide/expression expression} that on the current scope evaluates to a\n *     constructor function. The controller instance can be published into a scope property\n *     by specifying `as propertyName`.\n *\n * @example\n * Here is a simple form for editing user contact information. Adding, removing, clearing, and\n * greeting are methods declared on the controller (see source tab). These methods can\n * easily be called from the angular markup. Notice that the scope becomes the `this` for the\n * controller's instance. This allows for easy access to the view data from the controller. Also\n * notice that any changes to the data are automatically reflected in the View without the need\n * for a manual update. The example is shown in two different declaration styles you may use\n * according to preference.\n   <example>\n     <file name=\"index.html\">\n      <script>\n        function SettingsController1() {\n          this.name = \"John Smith\";\n          this.contacts = [\n            {type: 'phone', value: '408 555 1212'},\n            {type: 'email', value: 'john.smith@example.org'} ];\n          };\n\n        SettingsController1.prototype.greet = function() {\n          alert(this.name);\n        };\n\n        SettingsController1.prototype.addContact = function() {\n          this.contacts.push({type: 'email', value: 'yourname@example.org'});\n        };\n\n        SettingsController1.prototype.removeContact = function(contactToRemove) {\n         var index = this.contacts.indexOf(contactToRemove);\n          this.contacts.splice(index, 1);\n        };\n\n        SettingsController1.prototype.clearContact = function(contact) {\n          contact.type = 'phone';\n          contact.value = '';\n        };\n      </script>\n      <div id=\"ctrl-as-exmpl\" ng-controller=\"SettingsController1 as settings\">\n        Name: <input type=\"text\" ng-model=\"settings.name\"/>\n        [ <a href=\"\" ng-click=\"settings.greet()\">greet</a> ]<br/>\n        Contact:\n        <ul>\n          <li ng-repeat=\"contact in settings.contacts\">\n            <select ng-model=\"contact.type\">\n               <option>phone</option>\n               <option>email</option>\n            </select>\n            <input type=\"text\" ng-model=\"contact.value\"/>\n            [ <a href=\"\" ng-click=\"settings.clearContact(contact)\">clear</a>\n            | <a href=\"\" ng-click=\"settings.removeContact(contact)\">X</a> ]\n          </li>\n          <li>[ <a href=\"\" ng-click=\"settings.addContact()\">add</a> ]</li>\n       </ul>\n      </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check controller as', function() {\n         var container = element(by.id('ctrl-as-exmpl'));\n\n         expect(container.findElement(by.model('settings.name'))\n             .getAttribute('value')).toBe('John Smith');\n\n         var firstRepeat =\n             container.findElement(by.repeater('contact in settings.contacts').row(0));\n         var secondRepeat =\n             container.findElement(by.repeater('contact in settings.contacts').row(1));\n\n         expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n             .toBe('408 555 1212');\n         expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n             .toBe('john.smith@example.org');\n\n         firstRepeat.findElement(by.linkText('clear')).click();\n\n         expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n             .toBe('');\n\n         container.findElement(by.linkText('add')).click();\n\n         expect(container.findElement(by.repeater('contact in settings.contacts').row(2))\n             .findElement(by.model('contact.value'))\n             .getAttribute('value'))\n             .toBe('yourname@example.org');\n       });\n     </file>\n   </example>\n    <example>\n     <file name=\"index.html\">\n      <script>\n        function SettingsController2($scope) {\n          $scope.name = \"John Smith\";\n          $scope.contacts = [\n            {type:'phone', value:'408 555 1212'},\n            {type:'email', value:'john.smith@example.org'} ];\n\n          $scope.greet = function() {\n           alert(this.name);\n          };\n\n          $scope.addContact = function() {\n           this.contacts.push({type:'email', value:'yourname@example.org'});\n          };\n\n          $scope.removeContact = function(contactToRemove) {\n           var index = this.contacts.indexOf(contactToRemove);\n           this.contacts.splice(index, 1);\n          };\n\n          $scope.clearContact = function(contact) {\n           contact.type = 'phone';\n           contact.value = '';\n          };\n        }\n      </script>\n      <div id=\"ctrl-exmpl\" ng-controller=\"SettingsController2\">\n        Name: <input type=\"text\" ng-model=\"name\"/>\n        [ <a href=\"\" ng-click=\"greet()\">greet</a> ]<br/>\n        Contact:\n        <ul>\n          <li ng-repeat=\"contact in contacts\">\n            <select ng-model=\"contact.type\">\n               <option>phone</option>\n               <option>email</option>\n            </select>\n            <input type=\"text\" ng-model=\"contact.value\"/>\n            [ <a href=\"\" ng-click=\"clearContact(contact)\">clear</a>\n            | <a href=\"\" ng-click=\"removeContact(contact)\">X</a> ]\n          </li>\n          <li>[ <a href=\"\" ng-click=\"addContact()\">add</a> ]</li>\n       </ul>\n      </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check controller', function() {\n         var container = element(by.id('ctrl-exmpl'));\n\n         expect(container.findElement(by.model('name'))\n             .getAttribute('value')).toBe('John Smith');\n\n         var firstRepeat =\n             container.findElement(by.repeater('contact in contacts').row(0));\n         var secondRepeat =\n             container.findElement(by.repeater('contact in contacts').row(1));\n\n         expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n             .toBe('408 555 1212');\n         expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n             .toBe('john.smith@example.org');\n\n         firstRepeat.findElement(by.linkText('clear')).click();\n\n         expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n             .toBe('');\n\n         container.findElement(by.linkText('add')).click();\n\n         expect(container.findElement(by.repeater('contact in contacts').row(2))\n             .findElement(by.model('contact.value'))\n             .getAttribute('value'))\n             .toBe('yourname@example.org');\n       });\n     </file>\n   </example>\n\n */\nvar ngControllerDirective = [function() {\n  return {\n    scope: true,\n    controller: '@',\n    priority: 500\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngCsp\n *\n * @element html\n * @description\n * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support.\n *\n * This is necessary when developing things like Google Chrome Extensions.\n *\n * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).\n * For us to be compatible, we just need to implement the \"getterFn\" in $parse without violating\n * any of these restrictions.\n *\n * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp`\n * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will\n * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will\n * be raised.\n *\n * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically\n * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}).\n * To make those directives work in CSP mode, include the `angular-csp.css` manually.\n *\n * In order to use this feature put the `ngCsp` directive on the root element of the application.\n *\n * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*\n *\n * @example\n * This example shows how to apply the `ngCsp` directive to the `html` tag.\n   ```html\n     <!doctype html>\n     <html ng-app ng-csp>\n     ...\n     ...\n     </html>\n   ```\n */\n\n// ngCsp is not implemented as a proper directive any more, because we need it be processed while we bootstrap\n// the system (before $parse is instantiated), for this reason we just have a csp() fn that looks for ng-csp attribute\n// anywhere in the current doc\n\n/**\n * @ngdoc directive\n * @name ngClick\n *\n * @description\n * The ngClick directive allows you to specify custom behavior when\n * an element is clicked.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon\n * click. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-click=\"count = count + 1\" ng-init=\"count=0\">\n        Increment\n      </button>\n      count: {{count}}\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-click', function() {\n         expect(element(by.binding('count')).getText()).toMatch('0');\n         element(by.css('button')).click();\n         expect(element(by.binding('count')).getText()).toMatch('1');\n       });\n     </file>\n   </example>\n */\n/*\n * A directive that allows creation of custom onclick handlers that are defined as angular\n * expressions and are compiled and executed within the current scope.\n *\n * Events that are handled via these handler are always configured not to propagate further.\n */\nvar ngEventDirectives = {};\nforEach(\n  'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),\n  function(name) {\n    var directiveName = directiveNormalize('ng-' + name);\n    ngEventDirectives[directiveName] = ['$parse', function($parse) {\n      return {\n        compile: function($element, attr) {\n          var fn = $parse(attr[directiveName]);\n          return function(scope, element, attr) {\n            element.on(lowercase(name), function(event) {\n              scope.$apply(function() {\n                fn(scope, {$event:event});\n              });\n            });\n          };\n        }\n      };\n    }];\n  }\n);\n\n/**\n * @ngdoc directive\n * @name ngDblclick\n *\n * @description\n * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon\n * a dblclick. (The Event object is available as `$event`)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-dblclick=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on double click)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousedown\n *\n * @description\n * The ngMousedown directive allows you to specify custom behavior on mousedown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon\n * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousedown=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse down)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseup\n *\n * @description\n * Specify custom behavior on mouseup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon\n * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseup=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse up)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngMouseover\n *\n * @description\n * Specify custom behavior on mouseover event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon\n * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseover=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse is over)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseenter\n *\n * @description\n * Specify custom behavior on mouseenter event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon\n * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseenter=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse enters)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseleave\n *\n * @description\n * Specify custom behavior on mouseleave event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon\n * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseleave=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse leaves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousemove\n *\n * @description\n * Specify custom behavior on mousemove event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon\n * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousemove=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse moves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeydown\n *\n * @description\n * Specify custom behavior on keydown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon\n * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keydown=\"count = count + 1\" ng-init=\"count=0\">\n      key down count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeyup\n *\n * @description\n * Specify custom behavior on keyup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon\n * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keyup=\"count = count + 1\" ng-init=\"count=0\">\n      key up count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeypress\n *\n * @description\n * Specify custom behavior on keypress event.\n *\n * @element ANY\n * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon\n * keypress. ({@link guide/expression#-event- Event object is available as `$event`}\n * and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keypress=\"count = count + 1\" ng-init=\"count=0\">\n      key press count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSubmit\n *\n * @description\n * Enables binding angular expressions to onsubmit events.\n *\n * Additionally it prevents the default action (which for form means sending the request to the\n * server and reloading the current page), but only if the form does not contain `action`,\n * `data-action`, or `x-action` attributes.\n *\n * @element form\n * @priority 0\n * @param {expression} ngSubmit {@link guide/expression Expression} to eval.\n * ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <script>\n        function Ctrl($scope) {\n          $scope.list = [];\n          $scope.text = 'hello';\n          $scope.submit = function() {\n            if ($scope.text) {\n              $scope.list.push(this.text);\n              $scope.text = '';\n            }\n          };\n        }\n      </script>\n      <form ng-submit=\"submit()\" ng-controller=\"Ctrl\">\n        Enter text and hit enter:\n        <input type=\"text\" ng-model=\"text\" name=\"text\" />\n        <input type=\"submit\" id=\"submit\" value=\"Submit\" />\n        <pre>list={{list}}</pre>\n      </form>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-submit', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n         expect(element(by.input('text')).getAttribute('value')).toBe('');\n       });\n       it('should ignore empty strings', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n        });\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngFocus\n *\n * @description\n * Specify custom behavior on focus event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon\n * focus. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngBlur\n *\n * @description\n * Specify custom behavior on blur event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon\n * blur. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngCopy\n *\n * @description\n * Specify custom behavior on copy event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon\n * copy. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-copy=\"copied=true\" ng-init=\"copied=false; value='copy me'\" ng-model=\"value\">\n      copied: {{copied}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngCut\n *\n * @description\n * Specify custom behavior on cut event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon\n * cut. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-cut=\"cut=true\" ng-init=\"cut=false; value='cut me'\" ng-model=\"value\">\n      cut: {{cut}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngPaste\n *\n * @description\n * Specify custom behavior on paste event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon\n * paste. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-paste=\"paste=true\" ng-init=\"paste=false\" placeholder='paste here'>\n      pasted: {{paste}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngIf\n * @restrict A\n *\n * @description\n * The `ngIf` directive removes or recreates a portion of the DOM tree based on an\n * {expression}. If the expression assigned to `ngIf` evaluates to a false\n * value then the element is removed from the DOM, otherwise a clone of the\n * element is reinserted into the DOM.\n *\n * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the\n * element in the DOM rather than changing its visibility via the `display` css property.  A common\n * case when this difference is significant is when using css selectors that rely on an element's\n * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.\n *\n * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope\n * is created when the element is restored.  The scope created within `ngIf` inherits from\n * its parent scope using\n * [prototypal inheritance](https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance).\n * An important implication of this is if `ngModel` is used within `ngIf` to bind to\n * a javascript primitive defined in the parent scope. In this case any modifications made to the\n * variable within the child scope will override (hide) the value in the parent scope.\n *\n * Also, `ngIf` recreates elements using their compiled state. An example of this behavior\n * is if an element's class attribute is directly modified after it's compiled, using something like\n * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element\n * the added class will be lost because the original compiled state is used to regenerate the element.\n *\n * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`\n * and `leave` effects.\n *\n * @animations\n * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container\n * leave - happens just before the ngIf contents are removed from the DOM\n *\n * @element ANY\n * @scope\n * @priority 600\n * @param {expression} ngIf If the {@link guide/expression expression} is falsy then\n *     the element is removed from the DOM tree. If it is truthy a copy of the compiled\n *     element is added to the DOM tree.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\" ng-init=\"checked=true\" /><br/>\n      Show when checked:\n      <span ng-if=\"checked\" class=\"animate-if\">\n        I'm removed when the checkbox is unchecked.\n      </span>\n    </file>\n    <file name=\"animations.css\">\n      .animate-if {\n        background:white;\n        border:1px solid black;\n        padding:10px;\n      }\n\n      .animate-if.ng-enter, .animate-if.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n      }\n\n      .animate-if.ng-enter,\n      .animate-if.ng-leave.ng-leave-active {\n        opacity:0;\n      }\n\n      .animate-if.ng-leave,\n      .animate-if.ng-enter.ng-enter-active {\n        opacity:1;\n      }\n    </file>\n  </example>\n */\nvar ngIfDirective = ['$animate', function($animate) {\n  return {\n    transclude: 'element',\n    priority: 600,\n    terminal: true,\n    restrict: 'A',\n    $$tlb: true,\n    link: function ($scope, $element, $attr, ctrl, $transclude) {\n        var block, childScope, previousElements;\n        $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {\n\n          if (toBoolean(value)) {\n            if (!childScope) {\n              childScope = $scope.$new();\n              $transclude(childScope, function (clone) {\n                clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when it's template arrives.\n                block = {\n                  clone: clone\n                };\n                $animate.enter(clone, $element.parent(), $element);\n              });\n            }\n          } else {\n            if(previousElements) {\n              previousElements.remove();\n              previousElements = null;\n            }\n            if(childScope) {\n              childScope.$destroy();\n              childScope = null;\n            }\n            if(block) {\n              previousElements = getBlockElements(block.clone);\n              $animate.leave(previousElements, function() {\n                previousElements = null;\n              });\n              block = null;\n            }\n          }\n        });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngInclude\n * @restrict ECA\n *\n * @description\n * Fetches, compiles and includes an external HTML fragment.\n *\n * By default, the template URL is restricted to the same domain and protocol as the\n * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols\n * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or\n * [wrap them](ng.$sce#trustAsResourceUrl) as trusted values. Refer to Angular's {@link\n * ng.$sce Strict Contextual Escaping}.\n *\n * In addition, the browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy may further restrict whether the template is successfully loaded.\n * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`\n * access on some browsers.\n *\n * @animations\n * enter - animation is used to bring new content into the browser.\n * leave - animation is used to animate existing content away.\n *\n * The enter and leave animation occur concurrently.\n *\n * @scope\n * @priority 400\n *\n * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,\n *                 make sure you wrap it in **single** quotes, e.g. `src=\"'myPartialTemplate.html'\"`.\n * @param {string=} onload Expression to evaluate when a new partial is loaded.\n *\n * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll\n *                  $anchorScroll} to scroll the viewport after the content is loaded.\n *\n *                  - If the attribute is not set, disable scrolling.\n *                  - If the attribute is set without value, enable scrolling.\n *                  - Otherwise enable scrolling only if the expression evaluates to truthy value.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n     <div ng-controller=\"Ctrl\">\n       <select ng-model=\"template\" ng-options=\"t.name for t in templates\">\n        <option value=\"\">(blank)</option>\n       </select>\n       url of the template: <tt>{{template.url}}</tt>\n       <hr/>\n       <div class=\"slide-animate-container\">\n         <div class=\"slide-animate\" ng-include=\"template.url\"></div>\n       </div>\n     </div>\n    </file>\n    <file name=\"script.js\">\n      function Ctrl($scope) {\n        $scope.templates =\n          [ { name: 'template1.html', url: 'template1.html'},\n            { name: 'template2.html', url: 'template2.html'} ];\n        $scope.template = $scope.templates[0];\n      }\n     </file>\n    <file name=\"template1.html\">\n      Content of template1.html\n    </file>\n    <file name=\"template2.html\">\n      Content of template2.html\n    </file>\n    <file name=\"animations.css\">\n      .slide-animate-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .slide-animate {\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter, .slide-animate.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n        display:block;\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter {\n        top:-50px;\n      }\n      .slide-animate.ng-enter.ng-enter-active {\n        top:0;\n      }\n\n      .slide-animate.ng-leave {\n        top:0;\n      }\n      .slide-animate.ng-leave.ng-leave-active {\n        top:50px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var templateSelect = element(by.model('template'));\n      var includeElem = element(by.css('[ng-include]'));\n\n      it('should load template1.html', function() {\n        expect(includeElem.getText()).toMatch(/Content of template1.html/);\n      });\n\n      it('should load template2.html', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          // See https://github.com/angular/protractor/issues/480\n          return;\n        }\n        templateSelect.click();\n        templateSelect.element.all(by.css('option')).get(2).click();\n        expect(includeElem.getText()).toMatch(/Content of template2.html/);\n      });\n\n      it('should change to blank', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          return;\n        }\n        templateSelect.click();\n        templateSelect.element.all(by.css('option')).get(0).click();\n        expect(includeElem.isPresent()).toBe(false);\n      });\n    </file>\n  </example>\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentRequested\n * @eventType emit on the scope ngInclude was declared in\n * @description\n * Emitted every time the ngInclude content is requested.\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentLoaded\n * @eventType emit on the current ngInclude scope\n * @description\n * Emitted every time the ngInclude content is reloaded.\n */\nvar ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce',\n                  function($http,   $templateCache,   $anchorScroll,   $animate,   $sce) {\n  return {\n    restrict: 'ECA',\n    priority: 400,\n    terminal: true,\n    transclude: 'element',\n    controller: angular.noop,\n    compile: function(element, attr) {\n      var srcExp = attr.ngInclude || attr.src,\n          onloadExp = attr.onload || '',\n          autoScrollExp = attr.autoscroll;\n\n      return function(scope, $element, $attr, ctrl, $transclude) {\n        var changeCounter = 0,\n            currentScope,\n            previousElement,\n            currentElement;\n\n        var cleanupLastIncludeContent = function() {\n          if(previousElement) {\n            previousElement.remove();\n            previousElement = null;\n          }\n          if(currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n          if(currentElement) {\n            $animate.leave(currentElement, function() {\n              previousElement = null;\n            });\n            previousElement = currentElement;\n            currentElement = null;\n          }\n        };\n\n        scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {\n          var afterAnimation = function() {\n            if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {\n              $anchorScroll();\n            }\n          };\n          var thisChangeId = ++changeCounter;\n\n          if (src) {\n            $http.get(src, {cache: $templateCache}).success(function(response) {\n              if (thisChangeId !== changeCounter) return;\n              var newScope = scope.$new();\n              ctrl.template = response;\n\n              // Note: This will also link all children of ng-include that were contained in the original\n              // html. If that content contains controllers, ... they could pollute/change the scope.\n              // However, using ng-include on an element with additional content does not make sense...\n              // Note: We can't remove them in the cloneAttchFn of $transclude as that\n              // function is called before linking the content, which would apply child\n              // directives to non existing elements.\n              var clone = $transclude(newScope, function(clone) {\n                cleanupLastIncludeContent();\n                $animate.enter(clone, null, $element, afterAnimation);\n              });\n\n              currentScope = newScope;\n              currentElement = clone;\n\n              currentScope.$emit('$includeContentLoaded');\n              scope.$eval(onloadExp);\n            }).error(function() {\n              if (thisChangeId === changeCounter) cleanupLastIncludeContent();\n            });\n            scope.$emit('$includeContentRequested');\n          } else {\n            cleanupLastIncludeContent();\n            ctrl.template = null;\n          }\n        });\n      };\n    }\n  };\n}];\n\n// This directive is called during the $transclude call of the first `ngInclude` directive.\n// It will replace and compile the content of the element with the loaded template.\n// We need this directive so that the element content is already filled when\n// the link function of another directive on the same element as ngInclude\n// is called.\nvar ngIncludeFillContentDirective = ['$compile',\n  function($compile) {\n    return {\n      restrict: 'ECA',\n      priority: -400,\n      require: 'ngInclude',\n      link: function(scope, $element, $attr, ctrl) {\n        $element.html(ctrl.template);\n        $compile($element.contents())(scope);\n      }\n    };\n  }];\n\n/**\n * @ngdoc directive\n * @name ngInit\n * @restrict AC\n *\n * @description\n * The `ngInit` directive allows you to evaluate an expression in the\n * current scope.\n *\n * <div class=\"alert alert-error\">\n * The only appropriate use of `ngInit` is for aliasing special properties of\n * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you\n * should use {@link guide/controller controllers} rather than `ngInit`\n * to initialize values on a scope.\n * </div>\n * <div class=\"alert alert-warning\">\n * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make\n * sure you have parenthesis for correct precedence:\n * <pre class=\"prettyprint\">\n *   <div ng-init=\"test1 = (data | orderBy:'name')\"></div>\n * </pre>\n * </div>\n *\n * @priority 450\n *\n * @element ANY\n * @param {expression} ngInit {@link guide/expression Expression} to eval.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n   <script>\n     function Ctrl($scope) {\n       $scope.list = [['a', 'b'], ['c', 'd']];\n     }\n   </script>\n   <div ng-controller=\"Ctrl\">\n     <div ng-repeat=\"innerList in list\" ng-init=\"outerIndex = $index\">\n       <div ng-repeat=\"value in innerList\" ng-init=\"innerIndex = $index\">\n          <span class=\"example-init\">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>\n       </div>\n     </div>\n   </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should alias index positions', function() {\n         var elements = element.all(by.css('.example-init'));\n         expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');\n         expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');\n         expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');\n         expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');\n       });\n     </file>\n   </example>\n */\nvar ngInitDirective = ngDirective({\n  priority: 450,\n  compile: function() {\n    return {\n      pre: function(scope, element, attrs) {\n        scope.$eval(attrs.ngInit);\n      }\n    };\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngNonBindable\n * @restrict AC\n * @priority 1000\n *\n * @description\n * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current\n * DOM element. This is useful if the element contains what appears to be Angular directives and\n * bindings but which should be ignored by Angular. This could be the case if you have a site that\n * displays snippets of code, for instance.\n *\n * @element ANY\n *\n * @example\n * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,\n * but the one wrapped in `ngNonBindable` is left alone.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <div>Normal: {{1 + 2}}</div>\n        <div ng-non-bindable>Ignored: {{1 + 2}}</div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-non-bindable', function() {\n         expect(element(by.binding('1 + 2')).getText()).toContain('3');\n         expect(element.all(by.css('div')).last().getText()).toMatch(/1 \\+ 2/);\n       });\n      </file>\n    </example>\n */\nvar ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });\n\n/**\n * @ngdoc directive\n * @name ngPluralize\n * @restrict EA\n *\n * @description\n * `ngPluralize` is a directive that displays messages according to en-US localization rules.\n * These rules are bundled with angular.js, but can be overridden\n * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive\n * by specifying the mappings between\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * and the strings to be displayed.\n *\n * # Plural categories and explicit number rules\n * There are two\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * in Angular's default en-US locale: \"one\" and \"other\".\n *\n * While a plural category may match many numbers (for example, in en-US locale, \"other\" can match\n * any number that is not 1), an explicit number rule can only match one number. For example, the\n * explicit number rule for \"3\" matches the number 3. There are examples of plural categories\n * and explicit number rules throughout the rest of this documentation.\n *\n * # Configuring ngPluralize\n * You configure ngPluralize by providing 2 attributes: `count` and `when`.\n * You can also provide an optional attribute, `offset`.\n *\n * The value of the `count` attribute can be either a string or an {@link guide/expression\n * Angular expression}; these are evaluated on the current scope for its bound value.\n *\n * The `when` attribute specifies the mappings between plural categories and the actual\n * string to be displayed. The value of the attribute should be a JSON object.\n *\n * The following example shows how to configure ngPluralize:\n *\n * ```html\n * <ng-pluralize count=\"personCount\"\n                 when=\"{'0': 'Nobody is viewing.',\n *                      'one': '1 person is viewing.',\n *                      'other': '{} people are viewing.'}\">\n * </ng-pluralize>\n *```\n *\n * In the example, `\"0: Nobody is viewing.\"` is an explicit number rule. If you did not\n * specify this rule, 0 would be matched to the \"other\" category and \"0 people are viewing\"\n * would be shown instead of \"Nobody is viewing\". You can specify an explicit number rule for\n * other numbers, for example 12, so that instead of showing \"12 people are viewing\", you can\n * show \"a dozen people are viewing\".\n *\n * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted\n * into pluralized strings. In the previous example, Angular will replace `{}` with\n * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder\n * for <span ng-non-bindable>{{numberExpression}}</span>.\n *\n * # Configuring ngPluralize with offset\n * The `offset` attribute allows further customization of pluralized text, which can result in\n * a better user experience. For example, instead of the message \"4 people are viewing this document\",\n * you might display \"John, Kate and 2 others are viewing this document\".\n * The offset attribute allows you to offset a number by any desired value.\n * Let's take a look at an example:\n *\n * ```html\n * <ng-pluralize count=\"personCount\" offset=2\n *               when=\"{'0': 'Nobody is viewing.',\n *                      '1': '{{person1}} is viewing.',\n *                      '2': '{{person1}} and {{person2}} are viewing.',\n *                      'one': '{{person1}}, {{person2}} and one other person are viewing.',\n *                      'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n * </ng-pluralize>\n * ```\n *\n * Notice that we are still using two plural categories(one, other), but we added\n * three explicit number rules 0, 1 and 2.\n * When one person, perhaps John, views the document, \"John is viewing\" will be shown.\n * When three people view the document, no explicit number rule is found, so\n * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.\n * In this case, plural category 'one' is matched and \"John, Marry and one other person are viewing\"\n * is shown.\n *\n * Note that when you specify offsets, you must provide explicit number rules for\n * numbers from 0 up to and including the offset. If you use an offset of 3, for example,\n * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for\n * plural categories \"one\" and \"other\".\n *\n * @param {string|expression} count The variable to be bound to.\n * @param {string} when The mapping between plural category to its corresponding strings.\n * @param {number=} offset Offset to deduct from the total number.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <script>\n          function Ctrl($scope) {\n            $scope.person1 = 'Igor';\n            $scope.person2 = 'Misko';\n            $scope.personCount = 1;\n          }\n        </script>\n        <div ng-controller=\"Ctrl\">\n          Person 1:<input type=\"text\" ng-model=\"person1\" value=\"Igor\" /><br/>\n          Person 2:<input type=\"text\" ng-model=\"person2\" value=\"Misko\" /><br/>\n          Number of People:<input type=\"text\" ng-model=\"personCount\" value=\"1\" /><br/>\n\n          <!--- Example with simple pluralization rules for en locale --->\n          Without Offset:\n          <ng-pluralize count=\"personCount\"\n                        when=\"{'0': 'Nobody is viewing.',\n                               'one': '1 person is viewing.',\n                               'other': '{} people are viewing.'}\">\n          </ng-pluralize><br>\n\n          <!--- Example with offset --->\n          With Offset(2):\n          <ng-pluralize count=\"personCount\" offset=2\n                        when=\"{'0': 'Nobody is viewing.',\n                               '1': '{{person1}} is viewing.',\n                               '2': '{{person1}} and {{person2}} are viewing.',\n                               'one': '{{person1}}, {{person2}} and one other person are viewing.',\n                               'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n          </ng-pluralize>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should show correct pluralized string', function() {\n          var withoutOffset = element.all(by.css('ng-pluralize')).get(0);\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var countInput = element(by.model('personCount'));\n\n          expect(withoutOffset.getText()).toEqual('1 person is viewing.');\n          expect(withOffset.getText()).toEqual('Igor is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('0');\n\n          expect(withoutOffset.getText()).toEqual('Nobody is viewing.');\n          expect(withOffset.getText()).toEqual('Nobody is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('2');\n\n          expect(withoutOffset.getText()).toEqual('2 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('3');\n\n          expect(withoutOffset.getText()).toEqual('3 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('4');\n\n          expect(withoutOffset.getText()).toEqual('4 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');\n        });\n        it('should show data-bound names', function() {\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var personCount = element(by.model('personCount'));\n          var person1 = element(by.model('person1'));\n          var person2 = element(by.model('person2'));\n          personCount.clear();\n          personCount.sendKeys('4');\n          person1.clear();\n          person1.sendKeys('Di');\n          person2.clear();\n          person2.sendKeys('Vojta');\n          expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');\n        });\n      </file>\n    </example>\n */\nvar ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {\n  var BRACE = /{}/g;\n  return {\n    restrict: 'EA',\n    link: function(scope, element, attr) {\n      var numberExp = attr.count,\n          whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs\n          offset = attr.offset || 0,\n          whens = scope.$eval(whenExp) || {},\n          whensExpFns = {},\n          startSymbol = $interpolate.startSymbol(),\n          endSymbol = $interpolate.endSymbol(),\n          isWhen = /^when(Minus)?(.+)$/;\n\n      forEach(attr, function(expression, attributeName) {\n        if (isWhen.test(attributeName)) {\n          whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] =\n            element.attr(attr.$attr[attributeName]);\n        }\n      });\n      forEach(whens, function(expression, key) {\n        whensExpFns[key] =\n          $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' +\n            offset + endSymbol));\n      });\n\n      scope.$watch(function ngPluralizeWatch() {\n        var value = parseFloat(scope.$eval(numberExp));\n\n        if (!isNaN(value)) {\n          //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise,\n          //check it against pluralization rules in $locale service\n          if (!(value in whens)) value = $locale.pluralCat(value - offset);\n           return whensExpFns[value](scope, element, true);\n        } else {\n          return '';\n        }\n      }, function ngPluralizeWatchAction(newVal) {\n        element.text(newVal);\n      });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngRepeat\n *\n * @description\n * The `ngRepeat` directive instantiates a template once per item from a collection. Each template\n * instance gets its own scope, where the given loop variable is set to the current collection item,\n * and `$index` is set to the item index or key.\n *\n * Special properties are exposed on the local scope of each template instance, including:\n *\n * | Variable  | Type            | Details                                                                     |\n * |-----------|-----------------|-----------------------------------------------------------------------------|\n * | `$index`  | {@type number}  | iterator offset of the repeated element (0..length-1)                       |\n * | `$first`  | {@type boolean} | true if the repeated element is first in the iterator.                      |\n * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |\n * | `$last`   | {@type boolean} | true if the repeated element is last in the iterator.                       |\n * | `$even`   | {@type boolean} | true if the iterator position `$index` is even (otherwise false).           |\n * | `$odd`    | {@type boolean} | true if the iterator position `$index` is odd (otherwise false).            |\n *\n * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.\n * This may be useful when, for instance, nesting ngRepeats.\n *\n * # Special repeat start and end points\n * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending\n * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.\n * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)\n * up to and including the ending HTML tag where **ng-repeat-end** is placed.\n *\n * The example below makes use of this feature:\n * ```html\n *   <header ng-repeat-start=\"item in items\">\n *     Header {{ item }}\n *   </header>\n *   <div class=\"body\">\n *     Body {{ item }}\n *   </div>\n *   <footer ng-repeat-end>\n *     Footer {{ item }}\n *   </footer>\n * ```\n *\n * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:\n * ```html\n *   <header>\n *     Header A\n *   </header>\n *   <div class=\"body\">\n *     Body A\n *   </div>\n *   <footer>\n *     Footer A\n *   </footer>\n *   <header>\n *     Header B\n *   </header>\n *   <div class=\"body\">\n *     Body B\n *   </div>\n *   <footer>\n *     Footer B\n *   </footer>\n * ```\n *\n * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such\n * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).\n *\n * @animations\n * **.enter** - when a new item is added to the list or when an item is revealed after a filter\n *\n * **.leave** - when an item is removed from the list or when an item is filtered out\n *\n * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered\n *\n * @element ANY\n * @scope\n * @priority 1000\n * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These\n *   formats are currently supported:\n *\n *   * `variable in expression` – where variable is the user defined loop variable and `expression`\n *     is a scope expression giving the collection to enumerate.\n *\n *     For example: `album in artist.albums`.\n *\n *   * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,\n *     and `expression` is the scope expression giving the collection to enumerate.\n *\n *     For example: `(name, age) in {'adam':10, 'amalie':12}`.\n *\n *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking function\n *     which can be used to associate the objects in the collection with the DOM elements. If no tracking function\n *     is specified the ng-repeat associates elements by identity in the collection. It is an error to have\n *     more than one tracking function to resolve to the same key. (This would mean that two distinct objects are\n *     mapped to the same DOM element, which is not possible.)  Filters should be applied to the expression,\n *     before specifying a tracking expression.\n *\n *     For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements\n *     will be associated by item identity in the array.\n *\n *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique\n *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements\n *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM\n *     element in the same way in the DOM.\n *\n *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this\n *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`\n *     property is same.\n *\n *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter\n *     to items in conjunction with a tracking expression.\n *\n * @example\n * This example initializes the scope to a list of names and\n * then uses `ngRepeat` to display every person:\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-init=\"friends = [\n        {name:'John', age:25, gender:'boy'},\n        {name:'Jessie', age:30, gender:'girl'},\n        {name:'Johanna', age:28, gender:'girl'},\n        {name:'Joy', age:15, gender:'girl'},\n        {name:'Mary', age:28, gender:'girl'},\n        {name:'Peter', age:95, gender:'boy'},\n        {name:'Sebastian', age:50, gender:'boy'},\n        {name:'Erika', age:27, gender:'girl'},\n        {name:'Patrick', age:40, gender:'boy'},\n        {name:'Samantha', age:60, gender:'girl'}\n      ]\">\n        I have {{friends.length}} friends. They are:\n        <input type=\"search\" ng-model=\"q\" placeholder=\"filter friends...\" />\n        <ul class=\"example-animate-container\">\n          <li class=\"animate-repeat\" ng-repeat=\"friend in friends | filter:q\">\n            [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.\n          </li>\n        </ul>\n      </div>\n    </file>\n    <file name=\"animations.css\">\n      .example-animate-container {\n        background:white;\n        border:1px solid black;\n        list-style:none;\n        margin:0;\n        padding:0 10px;\n      }\n\n      .animate-repeat {\n        line-height:40px;\n        list-style:none;\n        box-sizing:border-box;\n      }\n\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter,\n      .animate-repeat.ng-leave {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n      }\n\n      .animate-repeat.ng-leave.ng-leave-active,\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter {\n        opacity:0;\n        max-height:0;\n      }\n\n      .animate-repeat.ng-leave,\n      .animate-repeat.ng-move.ng-move-active,\n      .animate-repeat.ng-enter.ng-enter-active {\n        opacity:1;\n        max-height:40px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var friends = element.all(by.repeater('friend in friends'));\n\n      it('should render initial data set', function() {\n        expect(friends.count()).toBe(10);\n        expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');\n        expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');\n        expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');\n        expect(element(by.binding('friends.length')).getText())\n            .toMatch(\"I have 10 friends. They are:\");\n      });\n\n       it('should update repeater when filter predicate changes', function() {\n         expect(friends.count()).toBe(10);\n\n         element(by.model('q')).sendKeys('ma');\n\n         expect(friends.count()).toBe(2);\n         expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');\n         expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');\n       });\n      </file>\n    </example>\n */\nvar ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {\n  var NG_REMOVED = '$$NG_REMOVED';\n  var ngRepeatMinErr = minErr('ngRepeat');\n  return {\n    transclude: 'element',\n    priority: 1000,\n    terminal: true,\n    $$tlb: true,\n    link: function($scope, $element, $attr, ctrl, $transclude){\n        var expression = $attr.ngRepeat;\n        var match = expression.match(/^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/),\n          trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn,\n          lhs, rhs, valueIdentifier, keyIdentifier,\n          hashFnLocals = {$id: hashKey};\n\n        if (!match) {\n          throw ngRepeatMinErr('iexp', \"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.\",\n            expression);\n        }\n\n        lhs = match[1];\n        rhs = match[2];\n        trackByExp = match[3];\n\n        if (trackByExp) {\n          trackByExpGetter = $parse(trackByExp);\n          trackByIdExpFn = function(key, value, index) {\n            // assign key, value, and $index to the locals so that they can be used in hash functions\n            if (keyIdentifier) hashFnLocals[keyIdentifier] = key;\n            hashFnLocals[valueIdentifier] = value;\n            hashFnLocals.$index = index;\n            return trackByExpGetter($scope, hashFnLocals);\n          };\n        } else {\n          trackByIdArrayFn = function(key, value) {\n            return hashKey(value);\n          };\n          trackByIdObjFn = function(key) {\n            return key;\n          };\n        }\n\n        match = lhs.match(/^(?:([\\$\\w]+)|\\(([\\$\\w]+)\\s*,\\s*([\\$\\w]+)\\))$/);\n        if (!match) {\n          throw ngRepeatMinErr('iidexp', \"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.\",\n                                                                    lhs);\n        }\n        valueIdentifier = match[3] || match[1];\n        keyIdentifier = match[2];\n\n        // Store a list of elements from previous run. This is a hash where key is the item from the\n        // iterator, and the value is objects with following properties.\n        //   - scope: bound scope\n        //   - element: previous element.\n        //   - index: position\n        var lastBlockMap = {};\n\n        //watch props\n        $scope.$watchCollection(rhs, function ngRepeatAction(collection){\n          var index, length,\n              previousNode = $element[0],     // current position of the node\n              nextNode,\n              // Same as lastBlockMap but it has the current state. It will become the\n              // lastBlockMap on the next iteration.\n              nextBlockMap = {},\n              arrayLength,\n              childScope,\n              key, value, // key/value of iteration\n              trackById,\n              trackByIdFn,\n              collectionKeys,\n              block,       // last object information {scope, element, id}\n              nextBlockOrder = [],\n              elementsToRemove;\n\n\n          if (isArrayLike(collection)) {\n            collectionKeys = collection;\n            trackByIdFn = trackByIdExpFn || trackByIdArrayFn;\n          } else {\n            trackByIdFn = trackByIdExpFn || trackByIdObjFn;\n            // if object, extract keys, sort them and use to determine order of iteration over obj props\n            collectionKeys = [];\n            for (key in collection) {\n              if (collection.hasOwnProperty(key) && key.charAt(0) != '$') {\n                collectionKeys.push(key);\n              }\n            }\n            collectionKeys.sort();\n          }\n\n          arrayLength = collectionKeys.length;\n\n          // locate existing items\n          length = nextBlockOrder.length = collectionKeys.length;\n          for(index = 0; index < length; index++) {\n           key = (collection === collectionKeys) ? index : collectionKeys[index];\n           value = collection[key];\n           trackById = trackByIdFn(key, value, index);\n           assertNotHasOwnProperty(trackById, '`track by` id');\n           if(lastBlockMap.hasOwnProperty(trackById)) {\n             block = lastBlockMap[trackById];\n             delete lastBlockMap[trackById];\n             nextBlockMap[trackById] = block;\n             nextBlockOrder[index] = block;\n           } else if (nextBlockMap.hasOwnProperty(trackById)) {\n             // restore lastBlockMap\n             forEach(nextBlockOrder, function(block) {\n               if (block && block.scope) lastBlockMap[block.id] = block;\n             });\n             // This is a duplicate and we need to throw an error\n             throw ngRepeatMinErr('dupes', \"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}\",\n                                                                                                                                                    expression,       trackById);\n           } else {\n             // new never before seen block\n             nextBlockOrder[index] = { id: trackById };\n             nextBlockMap[trackById] = false;\n           }\n         }\n\n          // remove existing items\n          for (key in lastBlockMap) {\n            // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn\n            if (lastBlockMap.hasOwnProperty(key)) {\n              block = lastBlockMap[key];\n              elementsToRemove = getBlockElements(block.clone);\n              $animate.leave(elementsToRemove);\n              forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; });\n              block.scope.$destroy();\n            }\n          }\n\n          // we are not using forEach for perf reasons (trying to avoid #call)\n          for (index = 0, length = collectionKeys.length; index < length; index++) {\n            key = (collection === collectionKeys) ? index : collectionKeys[index];\n            value = collection[key];\n            block = nextBlockOrder[index];\n            if (nextBlockOrder[index - 1]) previousNode = getBlockEnd(nextBlockOrder[index - 1]);\n\n            if (block.scope) {\n              // if we have already seen this object, then we need to reuse the\n              // associated scope/element\n              childScope = block.scope;\n\n              nextNode = previousNode;\n              do {\n                nextNode = nextNode.nextSibling;\n              } while(nextNode && nextNode[NG_REMOVED]);\n\n              if (getBlockStart(block) != nextNode) {\n                // existing item which got moved\n                $animate.move(getBlockElements(block.clone), null, jqLite(previousNode));\n              }\n              previousNode = getBlockEnd(block);\n            } else {\n              // new item which we don't know about\n              childScope = $scope.$new();\n            }\n\n            childScope[valueIdentifier] = value;\n            if (keyIdentifier) childScope[keyIdentifier] = key;\n            childScope.$index = index;\n            childScope.$first = (index === 0);\n            childScope.$last = (index === (arrayLength - 1));\n            childScope.$middle = !(childScope.$first || childScope.$last);\n            // jshint bitwise: false\n            childScope.$odd = !(childScope.$even = (index&1) === 0);\n            // jshint bitwise: true\n\n            if (!block.scope) {\n              $transclude(childScope, function(clone) {\n                clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' ');\n                $animate.enter(clone, null, jqLite(previousNode));\n                previousNode = clone;\n                block.scope = childScope;\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when it's template arrives.\n                block.clone = clone;\n                nextBlockMap[block.id] = block;\n              });\n            }\n          }\n          lastBlockMap = nextBlockMap;\n        });\n    }\n  };\n\n  function getBlockStart(block) {\n    return block.clone[0];\n  }\n\n  function getBlockEnd(block) {\n    return block.clone[block.clone.length - 1];\n  }\n}];\n\n/**\n * @ngdoc directive\n * @name ngShow\n *\n * @description\n * The `ngShow` directive shows or hides the given HTML element based on the expression\n * provided to the ngShow attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is visible) -->\n * <div ng-show=\"myValue\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is hidden) -->\n * <div ng-show=\"myValue\" class=\"ng-hide\"></div>\n * ```\n *\n * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute\n * on the element causing it to become hidden. When true, the ng-hide CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding .ng-hide\n *\n * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by\n * restating the styles for the .ng-hide class in CSS:\n * ```css\n * .ng-hide {\n *   //!annotate CSS Specificity|Not to worry, this will override the AngularJS default...\n *   display:block!important;\n *\n *   //this is just another form of hiding an element\n *   position:absolute;\n *   top:-9999px;\n *   left:-9999px;\n * }\n * ```\n *\n * Just remember to include the important flag so the CSS override will function.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):<br />\n * \"f\" / \"0\" / \"false\" / \"no\" / \"n\" / \"[]\"\n * </div>\n *\n * ## A note about animations with ngShow\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass except that\n * you must also include the !important flag to override the display property\n * so that you can perform an animation when the element is hidden during the time of the animation.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition:0.5s linear all;\n *   display:block!important;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * @animations\n * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible\n * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden\n *\n * @element ANY\n * @param {expression} ngShow If the {@link guide/expression expression} is truthy\n *     then the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-show\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-show\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-show {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n        line-height:20px;\n        opacity:1;\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n\n      .animate-show.ng-hide-add,\n      .animate-show.ng-hide-remove {\n        display:block!important;\n      }\n\n      .animate-show.ng-hide {\n        line-height:0;\n        opacity:0;\n        padding:0 10px;\n      }\n\n      .check-element {\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngShowDirective = ['$animate', function($animate) {\n  return function(scope, element, attr) {\n    scope.$watch(attr.ngShow, function ngShowWatchAction(value){\n      $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide');\n    });\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngHide\n *\n * @description\n * The `ngHide` directive shows or hides the given HTML element based on the expression\n * provided to the ngHide attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is hidden) -->\n * <div ng-hide=\"myValue\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is visible) -->\n * <div ng-hide=\"myValue\" class=\"ng-hide\"></div>\n * ```\n *\n * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute\n * on the element causing it to become hidden. When false, the ng-hide CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding .ng-hide\n *\n * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by\n * restating the styles for the .ng-hide class in CSS:\n * ```css\n * .ng-hide {\n *   //!annotate CSS Specificity|Not to worry, this will override the AngularJS default...\n *   display:block!important;\n *\n *   //this is just another form of hiding an element\n *   position:absolute;\n *   top:-9999px;\n *   left:-9999px;\n * }\n * ```\n *\n * Just remember to include the important flag so the CSS override will function.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):<br />\n * \"f\" / \"0\" / \"false\" / \"no\" / \"n\" / \"[]\"\n * </div>\n *\n * ## A note about animations with ngHide\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass, except that\n * you must also include the !important flag to override the display property so\n * that you can perform an animation when the element is hidden during the time of the animation.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition:0.5s linear all;\n *   display:block!important;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * @animations\n * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden\n * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible\n *\n * @element ANY\n * @param {expression} ngHide If the {@link guide/expression expression} is truthy then\n *     the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-hide\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-hide\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-hide {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n        line-height:20px;\n        opacity:1;\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n\n      .animate-hide.ng-hide-add,\n      .animate-hide.ng-hide-remove {\n        display:block!important;\n      }\n\n      .animate-hide.ng-hide {\n        line-height:0;\n        opacity:0;\n        padding:0 10px;\n      }\n\n      .check-element {\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngHideDirective = ['$animate', function($animate) {\n  return function(scope, element, attr) {\n    scope.$watch(attr.ngHide, function ngHideWatchAction(value){\n      $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide');\n    });\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngStyle\n * @restrict AC\n *\n * @description\n * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.\n *\n * @element ANY\n * @param {expression} ngStyle {@link guide/expression Expression} which evals to an\n *      object whose keys are CSS style names and values are corresponding values for those CSS\n *      keys.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <input type=\"button\" value=\"set\" ng-click=\"myStyle={color:'red'}\">\n        <input type=\"button\" value=\"clear\" ng-click=\"myStyle={}\">\n        <br/>\n        <span ng-style=\"myStyle\">Sample Text</span>\n        <pre>myStyle={{myStyle}}</pre>\n     </file>\n     <file name=\"style.css\">\n       span {\n         color: black;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var colorSpan = element(by.css('span'));\n\n       it('should check ng-style', function() {\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n         element(by.css('input[value=set]')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');\n         element(by.css('input[value=clear]')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n       });\n     </file>\n   </example>\n */\nvar ngStyleDirective = ngDirective(function(scope, element, attr) {\n  scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {\n    if (oldStyles && (newStyles !== oldStyles)) {\n      forEach(oldStyles, function(val, style) { element.css(style, '');});\n    }\n    if (newStyles) element.css(newStyles);\n  }, true);\n});\n\n/**\n * @ngdoc directive\n * @name ngSwitch\n * @restrict EA\n *\n * @description\n * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.\n * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location\n * as specified in the template.\n *\n * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it\n * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element\n * matches the value obtained from the evaluated expression. In other words, you define a container element\n * (where you place the directive), place an expression on the **`on=\"...\"` attribute**\n * (or the **`ng-switch=\"...\"` attribute**), define any inner elements inside of the directive and place\n * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on\n * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default\n * attribute is displayed.\n *\n * <div class=\"alert alert-info\">\n * Be aware that the attribute values to match against cannot be expressions. They are interpreted\n * as literal string values to match against.\n * For example, **`ng-switch-when=\"someVal\"`** will match against the string `\"someVal\"` not against the\n * value of the expression `$scope.someVal`.\n * </div>\n\n * @animations\n * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container\n * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM\n *\n * @usage\n * <ANY ng-switch=\"expression\">\n *   <ANY ng-switch-when=\"matchValue1\">...</ANY>\n *   <ANY ng-switch-when=\"matchValue2\">...</ANY>\n *   <ANY ng-switch-default>...</ANY>\n * </ANY>\n *\n *\n * @scope\n * @priority 800\n * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.\n * On child elements add:\n *\n * * `ngSwitchWhen`: the case statement to match against. If match then this\n *   case will be displayed. If the same match appears multiple times, all the\n *   elements will be displayed.\n * * `ngSwitchDefault`: the default case when no other case match. If there\n *   are multiple default cases, all of them will be displayed when no other\n *   case match.\n *\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-controller=\"Ctrl\">\n        <select ng-model=\"selection\" ng-options=\"item for item in items\">\n        </select>\n        <tt>selection={{selection}}</tt>\n        <hr/>\n        <div class=\"animate-switch-container\"\n          ng-switch on=\"selection\">\n            <div class=\"animate-switch\" ng-switch-when=\"settings\">Settings Div</div>\n            <div class=\"animate-switch\" ng-switch-when=\"home\">Home Span</div>\n            <div class=\"animate-switch\" ng-switch-default>default</div>\n        </div>\n      </div>\n    </file>\n    <file name=\"script.js\">\n      function Ctrl($scope) {\n        $scope.items = ['settings', 'home', 'other'];\n        $scope.selection = $scope.items[0];\n      }\n    </file>\n    <file name=\"animations.css\">\n      .animate-switch-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .animate-switch {\n        padding:10px;\n      }\n\n      .animate-switch.ng-animate {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n      }\n\n      .animate-switch.ng-leave.ng-leave-active,\n      .animate-switch.ng-enter {\n        top:-50px;\n      }\n      .animate-switch.ng-leave,\n      .animate-switch.ng-enter.ng-enter-active {\n        top:0;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var switchElem = element(by.css('[ng-switch]'));\n      var select = element(by.model('selection'));\n\n      it('should start in settings', function() {\n        expect(switchElem.getText()).toMatch(/Settings Div/);\n      });\n      it('should change to home', function() {\n        select.element.all(by.css('option')).get(1).click();\n        expect(switchElem.getText()).toMatch(/Home Span/);\n      });\n      it('should select default', function() {\n        select.element.all(by.css('option')).get(2).click();\n        expect(switchElem.getText()).toMatch(/default/);\n      });\n    </file>\n  </example>\n */\nvar ngSwitchDirective = ['$animate', function($animate) {\n  return {\n    restrict: 'EA',\n    require: 'ngSwitch',\n\n    // asks for $scope to fool the BC controller module\n    controller: ['$scope', function ngSwitchController() {\n     this.cases = {};\n    }],\n    link: function(scope, element, attr, ngSwitchController) {\n      var watchExpr = attr.ngSwitch || attr.on,\n          selectedTranscludes,\n          selectedElements,\n          previousElements,\n          selectedScopes = [];\n\n      scope.$watch(watchExpr, function ngSwitchWatchAction(value) {\n        var i, ii = selectedScopes.length;\n        if(ii > 0) {\n          if(previousElements) {\n            for (i = 0; i < ii; i++) {\n              previousElements[i].remove();\n            }\n            previousElements = null;\n          }\n\n          previousElements = [];\n          for (i= 0; i<ii; i++) {\n            var selected = selectedElements[i];\n            selectedScopes[i].$destroy();\n            previousElements[i] = selected;\n            $animate.leave(selected, function() {\n              previousElements.splice(i, 1);\n              if(previousElements.length === 0) {\n                previousElements = null;\n              }\n            });\n          }\n        }\n\n        selectedElements = [];\n        selectedScopes = [];\n\n        if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {\n          scope.$eval(attr.change);\n          forEach(selectedTranscludes, function(selectedTransclude) {\n            var selectedScope = scope.$new();\n            selectedScopes.push(selectedScope);\n            selectedTransclude.transclude(selectedScope, function(caseElement) {\n              var anchor = selectedTransclude.element;\n\n              selectedElements.push(caseElement);\n              $animate.enter(caseElement, anchor.parent(), anchor);\n            });\n          });\n        }\n      });\n    }\n  };\n}];\n\nvar ngSwitchWhenDirective = ngDirective({\n  transclude: 'element',\n  priority: 800,\n  require: '^ngSwitch',\n  link: function(scope, element, attrs, ctrl, $transclude) {\n    ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);\n    ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });\n  }\n});\n\nvar ngSwitchDefaultDirective = ngDirective({\n  transclude: 'element',\n  priority: 800,\n  require: '^ngSwitch',\n  link: function(scope, element, attr, ctrl, $transclude) {\n    ctrl.cases['?'] = (ctrl.cases['?'] || []);\n    ctrl.cases['?'].push({ transclude: $transclude, element: element });\n   }\n});\n\n/**\n * @ngdoc directive\n * @name ngTransclude\n * @restrict AC\n *\n * @description\n * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.\n *\n * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.\n *\n * @element ANY\n *\n * @example\n   <example module=\"transclude\">\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.title = 'Lorem Ipsum';\n           $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';\n         }\n\n         angular.module('transclude', [])\n          .directive('pane', function(){\n             return {\n               restrict: 'E',\n               transclude: true,\n               scope: { title:'@' },\n               template: '<div style=\"border: 1px solid black;\">' +\n                           '<div style=\"background-color: gray\">{{title}}</div>' +\n                           '<div ng-transclude></div>' +\n                         '</div>'\n             };\n         });\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input ng-model=\"title\"><br>\n         <textarea ng-model=\"text\"></textarea> <br/>\n         <pane title=\"{{title}}\">{{text}}</pane>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n        it('should have transcluded', function() {\n          var titleElement = element(by.model('title'));\n          titleElement.clear();\n          titleElement.sendKeys('TITLE');\n          var textElement = element(by.model('text'));\n          textElement.clear();\n          textElement.sendKeys('TEXT');\n          expect(element(by.binding('title')).getText()).toEqual('TITLE');\n          expect(element(by.binding('text')).getText()).toEqual('TEXT');\n        });\n     </file>\n   </example>\n *\n */\nvar ngTranscludeDirective = ngDirective({\n  link: function($scope, $element, $attrs, controller, $transclude) {\n    if (!$transclude) {\n      throw minErr('ngTransclude')('orphan',\n       'Illegal use of ngTransclude directive in the template! ' +\n       'No parent directive that requires a transclusion found. ' +\n       'Element: {0}',\n       startingTag($element));\n    }\n\n    $transclude(function(clone) {\n      $element.empty();\n      $element.append(clone);\n    });\n  }\n});\n\n/**\n * @ngdoc directive\n * @name script\n * @restrict E\n *\n * @description\n * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the\n * template can be used by {@link ng.directive:ngInclude `ngInclude`},\n * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the\n * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be\n * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.\n *\n * @param {string} type Must be set to `'text/ng-template'`.\n * @param {string} id Cache name of the template.\n *\n * @example\n  <example>\n    <file name=\"index.html\">\n      <script type=\"text/ng-template\" id=\"/tpl.html\">\n        Content of the template.\n      </script>\n\n      <a ng-click=\"currentTpl='/tpl.html'\" id=\"tpl-link\">Load inlined template</a>\n      <div id=\"tpl-content\" ng-include src=\"currentTpl\"></div>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      it('should load template defined inside script tag', function() {\n        element(by.css('#tpl-link')).click();\n        expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);\n      });\n    </file>\n  </example>\n */\nvar scriptDirective = ['$templateCache', function($templateCache) {\n  return {\n    restrict: 'E',\n    terminal: true,\n    compile: function(element, attr) {\n      if (attr.type == 'text/ng-template') {\n        var templateUrl = attr.id,\n            // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent\n            text = element[0].text;\n\n        $templateCache.put(templateUrl, text);\n      }\n    }\n  };\n}];\n\nvar ngOptionsMinErr = minErr('ngOptions');\n/**\n * @ngdoc directive\n * @name select\n * @restrict E\n *\n * @description\n * HTML `SELECT` element with angular data-binding.\n *\n * # `ngOptions`\n *\n * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`\n * elements for the `<select>` element using the array or object obtained by evaluating the\n * `ngOptions` comprehension_expression.\n *\n * When an item in the `<select>` menu is selected, the array element or object property\n * represented by the selected option will be bound to the model identified by the `ngModel`\n * directive.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** `ngModel` compares by reference, not value. This is important when binding to an\n * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).\n * </div>\n *\n * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can\n * be nested into the `<select>` element. This element will then represent the `null` or \"not selected\"\n * option. See example below for demonstration.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** `ngOptions` provides an iterator facility for the `<option>` element which should be used instead\n * of {@link ng.directive:ngRepeat ngRepeat} when you want the\n * `select` model to be bound to a non-string value. This is because an option element can only\n * be bound to string values at present.\n * </div>\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required The control is considered valid only if value is entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {comprehension_expression=} ngOptions in one of the following forms:\n *\n *   * for array data sources:\n *     * `label` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`for`** `value` **`in`** `array`\n *     * `label`  **`group by`** `group` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`\n *   * for object data sources:\n *     * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`group by`** `group`\n *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`\n *\n * Where:\n *\n *   * `array` / `object`: an expression which evaluates to an array / object to iterate over.\n *   * `value`: local variable which will refer to each item in the `array` or each property value\n *      of `object` during iteration.\n *   * `key`: local variable which will refer to a property name in `object` during iteration.\n *   * `label`: The result of this expression will be the label for `<option>` element. The\n *     `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).\n *   * `select`: The result of this expression will be bound to the model of the parent `<select>`\n *      element. If not specified, `select` expression will default to `value`.\n *   * `group`: The result of this expression will be used to group options using the `<optgroup>`\n *      DOM element.\n *   * `trackexpr`: Used when working with an array of objects. The result of this expression will be\n *      used to identify the objects in the array. The `trackexpr` will most likely refer to the\n *     `value` variable (e.g. `value.propertyName`).\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <script>\n        function MyCntrl($scope) {\n          $scope.colors = [\n            {name:'black', shade:'dark'},\n            {name:'white', shade:'light'},\n            {name:'red', shade:'dark'},\n            {name:'blue', shade:'dark'},\n            {name:'yellow', shade:'light'}\n          ];\n          $scope.color = $scope.colors[2]; // red\n        }\n        </script>\n        <div ng-controller=\"MyCntrl\">\n          <ul>\n            <li ng-repeat=\"color in colors\">\n              Name: <input ng-model=\"color.name\">\n              [<a href ng-click=\"colors.splice($index, 1)\">X</a>]\n            </li>\n            <li>\n              [<a href ng-click=\"colors.push({})\">add</a>]\n            </li>\n          </ul>\n          <hr/>\n          Color (null not allowed):\n          <select ng-model=\"color\" ng-options=\"c.name for c in colors\"></select><br>\n\n          Color (null allowed):\n          <span  class=\"nullable\">\n            <select ng-model=\"color\" ng-options=\"c.name for c in colors\">\n              <option value=\"\">-- choose color --</option>\n            </select>\n          </span><br/>\n\n          Color grouped by shade:\n          <select ng-model=\"color\" ng-options=\"c.name group by c.shade for c in colors\">\n          </select><br/>\n\n\n          Select <a href ng-click=\"color={name:'not in list'}\">bogus</a>.<br>\n          <hr/>\n          Currently selected: {{ {selected_color:color}  }}\n          <div style=\"border:solid 1px black; height:20px\"\n               ng-style=\"{'background-color':color.name}\">\n          </div>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n         it('should check ng-options', function() {\n           expect(element(by.binding('{selected_color:color}')).getText()).toMatch('red');\n           element.all(by.select('color')).first().click();\n           element.all(by.css('select[ng-model=\"color\"] option')).first().click();\n           expect(element(by.binding('{selected_color:color}')).getText()).toMatch('black');\n           element(by.css('.nullable select[ng-model=\"color\"]')).click();\n           element.all(by.css('.nullable select[ng-model=\"color\"] option')).first().click();\n           expect(element(by.binding('{selected_color:color}')).getText()).toMatch('null');\n         });\n      </file>\n    </example>\n */\n\nvar ngOptionsDirective = valueFn({ terminal: true });\n// jshint maxlen: false\nvar selectDirective = ['$compile', '$parse', function($compile,   $parse) {\n                         //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888\n  var NG_OPTIONS_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/,\n      nullModelCtrl = {$setViewValue: noop};\n// jshint maxlen: 100\n\n  return {\n    restrict: 'E',\n    require: ['select', '?ngModel'],\n    controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {\n      var self = this,\n          optionsMap = {},\n          ngModelCtrl = nullModelCtrl,\n          nullOption,\n          unknownOption;\n\n\n      self.databound = $attrs.ngModel;\n\n\n      self.init = function(ngModelCtrl_, nullOption_, unknownOption_) {\n        ngModelCtrl = ngModelCtrl_;\n        nullOption = nullOption_;\n        unknownOption = unknownOption_;\n      };\n\n\n      self.addOption = function(value) {\n        assertNotHasOwnProperty(value, '\"option value\"');\n        optionsMap[value] = true;\n\n        if (ngModelCtrl.$viewValue == value) {\n          $element.val(value);\n          if (unknownOption.parent()) unknownOption.remove();\n        }\n      };\n\n\n      self.removeOption = function(value) {\n        if (this.hasOption(value)) {\n          delete optionsMap[value];\n          if (ngModelCtrl.$viewValue == value) {\n            this.renderUnknownOption(value);\n          }\n        }\n      };\n\n\n      self.renderUnknownOption = function(val) {\n        var unknownVal = '? ' + hashKey(val) + ' ?';\n        unknownOption.val(unknownVal);\n        $element.prepend(unknownOption);\n        $element.val(unknownVal);\n        unknownOption.prop('selected', true); // needed for IE\n      };\n\n\n      self.hasOption = function(value) {\n        return optionsMap.hasOwnProperty(value);\n      };\n\n      $scope.$on('$destroy', function() {\n        // disable unknown option so that we don't do work when the whole select is being destroyed\n        self.renderUnknownOption = noop;\n      });\n    }],\n\n    link: function(scope, element, attr, ctrls) {\n      // if ngModel is not defined, we don't need to do anything\n      if (!ctrls[1]) return;\n\n      var selectCtrl = ctrls[0],\n          ngModelCtrl = ctrls[1],\n          multiple = attr.multiple,\n          optionsExp = attr.ngOptions,\n          nullOption = false, // if false, user will not be able to select it (used by ngOptions)\n          emptyOption,\n          // we can't just jqLite('<option>') since jqLite is not smart enough\n          // to create it in <select> and IE barfs otherwise.\n          optionTemplate = jqLite(document.createElement('option')),\n          optGroupTemplate =jqLite(document.createElement('optgroup')),\n          unknownOption = optionTemplate.clone();\n\n      // find \"null\" option\n      for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) {\n        if (children[i].value === '') {\n          emptyOption = nullOption = children.eq(i);\n          break;\n        }\n      }\n\n      selectCtrl.init(ngModelCtrl, nullOption, unknownOption);\n\n      // required validator\n      if (multiple) {\n        ngModelCtrl.$isEmpty = function(value) {\n          return !value || value.length === 0;\n        };\n      }\n\n      if (optionsExp) setupAsOptions(scope, element, ngModelCtrl);\n      else if (multiple) setupAsMultiple(scope, element, ngModelCtrl);\n      else setupAsSingle(scope, element, ngModelCtrl, selectCtrl);\n\n\n      ////////////////////////////\n\n\n\n      function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) {\n        ngModelCtrl.$render = function() {\n          var viewValue = ngModelCtrl.$viewValue;\n\n          if (selectCtrl.hasOption(viewValue)) {\n            if (unknownOption.parent()) unknownOption.remove();\n            selectElement.val(viewValue);\n            if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy\n          } else {\n            if (isUndefined(viewValue) && emptyOption) {\n              selectElement.val('');\n            } else {\n              selectCtrl.renderUnknownOption(viewValue);\n            }\n          }\n        };\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            if (unknownOption.parent()) unknownOption.remove();\n            ngModelCtrl.$setViewValue(selectElement.val());\n          });\n        });\n      }\n\n      function setupAsMultiple(scope, selectElement, ctrl) {\n        var lastView;\n        ctrl.$render = function() {\n          var items = new HashMap(ctrl.$viewValue);\n          forEach(selectElement.find('option'), function(option) {\n            option.selected = isDefined(items.get(option.value));\n          });\n        };\n\n        // we have to do it on each watch since ngModel watches reference, but\n        // we need to work of an array, so we need to see if anything was inserted/removed\n        scope.$watch(function selectMultipleWatch() {\n          if (!equals(lastView, ctrl.$viewValue)) {\n            lastView = copy(ctrl.$viewValue);\n            ctrl.$render();\n          }\n        });\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            var array = [];\n            forEach(selectElement.find('option'), function(option) {\n              if (option.selected) {\n                array.push(option.value);\n              }\n            });\n            ctrl.$setViewValue(array);\n          });\n        });\n      }\n\n      function setupAsOptions(scope, selectElement, ctrl) {\n        var match;\n\n        if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) {\n          throw ngOptionsMinErr('iexp',\n            \"Expected expression in form of \" +\n            \"'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'\" +\n            \" but got '{0}'. Element: {1}\",\n            optionsExp, startingTag(selectElement));\n        }\n\n        var displayFn = $parse(match[2] || match[1]),\n            valueName = match[4] || match[6],\n            keyName = match[5],\n            groupByFn = $parse(match[3] || ''),\n            valueFn = $parse(match[2] ? match[1] : valueName),\n            valuesFn = $parse(match[7]),\n            track = match[8],\n            trackFn = track ? $parse(match[8]) : null,\n            // This is an array of array of existing option groups in DOM.\n            // We try to reuse these if possible\n            // - optionGroupsCache[0] is the options with no option group\n            // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element\n            optionGroupsCache = [[{element: selectElement, label:''}]];\n\n        if (nullOption) {\n          // compile the element since there might be bindings in it\n          $compile(nullOption)(scope);\n\n          // remove the class, which is added automatically because we recompile the element and it\n          // becomes the compilation root\n          nullOption.removeClass('ng-scope');\n\n          // we need to remove it before calling selectElement.empty() because otherwise IE will\n          // remove the label from the element. wtf?\n          nullOption.remove();\n        }\n\n        // clear contents, we'll add what's needed based on the model\n        selectElement.empty();\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            var optionGroup,\n                collection = valuesFn(scope) || [],\n                locals = {},\n                key, value, optionElement, index, groupIndex, length, groupLength, trackIndex;\n\n            if (multiple) {\n              value = [];\n              for (groupIndex = 0, groupLength = optionGroupsCache.length;\n                   groupIndex < groupLength;\n                   groupIndex++) {\n                // list of options for that group. (first item has the parent)\n                optionGroup = optionGroupsCache[groupIndex];\n\n                for(index = 1, length = optionGroup.length; index < length; index++) {\n                  if ((optionElement = optionGroup[index].element)[0].selected) {\n                    key = optionElement.val();\n                    if (keyName) locals[keyName] = key;\n                    if (trackFn) {\n                      for (trackIndex = 0; trackIndex < collection.length; trackIndex++) {\n                        locals[valueName] = collection[trackIndex];\n                        if (trackFn(scope, locals) == key) break;\n                      }\n                    } else {\n                      locals[valueName] = collection[key];\n                    }\n                    value.push(valueFn(scope, locals));\n                  }\n                }\n              }\n            } else {\n              key = selectElement.val();\n              if (key == '?') {\n                value = undefined;\n              } else if (key === ''){\n                value = null;\n              } else {\n                if (trackFn) {\n                  for (trackIndex = 0; trackIndex < collection.length; trackIndex++) {\n                    locals[valueName] = collection[trackIndex];\n                    if (trackFn(scope, locals) == key) {\n                      value = valueFn(scope, locals);\n                      break;\n                    }\n                  }\n                } else {\n                  locals[valueName] = collection[key];\n                  if (keyName) locals[keyName] = key;\n                  value = valueFn(scope, locals);\n                }\n              }\n              // Update the null option's selected property here so $render cleans it up correctly\n              if (optionGroupsCache[0].length > 1) {\n                if (optionGroupsCache[0][1].id !== key) {\n                  optionGroupsCache[0][1].selected = false;\n                }\n              }\n            }\n            ctrl.$setViewValue(value);\n          });\n        });\n\n        ctrl.$render = render;\n\n        // TODO(vojta): can't we optimize this ?\n        scope.$watch(render);\n\n        function render() {\n              // Temporary location for the option groups before we render them\n          var optionGroups = {'':[]},\n              optionGroupNames = [''],\n              optionGroupName,\n              optionGroup,\n              option,\n              existingParent, existingOptions, existingOption,\n              modelValue = ctrl.$modelValue,\n              values = valuesFn(scope) || [],\n              keys = keyName ? sortedKeys(values) : values,\n              key,\n              groupLength, length,\n              groupIndex, index,\n              locals = {},\n              selected,\n              selectedSet = false, // nothing is selected yet\n              lastElement,\n              element,\n              label;\n\n          if (multiple) {\n            if (trackFn && isArray(modelValue)) {\n              selectedSet = new HashMap([]);\n              for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) {\n                locals[valueName] = modelValue[trackIndex];\n                selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]);\n              }\n            } else {\n              selectedSet = new HashMap(modelValue);\n            }\n          }\n\n          // We now build up the list of options we need (we merge later)\n          for (index = 0; length = keys.length, index < length; index++) {\n\n            key = index;\n            if (keyName) {\n              key = keys[index];\n              if ( key.charAt(0) === '$' ) continue;\n              locals[keyName] = key;\n            }\n\n            locals[valueName] = values[key];\n\n            optionGroupName = groupByFn(scope, locals) || '';\n            if (!(optionGroup = optionGroups[optionGroupName])) {\n              optionGroup = optionGroups[optionGroupName] = [];\n              optionGroupNames.push(optionGroupName);\n            }\n            if (multiple) {\n              selected = isDefined(\n                selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals))\n              );\n            } else {\n              if (trackFn) {\n                var modelCast = {};\n                modelCast[valueName] = modelValue;\n                selected = trackFn(scope, modelCast) === trackFn(scope, locals);\n              } else {\n                selected = modelValue === valueFn(scope, locals);\n              }\n              selectedSet = selectedSet || selected; // see if at least one item is selected\n            }\n            label = displayFn(scope, locals); // what will be seen by the user\n\n            // doing displayFn(scope, locals) || '' overwrites zero values\n            label = isDefined(label) ? label : '';\n            optionGroup.push({\n              // either the index into array or key from object\n              id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index),\n              label: label,\n              selected: selected                   // determine if we should be selected\n            });\n          }\n          if (!multiple) {\n            if (nullOption || modelValue === null) {\n              // insert null option if we have a placeholder, or the model is null\n              optionGroups[''].unshift({id:'', label:'', selected:!selectedSet});\n            } else if (!selectedSet) {\n              // option could not be found, we have to insert the undefined item\n              optionGroups[''].unshift({id:'?', label:'', selected:true});\n            }\n          }\n\n          // Now we need to update the list of DOM nodes to match the optionGroups we computed above\n          for (groupIndex = 0, groupLength = optionGroupNames.length;\n               groupIndex < groupLength;\n               groupIndex++) {\n            // current option group name or '' if no group\n            optionGroupName = optionGroupNames[groupIndex];\n\n            // list of options for that group. (first item has the parent)\n            optionGroup = optionGroups[optionGroupName];\n\n            if (optionGroupsCache.length <= groupIndex) {\n              // we need to grow the optionGroups\n              existingParent = {\n                element: optGroupTemplate.clone().attr('label', optionGroupName),\n                label: optionGroup.label\n              };\n              existingOptions = [existingParent];\n              optionGroupsCache.push(existingOptions);\n              selectElement.append(existingParent.element);\n            } else {\n              existingOptions = optionGroupsCache[groupIndex];\n              existingParent = existingOptions[0];  // either SELECT (no group) or OPTGROUP element\n\n              // update the OPTGROUP label if not the same.\n              if (existingParent.label != optionGroupName) {\n                existingParent.element.attr('label', existingParent.label = optionGroupName);\n              }\n            }\n\n            lastElement = null;  // start at the beginning\n            for(index = 0, length = optionGroup.length; index < length; index++) {\n              option = optionGroup[index];\n              if ((existingOption = existingOptions[index+1])) {\n                // reuse elements\n                lastElement = existingOption.element;\n                if (existingOption.label !== option.label) {\n                  lastElement.text(existingOption.label = option.label);\n                }\n                if (existingOption.id !== option.id) {\n                  lastElement.val(existingOption.id = option.id);\n                }\n                // lastElement.prop('selected') provided by jQuery has side-effects\n                if (existingOption.selected !== option.selected) {\n                  lastElement.prop('selected', (existingOption.selected = option.selected));\n                }\n              } else {\n                // grow elements\n\n                // if it's a null option\n                if (option.id === '' && nullOption) {\n                  // put back the pre-compiled element\n                  element = nullOption;\n                } else {\n                  // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but\n                  // in this version of jQuery on some browser the .text() returns a string\n                  // rather then the element.\n                  (element = optionTemplate.clone())\n                      .val(option.id)\n                      .attr('selected', option.selected)\n                      .text(option.label);\n                }\n\n                existingOptions.push(existingOption = {\n                    element: element,\n                    label: option.label,\n                    id: option.id,\n                    selected: option.selected\n                });\n                if (lastElement) {\n                  lastElement.after(element);\n                } else {\n                  existingParent.element.append(element);\n                }\n                lastElement = element;\n              }\n            }\n            // remove any excessive OPTIONs in a group\n            index++; // increment since the existingOptions[0] is parent element not OPTION\n            while(existingOptions.length > index) {\n              existingOptions.pop().element.remove();\n            }\n          }\n          // remove any excessive OPTGROUPs from select\n          while(optionGroupsCache.length > groupIndex) {\n            optionGroupsCache.pop()[0].element.remove();\n          }\n        }\n      }\n    }\n  };\n}];\n\nvar optionDirective = ['$interpolate', function($interpolate) {\n  var nullSelectCtrl = {\n    addOption: noop,\n    removeOption: noop\n  };\n\n  return {\n    restrict: 'E',\n    priority: 100,\n    compile: function(element, attr) {\n      if (isUndefined(attr.value)) {\n        var interpolateFn = $interpolate(element.text(), true);\n        if (!interpolateFn) {\n          attr.$set('value', element.text());\n        }\n      }\n\n      return function (scope, element, attr) {\n        var selectCtrlName = '$selectController',\n            parent = element.parent(),\n            selectCtrl = parent.data(selectCtrlName) ||\n              parent.parent().data(selectCtrlName); // in case we are in optgroup\n\n        if (selectCtrl && selectCtrl.databound) {\n          // For some reason Opera defaults to true and if not overridden this messes up the repeater.\n          // We don't want the view to drive the initialization of the model anyway.\n          element.prop('selected', false);\n        } else {\n          selectCtrl = nullSelectCtrl;\n        }\n\n        if (interpolateFn) {\n          scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) {\n            attr.$set('value', newVal);\n            if (newVal !== oldVal) selectCtrl.removeOption(oldVal);\n            selectCtrl.addOption(newVal);\n          });\n        } else {\n          selectCtrl.addOption(attr.value);\n        }\n\n        element.on('$destroy', function() {\n          selectCtrl.removeOption(attr.value);\n        });\n      };\n    }\n  };\n}];\n\nvar styleDirective = valueFn({\n  restrict: 'E',\n  terminal: true\n});\n\n  if (window.angular.bootstrap) {\n    //AngularJS is already loaded, so we can return here...\n    console.log('WARNING: Tried to load angular more than once.');\n    return;\n  }\n\n  //try to bind to jquery now so that one can write angular.element().read()\n  //but we will rebind on bootstrap again.\n  bindJQuery();\n\n  publishExternalAPI(angular);\n\n  jqLite(document).ready(function() {\n    angularInit(document, bootstrap);\n  });\n\n})(window, document);\n\n!angular.$$csp() && angular.element(document).find('head').prepend('<style type=\"text/css\">@charset \"UTF-8\";[ng\\\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}</style>');"
  },
  {
    "path": "maverix-theme/bower_components/angular/bower.json",
    "content": "{\n  \"name\": \"angular\",\n  \"version\": \"1.2.16\",\n  \"main\": \"./angular.js\",\n  \"dependencies\": {\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/angular-route/.bower.json",
    "content": "{\n  \"name\": \"angular-route\",\n  \"version\": \"1.2.16\",\n  \"main\": \"./angular-route.js\",\n  \"dependencies\": {\n    \"angular\": \"1.2.16\"\n  },\n  \"homepage\": \"https://github.com/angular/bower-angular-route\",\n  \"_release\": \"1.2.16\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v1.2.16\",\n    \"commit\": \"ed0e2b796077d953f518cb81cc7af981cf695a45\"\n  },\n  \"_source\": \"git://github.com/angular/bower-angular-route.git\",\n  \"_target\": \"~1.2.16\",\n  \"_originalSource\": \"angular-route\",\n  \"_direct\": true\n}"
  },
  {
    "path": "maverix-theme/bower_components/angular-route/README.md",
    "content": "# bower-angular-route\n\nThis repo is for distribution on `bower`. The source for this module is in the\n[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngRoute).\nPlease file issues and pull requests against that repo.\n\n## Install\n\nInstall with `bower`:\n\n```shell\nbower install angular-route\n```\n\nAdd a `<script>` to your `index.html`:\n\n```html\n<script src=\"/bower_components/angular-route/angular-route.js\"></script>\n```\n\nAnd add `ngRoute` as a dependency for your app:\n\n```javascript\nangular.module('myApp', ['ngRoute']);\n```\n\n## Documentation\n\nDocumentation is available on the\n[AngularJS docs site](http://docs.angularjs.org/api/ngRoute).\n\n## License\n\nThe MIT License\n\nCopyright (c) 2010-2012 Google, Inc. http://angularjs.org\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": "maverix-theme/bower_components/angular-route/angular-route.js",
    "content": "/**\n * @license AngularJS v1.2.16\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\n/**\n * @ngdoc module\n * @name ngRoute\n * @description\n *\n * # ngRoute\n *\n * The `ngRoute` module provides routing and deeplinking services and directives for angular apps.\n *\n * ## Example\n * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.\n *\n *\n * <div doc-module-components=\"ngRoute\"></div>\n */\n /* global -ngRouteModule */\nvar ngRouteModule = angular.module('ngRoute', ['ng']).\n                        provider('$route', $RouteProvider);\n\n/**\n * @ngdoc provider\n * @name $routeProvider\n * @function\n *\n * @description\n *\n * Used for configuring routes.\n *\n * ## Example\n * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.\n *\n * ## Dependencies\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n */\nfunction $RouteProvider(){\n  function inherit(parent, extra) {\n    return angular.extend(new (angular.extend(function() {}, {prototype:parent}))(), extra);\n  }\n\n  var routes = {};\n\n  /**\n   * @ngdoc method\n   * @name $routeProvider#when\n   *\n   * @param {string} path Route path (matched against `$location.path`). If `$location.path`\n   *    contains redundant trailing slash or is missing one, the route will still match and the\n   *    `$location.path` will be updated to add or drop the trailing slash to exactly match the\n   *    route definition.\n   *\n   *    * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up\n   *        to the next slash are matched and stored in `$routeParams` under the given `name`\n   *        when the route matches.\n   *    * `path` can contain named groups starting with a colon and ending with a star:\n   *        e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name`\n   *        when the route matches.\n   *    * `path` can contain optional named groups with a question mark: e.g.`:name?`.\n   *\n   *    For example, routes like `/color/:color/largecode/:largecode*\\/edit` will match\n   *    `/color/brown/largecode/code/with/slashes/edit` and extract:\n   *\n   *    * `color: brown`\n   *    * `largecode: code/with/slashes`.\n   *\n   *\n   * @param {Object} route Mapping information to be assigned to `$route.current` on route\n   *    match.\n   *\n   *    Object properties:\n   *\n   *    - `controller` – `{(string|function()=}` – Controller fn that should be associated with\n   *      newly created scope or the name of a {@link angular.Module#controller registered\n   *      controller} if passed as a string.\n   *    - `controllerAs` – `{string=}` – A controller alias name. If present the controller will be\n   *      published to scope under the `controllerAs` name.\n   *    - `template` – `{string=|function()=}` – html template as a string or a function that\n   *      returns an html template as a string which should be used by {@link\n   *      ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives.\n   *      This property takes precedence over `templateUrl`.\n   *\n   *      If `template` is a function, it will be called with the following parameters:\n   *\n   *      - `{Array.<Object>}` - route parameters extracted from the current\n   *        `$location.path()` by applying the current route\n   *\n   *    - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html\n   *      template that should be used by {@link ngRoute.directive:ngView ngView}.\n   *\n   *      If `templateUrl` is a function, it will be called with the following parameters:\n   *\n   *      - `{Array.<Object>}` - route parameters extracted from the current\n   *        `$location.path()` by applying the current route\n   *\n   *    - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should\n   *      be injected into the controller. If any of these dependencies are promises, the router\n   *      will wait for them all to be resolved or one to be rejected before the controller is\n   *      instantiated.\n   *      If all the promises are resolved successfully, the values of the resolved promises are\n   *      injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is\n   *      fired. If any of the promises are rejected the\n   *      {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired. The map object\n   *      is:\n   *\n   *      - `key` – `{string}`: a name of a dependency to be injected into the controller.\n   *      - `factory` - `{string|function}`: If `string` then it is an alias for a service.\n   *        Otherwise if function, then it is {@link auto.$injector#invoke injected}\n   *        and the return value is treated as the dependency. If the result is a promise, it is\n   *        resolved before its value is injected into the controller. Be aware that\n   *        `ngRoute.$routeParams` will still refer to the previous route within these resolve\n   *        functions.  Use `$route.current.params` to access the new route parameters, instead.\n   *\n   *    - `redirectTo` – {(string|function())=} – value to update\n   *      {@link ng.$location $location} path with and trigger route redirection.\n   *\n   *      If `redirectTo` is a function, it will be called with the following parameters:\n   *\n   *      - `{Object.<string>}` - route parameters extracted from the current\n   *        `$location.path()` by applying the current route templateUrl.\n   *      - `{string}` - current `$location.path()`\n   *      - `{Object}` - current `$location.search()`\n   *\n   *      The custom `redirectTo` function is expected to return a string which will be used\n   *      to update `$location.path()` and `$location.search()`.\n   *\n   *    - `[reloadOnSearch=true]` - {boolean=} - reload route when only `$location.search()`\n   *      or `$location.hash()` changes.\n   *\n   *      If the option is set to `false` and url in the browser changes, then\n   *      `$routeUpdate` event is broadcasted on the root scope.\n   *\n   *    - `[caseInsensitiveMatch=false]` - {boolean=} - match routes without being case sensitive\n   *\n   *      If the option is set to `true`, then the particular route can be matched without being\n   *      case sensitive\n   *\n   * @returns {Object} self\n   *\n   * @description\n   * Adds a new route definition to the `$route` service.\n   */\n  this.when = function(path, route) {\n    routes[path] = angular.extend(\n      {reloadOnSearch: true},\n      route,\n      path && pathRegExp(path, route)\n    );\n\n    // create redirection for trailing slashes\n    if (path) {\n      var redirectPath = (path[path.length-1] == '/')\n            ? path.substr(0, path.length-1)\n            : path +'/';\n\n      routes[redirectPath] = angular.extend(\n        {redirectTo: path},\n        pathRegExp(redirectPath, route)\n      );\n    }\n\n    return this;\n  };\n\n   /**\n    * @param path {string} path\n    * @param opts {Object} options\n    * @return {?Object}\n    *\n    * @description\n    * Normalizes the given path, returning a regular expression\n    * and the original path.\n    *\n    * Inspired by pathRexp in visionmedia/express/lib/utils.js.\n    */\n  function pathRegExp(path, opts) {\n    var insensitive = opts.caseInsensitiveMatch,\n        ret = {\n          originalPath: path,\n          regexp: path\n        },\n        keys = ret.keys = [];\n\n    path = path\n      .replace(/([().])/g, '\\\\$1')\n      .replace(/(\\/)?:(\\w+)([\\?\\*])?/g, function(_, slash, key, option){\n        var optional = option === '?' ? option : null;\n        var star = option === '*' ? option : null;\n        keys.push({ name: key, optional: !!optional });\n        slash = slash || '';\n        return ''\n          + (optional ? '' : slash)\n          + '(?:'\n          + (optional ? slash : '')\n          + (star && '(.+?)' || '([^/]+)')\n          + (optional || '')\n          + ')'\n          + (optional || '');\n      })\n      .replace(/([\\/$\\*])/g, '\\\\$1');\n\n    ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : '');\n    return ret;\n  }\n\n  /**\n   * @ngdoc method\n   * @name $routeProvider#otherwise\n   *\n   * @description\n   * Sets route definition that will be used on route change when no other route definition\n   * is matched.\n   *\n   * @param {Object} params Mapping information to be assigned to `$route.current`.\n   * @returns {Object} self\n   */\n  this.otherwise = function(params) {\n    this.when(null, params);\n    return this;\n  };\n\n\n  this.$get = ['$rootScope',\n               '$location',\n               '$routeParams',\n               '$q',\n               '$injector',\n               '$http',\n               '$templateCache',\n               '$sce',\n      function($rootScope, $location, $routeParams, $q, $injector, $http, $templateCache, $sce) {\n\n    /**\n     * @ngdoc service\n     * @name $route\n     * @requires $location\n     * @requires $routeParams\n     *\n     * @property {Object} current Reference to the current route definition.\n     * The route definition contains:\n     *\n     *   - `controller`: The controller constructor as define in route definition.\n     *   - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for\n     *     controller instantiation. The `locals` contain\n     *     the resolved values of the `resolve` map. Additionally the `locals` also contain:\n     *\n     *     - `$scope` - The current route scope.\n     *     - `$template` - The current route template HTML.\n     *\n     * @property {Object} routes Object with all route configuration Objects as its properties.\n     *\n     * @description\n     * `$route` is used for deep-linking URLs to controllers and views (HTML partials).\n     * It watches `$location.url()` and tries to map the path to an existing route definition.\n     *\n     * Requires the {@link ngRoute `ngRoute`} module to be installed.\n     *\n     * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.\n     *\n     * The `$route` service is typically used in conjunction with the\n     * {@link ngRoute.directive:ngView `ngView`} directive and the\n     * {@link ngRoute.$routeParams `$routeParams`} service.\n     *\n     * @example\n     * This example shows how changing the URL hash causes the `$route` to match a route against the\n     * URL, and the `ngView` pulls in the partial.\n     *\n     * Note that this example is using {@link ng.directive:script inlined templates}\n     * to get it working on jsfiddle as well.\n     *\n     * <example name=\"$route-service\" module=\"ngRouteExample\"\n     *          deps=\"angular-route.js\" fixBase=\"true\">\n     *   <file name=\"index.html\">\n     *     <div ng-controller=\"MainController\">\n     *       Choose:\n     *       <a href=\"Book/Moby\">Moby</a> |\n     *       <a href=\"Book/Moby/ch/1\">Moby: Ch1</a> |\n     *       <a href=\"Book/Gatsby\">Gatsby</a> |\n     *       <a href=\"Book/Gatsby/ch/4?key=value\">Gatsby: Ch4</a> |\n     *       <a href=\"Book/Scarlet\">Scarlet Letter</a><br/>\n     *\n     *       <div ng-view></div>\n     *\n     *       <hr />\n     *\n     *       <pre>$location.path() = {{$location.path()}}</pre>\n     *       <pre>$route.current.templateUrl = {{$route.current.templateUrl}}</pre>\n     *       <pre>$route.current.params = {{$route.current.params}}</pre>\n     *       <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre>\n     *       <pre>$routeParams = {{$routeParams}}</pre>\n     *     </div>\n     *   </file>\n     *\n     *   <file name=\"book.html\">\n     *     controller: {{name}}<br />\n     *     Book Id: {{params.bookId}}<br />\n     *   </file>\n     *\n     *   <file name=\"chapter.html\">\n     *     controller: {{name}}<br />\n     *     Book Id: {{params.bookId}}<br />\n     *     Chapter Id: {{params.chapterId}}\n     *   </file>\n     *\n     *   <file name=\"script.js\">\n     *     angular.module('ngRouteExample', ['ngRoute'])\n     *\n     *      .controller('MainController', function($scope, $route, $routeParams, $location) {\n     *          $scope.$route = $route;\n     *          $scope.$location = $location;\n     *          $scope.$routeParams = $routeParams;\n     *      })\n     *\n     *      .controller('BookController', function($scope, $routeParams) {\n     *          $scope.name = \"BookController\";\n     *          $scope.params = $routeParams;\n     *      })\n     *\n     *      .controller('ChapterController', function($scope, $routeParams) {\n     *          $scope.name = \"ChapterController\";\n     *          $scope.params = $routeParams;\n     *      })\n     *\n     *     .config(function($routeProvider, $locationProvider) {\n     *       $routeProvider\n     *        .when('/Book/:bookId', {\n     *         templateUrl: 'book.html',\n     *         controller: 'BookController',\n     *         resolve: {\n     *           // I will cause a 1 second delay\n     *           delay: function($q, $timeout) {\n     *             var delay = $q.defer();\n     *             $timeout(delay.resolve, 1000);\n     *             return delay.promise;\n     *           }\n     *         }\n     *       })\n     *       .when('/Book/:bookId/ch/:chapterId', {\n     *         templateUrl: 'chapter.html',\n     *         controller: 'ChapterController'\n     *       });\n     *\n     *       // configure html5 to get links working on jsfiddle\n     *       $locationProvider.html5Mode(true);\n     *     });\n     *\n     *   </file>\n     *\n     *   <file name=\"protractor.js\" type=\"protractor\">\n     *     it('should load and compile correct template', function() {\n     *       element(by.linkText('Moby: Ch1')).click();\n     *       var content = element(by.css('[ng-view]')).getText();\n     *       expect(content).toMatch(/controller\\: ChapterController/);\n     *       expect(content).toMatch(/Book Id\\: Moby/);\n     *       expect(content).toMatch(/Chapter Id\\: 1/);\n     *\n     *       element(by.partialLinkText('Scarlet')).click();\n     *\n     *       content = element(by.css('[ng-view]')).getText();\n     *       expect(content).toMatch(/controller\\: BookController/);\n     *       expect(content).toMatch(/Book Id\\: Scarlet/);\n     *     });\n     *   </file>\n     * </example>\n     */\n\n    /**\n     * @ngdoc event\n     * @name $route#$routeChangeStart\n     * @eventType broadcast on root scope\n     * @description\n     * Broadcasted before a route change. At this  point the route services starts\n     * resolving all of the dependencies needed for the route change to occur.\n     * Typically this involves fetching the view template as well as any dependencies\n     * defined in `resolve` route property. Once  all of the dependencies are resolved\n     * `$routeChangeSuccess` is fired.\n     *\n     * @param {Object} angularEvent Synthetic event object.\n     * @param {Route} next Future route information.\n     * @param {Route} current Current route information.\n     */\n\n    /**\n     * @ngdoc event\n     * @name $route#$routeChangeSuccess\n     * @eventType broadcast on root scope\n     * @description\n     * Broadcasted after a route dependencies are resolved.\n     * {@link ngRoute.directive:ngView ngView} listens for the directive\n     * to instantiate the controller and render the view.\n     *\n     * @param {Object} angularEvent Synthetic event object.\n     * @param {Route} current Current route information.\n     * @param {Route|Undefined} previous Previous route information, or undefined if current is\n     * first route entered.\n     */\n\n    /**\n     * @ngdoc event\n     * @name $route#$routeChangeError\n     * @eventType broadcast on root scope\n     * @description\n     * Broadcasted if any of the resolve promises are rejected.\n     *\n     * @param {Object} angularEvent Synthetic event object\n     * @param {Route} current Current route information.\n     * @param {Route} previous Previous route information.\n     * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise.\n     */\n\n    /**\n     * @ngdoc event\n     * @name $route#$routeUpdate\n     * @eventType broadcast on root scope\n     * @description\n     *\n     * The `reloadOnSearch` property has been set to false, and we are reusing the same\n     * instance of the Controller.\n     */\n\n    var forceReload = false,\n        $route = {\n          routes: routes,\n\n          /**\n           * @ngdoc method\n           * @name $route#reload\n           *\n           * @description\n           * Causes `$route` service to reload the current route even if\n           * {@link ng.$location $location} hasn't changed.\n           *\n           * As a result of that, {@link ngRoute.directive:ngView ngView}\n           * creates new scope, reinstantiates the controller.\n           */\n          reload: function() {\n            forceReload = true;\n            $rootScope.$evalAsync(updateRoute);\n          }\n        };\n\n    $rootScope.$on('$locationChangeSuccess', updateRoute);\n\n    return $route;\n\n    /////////////////////////////////////////////////////\n\n    /**\n     * @param on {string} current url\n     * @param route {Object} route regexp to match the url against\n     * @return {?Object}\n     *\n     * @description\n     * Check if the route matches the current url.\n     *\n     * Inspired by match in\n     * visionmedia/express/lib/router/router.js.\n     */\n    function switchRouteMatcher(on, route) {\n      var keys = route.keys,\n          params = {};\n\n      if (!route.regexp) return null;\n\n      var m = route.regexp.exec(on);\n      if (!m) return null;\n\n      for (var i = 1, len = m.length; i < len; ++i) {\n        var key = keys[i - 1];\n\n        var val = 'string' == typeof m[i]\n              ? decodeURIComponent(m[i])\n              : m[i];\n\n        if (key && val) {\n          params[key.name] = val;\n        }\n      }\n      return params;\n    }\n\n    function updateRoute() {\n      var next = parseRoute(),\n          last = $route.current;\n\n      if (next && last && next.$$route === last.$$route\n          && angular.equals(next.pathParams, last.pathParams)\n          && !next.reloadOnSearch && !forceReload) {\n        last.params = next.params;\n        angular.copy(last.params, $routeParams);\n        $rootScope.$broadcast('$routeUpdate', last);\n      } else if (next || last) {\n        forceReload = false;\n        $rootScope.$broadcast('$routeChangeStart', next, last);\n        $route.current = next;\n        if (next) {\n          if (next.redirectTo) {\n            if (angular.isString(next.redirectTo)) {\n              $location.path(interpolate(next.redirectTo, next.params)).search(next.params)\n                       .replace();\n            } else {\n              $location.url(next.redirectTo(next.pathParams, $location.path(), $location.search()))\n                       .replace();\n            }\n          }\n        }\n\n        $q.when(next).\n          then(function() {\n            if (next) {\n              var locals = angular.extend({}, next.resolve),\n                  template, templateUrl;\n\n              angular.forEach(locals, function(value, key) {\n                locals[key] = angular.isString(value) ?\n                    $injector.get(value) : $injector.invoke(value);\n              });\n\n              if (angular.isDefined(template = next.template)) {\n                if (angular.isFunction(template)) {\n                  template = template(next.params);\n                }\n              } else if (angular.isDefined(templateUrl = next.templateUrl)) {\n                if (angular.isFunction(templateUrl)) {\n                  templateUrl = templateUrl(next.params);\n                }\n                templateUrl = $sce.getTrustedResourceUrl(templateUrl);\n                if (angular.isDefined(templateUrl)) {\n                  next.loadedTemplateUrl = templateUrl;\n                  template = $http.get(templateUrl, {cache: $templateCache}).\n                      then(function(response) { return response.data; });\n                }\n              }\n              if (angular.isDefined(template)) {\n                locals['$template'] = template;\n              }\n              return $q.all(locals);\n            }\n          }).\n          // after route change\n          then(function(locals) {\n            if (next == $route.current) {\n              if (next) {\n                next.locals = locals;\n                angular.copy(next.params, $routeParams);\n              }\n              $rootScope.$broadcast('$routeChangeSuccess', next, last);\n            }\n          }, function(error) {\n            if (next == $route.current) {\n              $rootScope.$broadcast('$routeChangeError', next, last, error);\n            }\n          });\n      }\n    }\n\n\n    /**\n     * @returns {Object} the current active route, by matching it against the URL\n     */\n    function parseRoute() {\n      // Match a route\n      var params, match;\n      angular.forEach(routes, function(route, path) {\n        if (!match && (params = switchRouteMatcher($location.path(), route))) {\n          match = inherit(route, {\n            params: angular.extend({}, $location.search(), params),\n            pathParams: params});\n          match.$$route = route;\n        }\n      });\n      // No route matched; fallback to \"otherwise\" route\n      return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}});\n    }\n\n    /**\n     * @returns {string} interpolation of the redirect path with the parameters\n     */\n    function interpolate(string, params) {\n      var result = [];\n      angular.forEach((string||'').split(':'), function(segment, i) {\n        if (i === 0) {\n          result.push(segment);\n        } else {\n          var segmentMatch = segment.match(/(\\w+)(.*)/);\n          var key = segmentMatch[1];\n          result.push(params[key]);\n          result.push(segmentMatch[2] || '');\n          delete params[key];\n        }\n      });\n      return result.join('');\n    }\n  }];\n}\n\nngRouteModule.provider('$routeParams', $RouteParamsProvider);\n\n\n/**\n * @ngdoc service\n * @name $routeParams\n * @requires $route\n *\n * @description\n * The `$routeParams` service allows you to retrieve the current set of route parameters.\n *\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n *\n * The route parameters are a combination of {@link ng.$location `$location`}'s\n * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.\n * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.\n *\n * In case of parameter name collision, `path` params take precedence over `search` params.\n *\n * The service guarantees that the identity of the `$routeParams` object will remain unchanged\n * (but its properties will likely change) even when a route change occurs.\n *\n * Note that the `$routeParams` are only updated *after* a route change completes successfully.\n * This means that you cannot rely on `$routeParams` being correct in route resolve functions.\n * Instead you can use `$route.current.params` to access the new route's parameters.\n *\n * @example\n * ```js\n *  // Given:\n *  // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby\n *  // Route: /Chapter/:chapterId/Section/:sectionId\n *  //\n *  // Then\n *  $routeParams ==> {chapterId:1, sectionId:2, search:'moby'}\n * ```\n */\nfunction $RouteParamsProvider() {\n  this.$get = function() { return {}; };\n}\n\nngRouteModule.directive('ngView', ngViewFactory);\nngRouteModule.directive('ngView', ngViewFillContentFactory);\n\n\n/**\n * @ngdoc directive\n * @name ngView\n * @restrict ECA\n *\n * @description\n * # Overview\n * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by\n * including the rendered template of the current route into the main layout (`index.html`) file.\n * Every time the current route changes, the included view changes with it according to the\n * configuration of the `$route` service.\n *\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n *\n * @animations\n * enter - animation is used to bring new content into the browser.\n * leave - animation is used to animate existing content away.\n *\n * The enter and leave animation occur concurrently.\n *\n * @scope\n * @priority 400\n * @param {string=} onload Expression to evaluate whenever the view updates.\n *\n * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll\n *                  $anchorScroll} to scroll the viewport after the view is updated.\n *\n *                  - If the attribute is not set, disable scrolling.\n *                  - If the attribute is set without value, enable scrolling.\n *                  - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated\n *                    as an expression yields a truthy value.\n * @example\n    <example name=\"ngView-directive\" module=\"ngViewExample\"\n             deps=\"angular-route.js;angular-animate.js\"\n             animations=\"true\" fixBase=\"true\">\n      <file name=\"index.html\">\n        <div ng-controller=\"MainCtrl as main\">\n          Choose:\n          <a href=\"Book/Moby\">Moby</a> |\n          <a href=\"Book/Moby/ch/1\">Moby: Ch1</a> |\n          <a href=\"Book/Gatsby\">Gatsby</a> |\n          <a href=\"Book/Gatsby/ch/4?key=value\">Gatsby: Ch4</a> |\n          <a href=\"Book/Scarlet\">Scarlet Letter</a><br/>\n\n          <div class=\"view-animate-container\">\n            <div ng-view class=\"view-animate\"></div>\n          </div>\n          <hr />\n\n          <pre>$location.path() = {{main.$location.path()}}</pre>\n          <pre>$route.current.templateUrl = {{main.$route.current.templateUrl}}</pre>\n          <pre>$route.current.params = {{main.$route.current.params}}</pre>\n          <pre>$route.current.scope.name = {{main.$route.current.scope.name}}</pre>\n          <pre>$routeParams = {{main.$routeParams}}</pre>\n        </div>\n      </file>\n\n      <file name=\"book.html\">\n        <div>\n          controller: {{book.name}}<br />\n          Book Id: {{book.params.bookId}}<br />\n        </div>\n      </file>\n\n      <file name=\"chapter.html\">\n        <div>\n          controller: {{chapter.name}}<br />\n          Book Id: {{chapter.params.bookId}}<br />\n          Chapter Id: {{chapter.params.chapterId}}\n        </div>\n      </file>\n\n      <file name=\"animations.css\">\n        .view-animate-container {\n          position:relative;\n          height:100px!important;\n          position:relative;\n          background:white;\n          border:1px solid black;\n          height:40px;\n          overflow:hidden;\n        }\n\n        .view-animate {\n          padding:10px;\n        }\n\n        .view-animate.ng-enter, .view-animate.ng-leave {\n          -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;\n          transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;\n\n          display:block;\n          width:100%;\n          border-left:1px solid black;\n\n          position:absolute;\n          top:0;\n          left:0;\n          right:0;\n          bottom:0;\n          padding:10px;\n        }\n\n        .view-animate.ng-enter {\n          left:100%;\n        }\n        .view-animate.ng-enter.ng-enter-active {\n          left:0;\n        }\n        .view-animate.ng-leave.ng-leave-active {\n          left:-100%;\n        }\n      </file>\n\n      <file name=\"script.js\">\n        angular.module('ngViewExample', ['ngRoute', 'ngAnimate'])\n          .config(['$routeProvider', '$locationProvider',\n            function($routeProvider, $locationProvider) {\n              $routeProvider\n                .when('/Book/:bookId', {\n                  templateUrl: 'book.html',\n                  controller: 'BookCtrl',\n                  controllerAs: 'book'\n                })\n                .when('/Book/:bookId/ch/:chapterId', {\n                  templateUrl: 'chapter.html',\n                  controller: 'ChapterCtrl',\n                  controllerAs: 'chapter'\n                });\n\n              // configure html5 to get links working on jsfiddle\n              $locationProvider.html5Mode(true);\n          }])\n          .controller('MainCtrl', ['$route', '$routeParams', '$location',\n            function($route, $routeParams, $location) {\n              this.$route = $route;\n              this.$location = $location;\n              this.$routeParams = $routeParams;\n          }])\n          .controller('BookCtrl', ['$routeParams', function($routeParams) {\n            this.name = \"BookCtrl\";\n            this.params = $routeParams;\n          }])\n          .controller('ChapterCtrl', ['$routeParams', function($routeParams) {\n            this.name = \"ChapterCtrl\";\n            this.params = $routeParams;\n          }]);\n\n      </file>\n\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should load and compile correct template', function() {\n          element(by.linkText('Moby: Ch1')).click();\n          var content = element(by.css('[ng-view]')).getText();\n          expect(content).toMatch(/controller\\: ChapterCtrl/);\n          expect(content).toMatch(/Book Id\\: Moby/);\n          expect(content).toMatch(/Chapter Id\\: 1/);\n\n          element(by.partialLinkText('Scarlet')).click();\n\n          content = element(by.css('[ng-view]')).getText();\n          expect(content).toMatch(/controller\\: BookCtrl/);\n          expect(content).toMatch(/Book Id\\: Scarlet/);\n        });\n      </file>\n    </example>\n */\n\n\n/**\n * @ngdoc event\n * @name ngView#$viewContentLoaded\n * @eventType emit on the current ngView scope\n * @description\n * Emitted every time the ngView content is reloaded.\n */\nngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];\nfunction ngViewFactory(   $route,   $anchorScroll,   $animate) {\n  return {\n    restrict: 'ECA',\n    terminal: true,\n    priority: 400,\n    transclude: 'element',\n    link: function(scope, $element, attr, ctrl, $transclude) {\n        var currentScope,\n            currentElement,\n            previousElement,\n            autoScrollExp = attr.autoscroll,\n            onloadExp = attr.onload || '';\n\n        scope.$on('$routeChangeSuccess', update);\n        update();\n\n        function cleanupLastView() {\n          if(previousElement) {\n            previousElement.remove();\n            previousElement = null;\n          }\n          if(currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n          if(currentElement) {\n            $animate.leave(currentElement, function() {\n              previousElement = null;\n            });\n            previousElement = currentElement;\n            currentElement = null;\n          }\n        }\n\n        function update() {\n          var locals = $route.current && $route.current.locals,\n              template = locals && locals.$template;\n\n          if (angular.isDefined(template)) {\n            var newScope = scope.$new();\n            var current = $route.current;\n\n            // Note: This will also link all children of ng-view that were contained in the original\n            // html. If that content contains controllers, ... they could pollute/change the scope.\n            // However, using ng-view on an element with additional content does not make sense...\n            // Note: We can't remove them in the cloneAttchFn of $transclude as that\n            // function is called before linking the content, which would apply child\n            // directives to non existing elements.\n            var clone = $transclude(newScope, function(clone) {\n              $animate.enter(clone, null, currentElement || $element, function onNgViewEnter () {\n                if (angular.isDefined(autoScrollExp)\n                  && (!autoScrollExp || scope.$eval(autoScrollExp))) {\n                  $anchorScroll();\n                }\n              });\n              cleanupLastView();\n            });\n\n            currentElement = clone;\n            currentScope = current.scope = newScope;\n            currentScope.$emit('$viewContentLoaded');\n            currentScope.$eval(onloadExp);\n          } else {\n            cleanupLastView();\n          }\n        }\n    }\n  };\n}\n\n// This directive is called during the $transclude call of the first `ngView` directive.\n// It will replace and compile the content of the element with the loaded template.\n// We need this directive so that the element content is already filled when\n// the link function of another directive on the same element as ngView\n// is called.\nngViewFillContentFactory.$inject = ['$compile', '$controller', '$route'];\nfunction ngViewFillContentFactory($compile, $controller, $route) {\n  return {\n    restrict: 'ECA',\n    priority: -400,\n    link: function(scope, $element) {\n      var current = $route.current,\n          locals = current.locals;\n\n      $element.html(locals.$template);\n\n      var link = $compile($element.contents());\n\n      if (current.controller) {\n        locals.$scope = scope;\n        var controller = $controller(current.controller, locals);\n        if (current.controllerAs) {\n          scope[current.controllerAs] = controller;\n        }\n        $element.data('$ngControllerController', controller);\n        $element.children().data('$ngControllerController', controller);\n      }\n\n      link(scope);\n    }\n  };\n}\n\n\n})(window, window.angular);\n"
  },
  {
    "path": "maverix-theme/bower_components/angular-route/bower.json",
    "content": "{\n  \"name\": \"angular-route\",\n  \"version\": \"1.2.16\",\n  \"main\": \"./angular-route.js\",\n  \"dependencies\": {\n    \"angular\": \"1.2.16\"\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/.bower.json",
    "content": "{\n  \"name\": \"bootstrap\",\n  \"version\": \"3.1.1\",\n  \"main\": [\n    \"./dist/css/bootstrap.css\",\n    \"./dist/js/bootstrap.js\",\n    \"./dist/fonts/glyphicons-halflings-regular.eot\",\n    \"./dist/fonts/glyphicons-halflings-regular.svg\",\n    \"./dist/fonts/glyphicons-halflings-regular.ttf\",\n    \"./dist/fonts/glyphicons-halflings-regular.woff\"\n  ],\n  \"ignore\": [\n    \"**/.*\",\n    \"_config.yml\",\n    \"CNAME\",\n    \"composer.json\",\n    \"CONTRIBUTING.md\",\n    \"docs\",\n    \"js/tests\"\n  ],\n  \"dependencies\": {\n    \"jquery\": \">= 1.9.0\"\n  },\n  \"homepage\": \"https://github.com/twbs/bootstrap\",\n  \"_release\": \"3.1.1\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v3.1.1\",\n    \"commit\": \"a365d8689c3f3cee7f1acf86b61270ecca8e106d\"\n  },\n  \"_source\": \"git://github.com/twbs/bootstrap.git\",\n  \"_target\": \"~3.1.1\",\n  \"_originalSource\": \"bootstrap\",\n  \"_direct\": true\n}"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/Gruntfile.js",
    "content": "/*!\n * Bootstrap's Gruntfile\n * http://getbootstrap.com\n * Copyright 2013-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nmodule.exports = function (grunt) {\n  'use strict';\n\n  // Force use of Unix newlines\n  grunt.util.linefeed = '\\n';\n\n  RegExp.quote = function (string) {\n    return string.replace(/[-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n  };\n\n  var fs = require('fs');\n  var path = require('path');\n  var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js');\n  var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js');\n  var generateRawFilesJs = require('./grunt/bs-raw-files-generator.js');\n  var updateShrinkwrap = require('./grunt/shrinkwrap.js');\n\n  // Project configuration.\n  grunt.initConfig({\n\n    // Metadata.\n    pkg: grunt.file.readJSON('package.json'),\n    banner: '/*!\\n' +\n            ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\\n' +\n            ' * Copyright 2011-<%= grunt.template.today(\"yyyy\") %> <%= pkg.author %>\\n' +\n            ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\\n' +\n            ' */\\n',\n    jqueryCheck: 'if (typeof jQuery === \\'undefined\\') { throw new Error(\\'Bootstrap\\\\\\'s JavaScript requires jQuery\\') }\\n\\n',\n\n    // Task configuration.\n    clean: {\n      dist: ['dist', 'docs/dist']\n    },\n\n    jshint: {\n      options: {\n        jshintrc: 'js/.jshintrc'\n      },\n      grunt: {\n        options: {\n          jshintrc: 'grunt/.jshintrc'\n        },\n        src: ['Gruntfile.js', 'grunt/*.js']\n      },\n      src: {\n        src: 'js/*.js'\n      },\n      test: {\n        src: 'js/tests/unit/*.js'\n      },\n      assets: {\n        src: ['docs/assets/js/application.js', 'docs/assets/js/customizer.js']\n      }\n    },\n\n    jscs: {\n      options: {\n        config: 'js/.jscs.json',\n      },\n      grunt: {\n        src: ['Gruntfile.js', 'grunt/*.js']\n      },\n      src: {\n        src: 'js/*.js'\n      },\n      test: {\n        src: 'js/tests/unit/*.js'\n      },\n      assets: {\n        src: ['docs/assets/js/application.js', 'docs/assets/js/customizer.js']\n      }\n    },\n\n    csslint: {\n      options: {\n        csslintrc: 'less/.csslintrc'\n      },\n      src: [\n        'dist/css/bootstrap.css',\n        'dist/css/bootstrap-theme.css',\n        'docs/assets/css/docs.css',\n        'docs/examples/**/*.css'\n      ]\n    },\n\n    concat: {\n      options: {\n        banner: '<%= banner %>\\n<%= 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        report: 'min'\n      },\n      bootstrap: {\n        options: {\n          banner: '<%= banner %>'\n        },\n        src: '<%= concat.bootstrap.dest %>',\n        dest: 'dist/js/<%= pkg.name %>.min.js'\n      },\n      customize: {\n        options: {\n          preserveComments: 'some'\n        },\n        src: [\n          'docs/assets/js/vendor/less.min.js',\n          'docs/assets/js/vendor/jszip.min.js',\n          'docs/assets/js/vendor/uglify.min.js',\n          'docs/assets/js/vendor/blob.js',\n          'docs/assets/js/vendor/filesaver.js',\n          'docs/assets/js/raw-files.min.js',\n          'docs/assets/js/customizer.js'\n        ],\n        dest: 'docs/assets/js/customize.min.js'\n      },\n      docsJs: {\n        options: {\n          preserveComments: 'some'\n        },\n        src: [\n          'docs/assets/js/vendor/holder.js',\n          'docs/assets/js/application.js'\n        ],\n        dest: 'docs/assets/js/docs.min.js'\n      }\n    },\n\n    less: {\n      compileCore: {\n        options: {\n          strictMath: true,\n          sourceMap: true,\n          outputSourceFiles: true,\n          sourceMapURL: '<%= pkg.name %>.css.map',\n          sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'\n        },\n        files: {\n          'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less'\n        }\n      },\n      compileTheme: {\n        options: {\n          strictMath: true,\n          sourceMap: true,\n          outputSourceFiles: true,\n          sourceMapURL: '<%= pkg.name %>-theme.css.map',\n          sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map'\n        },\n        files: {\n          'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less'\n        }\n      },\n      minify: {\n        options: {\n          cleancss: true,\n          report: 'min'\n        },\n        files: {\n          'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css',\n          'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css'\n        }\n      }\n    },\n\n    cssmin: {\n      compress: {\n        options: {\n          keepSpecialComments: '*',\n          noAdvanced: true, // turn advanced optimizations off until the issue is fixed in clean-css\n          report: 'min',\n          selectorsMergeMode: 'ie8'\n        },\n        src: [\n          'docs/assets/css/docs.css',\n          'docs/assets/css/pygments-manni.css'\n        ],\n        dest: 'docs/assets/css/docs.min.css'\n      }\n    },\n\n    usebanner: {\n      dist: {\n        options: {\n          position: 'top',\n          banner: '<%= banner %>'\n        },\n        files: {\n          src: [\n            'dist/css/<%= pkg.name %>.css',\n            'dist/css/<%= pkg.name %>.min.css',\n            'dist/css/<%= pkg.name %>-theme.css',\n            'dist/css/<%= pkg.name %>-theme.min.css'\n          ]\n        }\n      }\n    },\n\n    csscomb: {\n      options: {\n        config: 'less/.csscomb.json'\n      },\n      dist: {\n        files: {\n          'dist/css/<%= pkg.name %>.css': 'dist/css/<%= pkg.name %>.css',\n          'dist/css/<%= pkg.name %>-theme.css': 'dist/css/<%= pkg.name %>-theme.css'\n        }\n      },\n      examples: {\n        expand: true,\n        cwd: 'docs/examples/',\n        src: ['**/*.css'],\n        dest: 'docs/examples/'\n      }\n    },\n\n    copy: {\n      fonts: {\n        expand: true,\n        src: 'fonts/*',\n        dest: 'dist/'\n      },\n      docs: {\n        expand: true,\n        cwd: './dist',\n        src: [\n          '{css,js}/*.min.*',\n          'css/*.map',\n          'fonts/*'\n        ],\n        dest: 'docs/dist'\n      }\n    },\n\n    qunit: {\n      options: {\n        inject: 'js/tests/unit/phantom.js'\n      },\n      files: 'js/tests/index.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    jade: {\n      compile: {\n        options: {\n          pretty: true,\n          data: function () {\n            var filePath = path.join(__dirname, 'less/variables.less');\n            var fileContent = fs.readFileSync(filePath, {encoding: 'utf8'});\n            var parser = new BsLessdocParser(fileContent);\n            return {sections: parser.parseFile()};\n          }\n        },\n        files: {\n          'docs/_includes/customizer-variables.html': 'docs/jade/customizer-variables.jade',\n          'docs/_includes/nav-customize.html': 'docs/jade/customizer-nav.jade'\n        }\n      }\n    },\n\n    validation: {\n      options: {\n        charset: 'utf-8',\n        doctype: 'HTML5',\n        failHard: true,\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      less: {\n        files: 'less/*.less',\n        tasks: 'less'\n      }\n    },\n\n    sed: {\n      versionNumber: {\n        pattern: (function () {\n          var old = grunt.option('oldver');\n          return old ? RegExp.quote(old) : old;\n        })(),\n        replacement: grunt.option('newver'),\n        recursive: true\n      }\n    },\n\n    'saucelabs-qunit': {\n      all: {\n        options: {\n          build: process.env.TRAVIS_JOB_ID,\n          concurrency: 10,\n          urls: ['http://127.0.0.1:3000/js/tests/index.html'],\n          browsers: grunt.file.readYAML('test-infra/sauce_browsers.yml')\n        }\n      }\n    },\n\n    exec: {\n      npmUpdate: {\n        command: 'npm update'\n      },\n      npmShrinkWrap: {\n        command: 'npm shrinkwrap --dev'\n      }\n    }\n  });\n\n\n  // These plugins provide necessary tasks.\n  require('load-grunt-tasks')(grunt, {scope: 'devDependencies'});\n\n  // Docs HTML validation task\n  grunt.registerTask('validate-html', ['jekyll', 'validation']);\n\n  // Test task.\n  var testSubtasks = [];\n  // Skip core tests if running a different subset of the test suite\n  if (!process.env.TWBS_TEST || process.env.TWBS_TEST === 'core') {\n    testSubtasks = testSubtasks.concat(['dist-css', 'csslint', 'jshint', 'jscs', 'qunit', 'build-customizer-html']);\n  }\n  // Skip HTML validation if running a different subset of the test suite\n  if (!process.env.TWBS_TEST || process.env.TWBS_TEST === 'validate-html') {\n    testSubtasks.push('validate-html');\n  }\n  // Only run Sauce Labs tests if there's a Sauce access key\n  if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' &&\n      // Skip Sauce if running a different subset of the test suite\n      (!process.env.TWBS_TEST || process.env.TWBS_TEST === 'sauce-js-unit')) {\n    testSubtasks.push('connect');\n    testSubtasks.push('saucelabs-qunit');\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', ['less', 'cssmin', 'csscomb', 'usebanner']);\n\n  // Docs distribution task.\n  grunt.registerTask('dist-docs', 'copy:docs');\n\n  // Full distribution task.\n  grunt.registerTask('dist', ['clean', 'dist-css', 'copy:fonts', 'dist-js', 'dist-docs']);\n\n  // Default task.\n  grunt.registerTask('default', ['test', 'dist', 'build-glyphicons-data', 'build-customizer', 'update-shrinkwrap']);\n\n  // Version numbering task.\n  // grunt change-version-number --oldver=A.B.C --newver=X.Y.Z\n  // This can be overzealous, so its changes should always be manually reviewed!\n  grunt.registerTask('change-version-number', 'sed');\n\n  grunt.registerTask('build-glyphicons-data', generateGlyphiconsData);\n\n  // task for building customizer\n  grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);\n  grunt.registerTask('build-customizer-html', 'jade');\n  grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () {\n    var banner = grunt.template.process('<%= banner %>');\n    generateRawFilesJs(banner);\n  });\n\n  // Task for updating the npm packages used by the Travis build.\n  grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', 'exec:npmShrinkWrap', '_update-shrinkwrap']);\n  grunt.registerTask('_update-shrinkwrap', function () { updateShrinkwrap.call(this, grunt); });\n};\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2011-2014 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": "maverix-theme/bower_components/bootstrap/README.md",
    "content": "# [Bootstrap](http://getbootstrap.com) [![Bower version](https://badge.fury.io/bo/bootstrap.png)](http://badge.fury.io/bo/bootstrap) [![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?theme=shields.io)](https://david-dm.org/twbs/bootstrap#info=devDependencies)\n[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap)\n\nBootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat), and maintained by the [core team](https://github.com/twbs?tab=members) with the massive support and involvement of the community.\n\nTo get started, check out <http://getbootstrap.com>!\n\n## Table of contents\n\n - [Quick start](#quick-start)\n - [Bugs and feature requests](#bugs-and-feature-requests)\n - [Documentation](#documentation)\n - [Compiling CSS and JavaScript](#compiling-css-and-javascript)\n - [Contributing](#contributing)\n - [Community](#community)\n - [Versioning](#versioning)\n - [Authors](#authors)\n - [Copyright and license](#copyright-and-license)\n\n## Quick start\n\nThree quick start options are available:\n\n- [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.1.1.zip).\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 first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new).\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).\n  - **Windows users:** Read [this unofficial guide](https://github.com/juthilo/run-jekyll-on-windows/) to get Jekyll up and running without problems. We use Pygments for syntax highlighting, so make sure to read the sections on installing Python and Pygments.\n2. From the root `/bootstrap` directory, run `jekyll serve` in the command line.\n  - **Windows users:** While we use Jekyll's `encoding` setting, you might still need 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. For Ruby 2.0.0, run `chcp 65001` first. For Ruby 1.9.3, you can alternatively do `SET LANG=en_EN.UTF-8`.\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](https://github.com/twbs/bootstrap/blob/master/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 [Less](http://lesscss.org/) 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 [Less](http://lesscss.org/) 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\nMoreover, 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](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.\n\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- Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel.\n- Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](http://stackoverflow.com/questions/tagged/twitter-bootstrap-3)).\n\n\n\n\n## Versioning\n\nFor transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under the Semantic Versioning guidelines. Sometimes we screw up, but we'll adhere to these rules whenever 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** while resetting minor and patch\n- New additions without breaking backward compatibility **bumps the minor** while resetting the patch\n- Bug fixes and misc changes **bumps only 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\nCode and documentation copyright 2011-2014 Twitter, Inc. Code released under [the MIT license](LICENSE). Docs released under [Creative Commons](docs/LICENSE).\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/bower.json",
    "content": "{\n  \"name\": \"bootstrap\",\n  \"version\": \"3.1.1\",\n  \"main\": [\n    \"./dist/css/bootstrap.css\",\n    \"./dist/js/bootstrap.js\",\n    \"./dist/fonts/glyphicons-halflings-regular.eot\",\n    \"./dist/fonts/glyphicons-halflings-regular.svg\",\n    \"./dist/fonts/glyphicons-halflings-regular.ttf\",\n    \"./dist/fonts/glyphicons-halflings-regular.woff\"\n  ],\n  \"ignore\": [\n    \"**/.*\",\n    \"_config.yml\",\n    \"CNAME\",\n    \"composer.json\",\n    \"CONTRIBUTING.md\",\n    \"docs\",\n    \"js/tests\"\n  ],\n  \"dependencies\": {\n    \"jquery\": \">= 1.9.0\"\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/dist/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.1.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\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, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\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, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);\n  background-image:         linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #2d6ca2;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #2d6ca2;\n  border-color: #2b669a;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\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-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n}\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);\n  background-image:         linear-gradient(to bottom, #222 0%, #282828 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);\n  background-image:         linear-gradient(to bottom, #428bca 0%, #3071a9 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\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 #3071a9;\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);\n  background-image:         linear-gradient(to bottom, #428bca 0%, #3278b3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #3278b3;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/dist/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.1.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\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}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\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\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  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  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 62.5%;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #428bca;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\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}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\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: #999;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\ncite {\n  font-style: normal;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-muted {\n  color: #999;\n}\n.text-primary {\n  color: #428bca;\n}\na.text-primary:hover {\n  color: #3071a9;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #428bca;\n}\na.bg-primary:hover {\n  background-color: #3071a9;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\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}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #999;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\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}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\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.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: 0;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: 0;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: 0;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: 0;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: 0;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: 0;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: 0;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: 0;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  max-width: 100%;\n  background-color: transparent;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  margin-bottom: 20px;\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.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\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.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\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.table-bordered {\n  border: 1px solid #ddd;\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 #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\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.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\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.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\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.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.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\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.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.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.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@media (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\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}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\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: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\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.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"] {\n  line-height: 34px;\n}\n.form-group {\n  margin-bottom: 15px;\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}\n.radio label,\n.checkbox label {\n  display: inline;\n  font-weight: normal;\n  cursor: pointer;\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;\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.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\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.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.has-feedback .form-control-feedback {\n  position: absolute;\n  top: 25px;\n  right: 0;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\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: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\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: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\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: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.form-control-static {\n  margin-bottom: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\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    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\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    vertical-align: middle;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\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.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.form-horizontal .form-control-static {\n  padding-top: 7px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  top: 0;\n  right: 15px;\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.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus {\n  color: #333;\n  text-decoration: none;\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, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\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: #333;\n  background-color: #ebebeb;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\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: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #357ebd;\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: #fff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\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.btn-primary .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\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: #fff;\n  background-color: #47a447;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\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.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\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: #fff;\n  background-color: #39b3d7;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\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.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\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: #fff;\n  background-color: #ed9c28;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\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.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\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: #fff;\n  background-color: #d2322d;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\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.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #428bca;\n  cursor: pointer;\n  border-radius: 0;\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.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #999;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-right: 0;\n  padding-left: 0;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height .35s ease;\n          transition: height .35s ease;\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\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.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\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\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;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\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: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\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.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #428bca;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #999;\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.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #999;\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.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px solid;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\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.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\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.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\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.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\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 > .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.btn-group > .btn-group:last-child > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\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.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\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.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\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:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\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}\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}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\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.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\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 > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-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 > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #999;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #999;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #428bca;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\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.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\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 #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\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: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #428bca;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\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.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\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 #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\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: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  max-height: 340px;\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\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: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\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@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\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;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\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  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: none;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\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@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  .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\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.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, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\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    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\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    vertical-align: middle;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\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  .navbar-form.navbar-right:last-child {\n    margin-right: -15px;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n  .navbar-text.navbar-right:last-child {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\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: #555;\n  background-color: #e7e7e7;\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: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\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: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\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: #333;\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: #555;\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: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #999;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #999;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #999;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\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: #fff;\n  background-color: #080808;\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: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\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: #fff;\n  background-color: #080808;\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 .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #999;\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: #fff;\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: #fff;\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: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #999;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\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.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #999;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\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.42857143;\n  color: #428bca;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\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.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #2a6496;\n  background-color: #eee;\n  border-color: #ddd;\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: #fff;\n  cursor: default;\n  background-color: #428bca;\n  border-color: #428bca;\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: #999;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\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.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\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.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #999;\n  cursor: not-allowed;\n  background-color: #fff;\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: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n.label[href]:hover,\n.label[href]:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #999;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #808080;\n}\n.label-primary {\n  background-color: #428bca;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\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: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #999;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.container .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\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  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #428bca;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable {\n  padding-right: 35px;\n}\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\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@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\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, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px;\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.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-object {\n  display: block;\n}\n.media-heading {\n  margin: 0 0 5px;\n}\n.media > .pull-left {\n  margin-right: 10px;\n}\n.media > .pull-right {\n  margin-left: 10px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\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.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\na.list-group-item.active,\na.list-group-item.active:hover,\na.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\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}\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.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\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.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table {\n  margin-bottom: 0;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\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.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.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\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.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  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  overflow: hidden;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #428bca;\n}\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #428bca;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ebccd1;\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, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n     -moz-transition:    -moz-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n          transform: translate(0, -25%);\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.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: none;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  min-height: 16.42857143px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 20px;\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.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  visibility: visible;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\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: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\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.popover-content {\n  padding: 9px 14px;\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.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\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: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: none;\n  opacity: .9;\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.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\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.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\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.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 #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\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: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-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.clearfix:before,\n.clearfix:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\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.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\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@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\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@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\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@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\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@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\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}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/dist/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.1.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nif (typeof jQuery === 'undefined') { throw new Error('Bootstrap\\'s JavaScript requires jQuery') }\n\n/* ========================================================================\n * Bootstrap: transition.js v3.1.1\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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    return false // explicit for ie8 (  ._.)\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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.1.1\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.1.1\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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    this.isLoading = false\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($.proxy(function () {\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false\n        else $parent.find('.active').removeClass('active')\n      }\n      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')\n    }\n\n    if (changed) 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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.1.1\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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.bs.carousel', 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) {\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    if ($next.hasClass('active')) return this.sliding = false\n\n    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })\n    this.$element.trigger(e)\n    if (e.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      this.$element.one('slid.bs.carousel', 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      $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.bs.carousel') }, 0)\n        })\n        .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger('slid.bs.carousel')\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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.1.1\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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('collapse 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 && options.toggle && option == 'show') option = !option\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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.1.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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    $(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 use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown', relatedTarget)\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 desc = ' li:not(.divider):visible a'\n    var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)\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(e) {\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $parent = getParent($(this))\n      var relatedTarget = { relatedTarget: this }\n      if (!$parent.hasClass('open')) return\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n      if (e.isDefaultPrevented()) return\n      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)\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 && /#[A-Za-z]/.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('bs.dropdown')\n\n      if (!data) $this.data('bs.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], [role=listbox]', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.1.1\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\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.bs.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\n        .show()\n        .scrollTop(0)\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.bs.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 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.bs.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('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) 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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.1.1\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\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      var that = this;\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.hoverState = null\n\n      var complete = function() {\n        that.$element.trigger('shown.bs.' + that.type)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one($.support.transition.end, complete)\n          .emulateTransitionEnd(150) :\n        complete()\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    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.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      that.$element.trigger('hidden.bs.' + that.type)\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.hoverState = null\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    clearTimeout(this.timeout)\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 && option == 'destroy') return\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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.1.1\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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')[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](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 && option == 'destroy') return\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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.1.1\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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 = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\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    if (activeTarget && scrollTop <= offsets[0]) {\n      return activeTarget != (i = targets[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      .parentsUntil(this.options.target, '.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.bs.scrollspy')\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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.1.1\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.1.1\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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        =\n    this.pinnedOffset = 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.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$window.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\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 (this.affixed == 'top') position.top += scrollTop\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\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    var affixType = 'affix' + (affix ? '-' + affix : '')\n    var e         = $.Event(affixType + '.bs.affix')\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    this.affixed = affix\n    this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n    this.$element\n      .removeClass(Affix.RESET)\n      .addClass(affixType)\n      .trigger($.Event(affixType.replace('affix', 'affixed')))\n\n    if (affix == 'bottom') {\n      this.$element.offset({ top: scrollHeight - 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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js",
    "content": "/*!\n * Bootstrap Grunt task for Glyphicons data generation\n * http://getbootstrap.com\n * Copyright 2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n'use strict';\nvar fs = require('fs');\n\nmodule.exports = function generateGlyphiconsData() {\n  // Pass encoding, utf8, so `readFileSync` will return a string instead of a\n  // buffer\n  var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8');\n  var glpyhiconsLines = glyphiconsFile.split('\\n');\n\n  // Use any line that starts with \".glyphicon-\" and capture the class name\n  var iconClassName = /^\\.(glyphicon-[^\\s]+)/;\n  var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\\n' +\n                       '# See the \\'build-glyphicons-data\\' task in Gruntfile.js.\\n\\n';\n  for (var i = 0, len = glpyhiconsLines.length; i < len; i++) {\n    var match = glpyhiconsLines[i].match(iconClassName);\n\n    if (match !== null) {\n      glyphiconsData += '- ' + match[1] + '\\n';\n    }\n  }\n\n  // Create the `_data` directory if it doesn't already exist\n  if (!fs.existsSync('docs/_data')) {\n    fs.mkdirSync('docs/_data');\n  }\n\n  fs.writeFileSync('docs/_data/glyphicons.yml', glyphiconsData);\n};\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/grunt/bs-lessdoc-parser.js",
    "content": "/*!\n * Bootstrap Grunt task for parsing Less docstrings\n * http://getbootstrap.com\n * Copyright 2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n'use strict';\n\nvar markdown = require('markdown').markdown;\n\nfunction markdown2html(markdownString) {\n  // the slice removes the <p>...</p> wrapper output by Markdown processor\n  return markdown.toHTML(markdownString.trim()).slice(3, -4);\n}\n\n\n/*\nMini-language:\n  //== This is a normal heading, which starts a section. Sections group variables together.\n  //## Optional description for the heading\n\n  //=== This is a subheading.\n\n  //** Optional description for the following variable. You **can** use Markdown in descriptions to discuss `<html>` stuff.\n  @foo: #ffff;\n\n  //-- This is a heading for a section whose variables shouldn't be customizable\n\n  All other lines are ignored completely.\n*/\n\n\nvar CUSTOMIZABLE_HEADING = /^[/]{2}={2}(.*)$/;\nvar UNCUSTOMIZABLE_HEADING = /^[/]{2}-{2}(.*)$/;\nvar SUBSECTION_HEADING = /^[/]{2}={3}(.*)$/;\nvar SECTION_DOCSTRING = /^[/]{2}#{2}(.*)$/;\nvar VAR_ASSIGNMENT = /^(@[a-zA-Z0-9_-]+):[ ]*([^ ;][^;]+);[ ]*$/;\nvar VAR_DOCSTRING = /^[/]{2}[*]{2}(.*)$/;\n\nfunction Section(heading, customizable) {\n  this.heading = heading.trim();\n  this.id = this.heading.replace(/\\s+/g, '-').toLowerCase();\n  this.customizable = customizable;\n  this.docstring = null;\n  this.subsections = [];\n}\n\nSection.prototype.addSubSection = function (subsection) {\n  this.subsections.push(subsection);\n};\n\nfunction SubSection(heading) {\n  this.heading = heading.trim();\n  this.id = this.heading.replace(/\\s+/g, '-').toLowerCase();\n  this.variables = [];\n}\n\nSubSection.prototype.addVar = function (variable) {\n  this.variables.push(variable);\n};\n\nfunction VarDocstring(markdownString) {\n  this.html = markdown2html(markdownString);\n}\n\nfunction SectionDocstring(markdownString) {\n  this.html = markdown2html(markdownString);\n}\n\nfunction Variable(name, defaultValue) {\n  this.name = name;\n  this.defaultValue = defaultValue;\n  this.docstring = null;\n}\n\nfunction Tokenizer(fileContent) {\n  this._lines = fileContent.split('\\n');\n  this._next = undefined;\n}\n\nTokenizer.prototype.unshift = function (token) {\n  if (this._next !== undefined) {\n    throw new Error('Attempted to unshift twice!');\n  }\n  this._next = token;\n};\n\nTokenizer.prototype._shift = function () {\n  // returning null signals EOF\n  // returning undefined means the line was ignored\n  if (this._next !== undefined) {\n    var result = this._next;\n    this._next = undefined;\n    return result;\n  }\n  if (this._lines.length <= 0) {\n    return null;\n  }\n  var line = this._lines.shift();\n  var match = null;\n  match = SUBSECTION_HEADING.exec(line);\n  if (match !== null) {\n    return new SubSection(match[1]);\n  }\n  match = CUSTOMIZABLE_HEADING.exec(line);\n  if (match !== null) {\n    return new Section(match[1], true);\n  }\n  match = UNCUSTOMIZABLE_HEADING.exec(line);\n  if (match !== null) {\n    return new Section(match[1], false);\n  }\n  match = SECTION_DOCSTRING.exec(line);\n  if (match !== null) {\n    return new SectionDocstring(match[1]);\n  }\n  match = VAR_DOCSTRING.exec(line);\n  if (match !== null) {\n    return new VarDocstring(match[1]);\n  }\n  var commentStart = line.lastIndexOf('//');\n  var varLine = (commentStart === -1) ? line : line.slice(0, commentStart);\n  match = VAR_ASSIGNMENT.exec(varLine);\n  if (match !== null) {\n    return new Variable(match[1], match[2]);\n  }\n  return undefined;\n};\n\nTokenizer.prototype.shift = function () {\n  while (true) {\n    var result = this._shift();\n    if (result === undefined) {\n      continue;\n    }\n    return result;\n  }\n};\n\nfunction Parser(fileContent) {\n  this._tokenizer = new Tokenizer(fileContent);\n}\n\nParser.prototype.parseFile = function () {\n  var sections = [];\n  while (true) {\n    var section = this.parseSection();\n    if (section === null) {\n      if (this._tokenizer.shift() !== null) {\n        throw new Error('Unexpected unparsed section of file remains!');\n      }\n      return sections;\n    }\n    sections.push(section);\n  }\n};\n\nParser.prototype.parseSection = function () {\n  var section = this._tokenizer.shift();\n  if (section === null) {\n    return null;\n  }\n  if (!(section instanceof Section)) {\n    throw new Error('Expected section heading; got: ' + JSON.stringify(section));\n  }\n  var docstring = this._tokenizer.shift();\n  if (docstring instanceof SectionDocstring) {\n    section.docstring = docstring;\n  }\n  else {\n    this._tokenizer.unshift(docstring);\n  }\n  this.parseSubSections(section);\n\n  return section;\n};\n\nParser.prototype.parseSubSections = function (section) {\n  while (true) {\n    var subsection = this.parseSubSection();\n    if (subsection === null) {\n      if (section.subsections.length === 0) {\n        // Presume an implicit initial subsection\n        subsection = new SubSection('');\n        this.parseVars(subsection);\n      }\n      else {\n        break;\n      }\n    }\n    section.addSubSection(subsection);\n  }\n\n  if (section.subsections.length === 1 && !(section.subsections[0].heading) && section.subsections[0].variables.length === 0) {\n    // Ignore lone empty implicit subsection\n    section.subsections = [];\n  }\n};\n\nParser.prototype.parseSubSection = function () {\n  var subsection = this._tokenizer.shift();\n  if (subsection instanceof SubSection) {\n    this.parseVars(subsection);\n    return subsection;\n  }\n  this._tokenizer.unshift(subsection);\n  return null;\n};\n\nParser.prototype.parseVars = function (subsection) {\n  while (true) {\n    var variable = this.parseVar();\n    if (variable === null) {\n      return;\n    }\n    subsection.addVar(variable);\n  }\n};\n\nParser.prototype.parseVar = function () {\n  var docstring = this._tokenizer.shift();\n  if (!(docstring instanceof VarDocstring)) {\n    this._tokenizer.unshift(docstring);\n    docstring = null;\n  }\n  var variable = this._tokenizer.shift();\n  if (variable instanceof Variable) {\n    variable.docstring = docstring;\n    return variable;\n  }\n  this._tokenizer.unshift(variable);\n  return null;\n};\n\n\nmodule.exports = Parser;\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/grunt/bs-raw-files-generator.js",
    "content": "/* global btoa: true */\n/*!\n * Bootstrap Grunt task for generating raw-files.min.js for the Customizer\n * http://getbootstrap.com\n * Copyright 2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n'use strict';\nvar btoa = require('btoa');\nvar fs = require('fs');\n\nfunction 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      files[path] = (type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8'));\n    });\n  return 'var __' + type + ' = ' + JSON.stringify(files) + '\\n';\n}\n\nmodule.exports = function generateRawFilesJs(banner) {\n  if (!banner) {\n    banner = '';\n  }\n  var files = banner + getFiles('js') + getFiles('less') + getFiles('fonts');\n  fs.writeFileSync('docs/assets/js/raw-files.min.js', files);\n};\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/grunt/shrinkwrap.js",
    "content": "/*!\n * Bootstrap Grunt task for generating npm-shrinkwrap.canonical.json\n * http://getbootstrap.com\n * Copyright 2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*\nThis Grunt task updates the npm-shrinkwrap.canonical.json file that's used as the key for Bootstrap's npm packages cache.\nThis task should be run and the updated file should be committed whenever Bootstrap's dependencies change.\n*/\n'use strict';\nvar canonicallyJsonStringify = require('canonical-json');\nvar NON_CANONICAL_FILE = 'npm-shrinkwrap.json';\nvar DEST_FILE = 'test-infra/npm-shrinkwrap.canonical.json';\n\n\nfunction updateShrinkwrap(grunt) {\n  // Assumption: Non-canonical shrinkwrap already generated by prerequisite Grunt task\n  var shrinkwrapData = grunt.file.readJSON(NON_CANONICAL_FILE);\n  grunt.log.writeln('Deleting ' + NON_CANONICAL_FILE.cyan + '...');\n  grunt.file.delete(NON_CANONICAL_FILE);\n  // Output as Canonical JSON in correct location\n  grunt.file.write(DEST_FILE, canonicallyJsonStringify(shrinkwrapData));\n  grunt.log.writeln('File ' + DEST_FILE.cyan + ' updated.');\n}\n\n\nmodule.exports = updateShrinkwrap;\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/affix.js",
    "content": "/* ========================================================================\n * Bootstrap: affix.js v3.1.1\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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        =\n    this.pinnedOffset = 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.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$window.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\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 (this.affixed == 'top') position.top += scrollTop\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\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    var affixType = 'affix' + (affix ? '-' + affix : '')\n    var e         = $.Event(affixType + '.bs.affix')\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    this.affixed = affix\n    this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n    this.$element\n      .removeClass(Affix.RESET)\n      .addClass(affixType)\n      .trigger($.Event(affixType.replace('affix', 'affixed')))\n\n    if (affix == 'bottom') {\n      this.$element.offset({ top: scrollHeight - 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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/alert.js",
    "content": "/* ========================================================================\n * Bootstrap: alert.js v3.1.1\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/button.js",
    "content": "/* ========================================================================\n * Bootstrap: button.js v3.1.1\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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    this.isLoading = false\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($.proxy(function () {\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false\n        else $parent.find('.active').removeClass('active')\n      }\n      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')\n    }\n\n    if (changed) 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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/carousel.js",
    "content": "/* ========================================================================\n * Bootstrap: carousel.js v3.1.1\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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.bs.carousel', 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) {\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    if ($next.hasClass('active')) return this.sliding = false\n\n    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })\n    this.$element.trigger(e)\n    if (e.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      this.$element.one('slid.bs.carousel', 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      $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.bs.carousel') }, 0)\n        })\n        .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger('slid.bs.carousel')\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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/collapse.js",
    "content": "/* ========================================================================\n * Bootstrap: collapse.js v3.1.1\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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('collapse 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 && options.toggle && option == 'show') option = !option\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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/dropdown.js",
    "content": "/* ========================================================================\n * Bootstrap: dropdown.js v3.1.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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    $(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 use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown', relatedTarget)\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 desc = ' li:not(.divider):visible a'\n    var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)\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(e) {\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $parent = getParent($(this))\n      var relatedTarget = { relatedTarget: this }\n      if (!$parent.hasClass('open')) return\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n      if (e.isDefaultPrevented()) return\n      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)\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 && /#[A-Za-z]/.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('bs.dropdown')\n\n      if (!data) $this.data('bs.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], [role=listbox]', Dropdown.prototype.keydown)\n\n}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/modal.js",
    "content": "/* ========================================================================\n * Bootstrap: modal.js v3.1.1\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\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.bs.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\n        .show()\n        .scrollTop(0)\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.bs.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 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.bs.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('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) 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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/popover.js",
    "content": "/* ========================================================================\n * Bootstrap: popover.js v3.1.1\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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')[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](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 && option == 'destroy') return\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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/scrollspy.js",
    "content": "/* ========================================================================\n * Bootstrap: scrollspy.js v3.1.1\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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 = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\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    if (activeTarget && scrollTop <= offsets[0]) {\n      return activeTarget != (i = targets[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      .parentsUntil(this.options.target, '.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.bs.scrollspy')\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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/tab.js",
    "content": "/* ========================================================================\n * Bootstrap: tab.js v3.1.1\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/tooltip.js",
    "content": "/* ========================================================================\n * Bootstrap: tooltip.js v3.1.1\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\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      var that = this;\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.hoverState = null\n\n      var complete = function() {\n        that.$element.trigger('shown.bs.' + that.type)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one($.support.transition.end, complete)\n          .emulateTransitionEnd(150) :\n        complete()\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    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.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      that.$element.trigger('hidden.bs.' + that.type)\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.hoverState = null\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    clearTimeout(this.timeout)\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 && option == 'destroy') return\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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/js/transition.js",
    "content": "/* ========================================================================\n * Bootstrap: transition.js v3.1.1\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  '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    return false // explicit for ie8 (  ._.)\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}(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\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// 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": "maverix-theme/bower_components/bootstrap/less/bootstrap.css",
    "content": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n@media print {\n  * {\n    text-shadow: none !important;\n    color: #000 !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  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  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333333;\n  background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #428bca;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.42857143;\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  display: inline-block;\n  max-width: 100%;\n  height: auto;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\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}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\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}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\ncite {\n  font-style: normal;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-muted {\n  color: #999999;\n}\n.text-primary {\n  color: #428bca;\n}\na.text-primary:hover {\n  color: #3071a9;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #428bca;\n}\na.bg-primary:hover {\n  background-color: #3071a9;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-left: 5px;\n  padding-right: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999999;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #999999;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n  text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  white-space: nowrap;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #ffffff;\n  background-color: #333333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: #333333;\n  background-color: #f5f5f5;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\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.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.row {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: 0%;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: 0%;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0%;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: 0%;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: 0%;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: 0%;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: 0%;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: 0%;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: 0%;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0%;\n  }\n}\ntable {\n  max-width: 100%;\n  background-color: transparent;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  margin-bottom: 20px;\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.42857143;\n  vertical-align: top;\n  border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dddddd;\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.table > tbody + tbody {\n  border-top: 2px solid #dddddd;\n}\n.table .table {\n  background-color: #ffffff;\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.table-bordered {\n  border: 1px solid #dddddd;\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.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\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.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-cell;\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.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\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.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.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\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.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.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.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@media (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #dddddd;\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}\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  min-width: 0;\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}\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 3px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 26px;\n  padding: 2px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555555;\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 .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #999999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"] {\n  line-height: 26px;\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  display: block;\n  min-height: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n}\n.radio label,\n.checkbox label {\n  display: inline;\n  font-weight: normal;\n  cursor: pointer;\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;\n}\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;\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.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 32.5px;\n}\n.has-feedback .form-control-feedback {\n  position: absolute;\n  top: 25px;\n  right: 0;\n  display: block;\n  width: 26px;\n  height: 26px;\n  line-height: 26px;\n  text-align: center;\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: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\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.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  border-color: #3c763d;\n  background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\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: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\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.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  border-color: #8a6d3b;\n  background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\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: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\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.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  border-color: #a94442;\n  background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.form-control-static {\n  margin-bottom: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\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    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-left: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\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  margin-top: 0;\n  margin-bottom: 0;\n  padding-top: 3px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 23px;\n}\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.form-horizontal .form-control-static {\n  padding-top: 3px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  top: 0;\n  right: 15px;\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  padding: 2px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus {\n  color: #333333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  outline: 0;\n  background-image: none;\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.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  pointer-events: none;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default {\n  color: #333333;\n  background-color: #ffffff;\n  border-color: #cccccc;\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.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\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.btn-default .badge {\n  color: #ffffff;\n  background-color: #333333;\n}\n.btn-primary {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\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.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\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.btn-primary .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n.btn-success {\n  color: #ffffff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\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.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\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.btn-success .badge {\n  color: #5cb85c;\n  background-color: #ffffff;\n}\n.btn-info {\n  color: #ffffff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\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.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\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.btn-info .badge {\n  color: #5bc0de;\n  background-color: #ffffff;\n}\n.btn-warning {\n  color: #ffffff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\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.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\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.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #ffffff;\n}\n.btn-danger {\n  color: #ffffff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\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.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\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.btn-danger .badge {\n  color: #d9534f;\n  background-color: #ffffff;\n}\n.btn-link {\n  color: #428bca;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\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.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\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.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\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@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.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.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\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;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\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  list-style: none;\n  font-size: 14px;\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.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #262626;\n  background-color: #f5f5f5;\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  outline: 0;\n  background-color: #428bca;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #999999;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  cursor: not-allowed;\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  left: auto;\n  right: 0;\n}\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #999999;\n}\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0;\n  border-bottom: 4px solid;\n  content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    left: auto;\n    right: 0;\n  }\n  .navbar-right .dropdown-menu-left {\n    left: 0;\n    right: auto;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\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.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\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.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\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.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 > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\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.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\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.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.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\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.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\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.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-bottom-left-radius: 4px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\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:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  float: none;\n  display: table-cell;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-left: 0;\n  padding-right: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\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}\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}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\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.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 2px 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.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\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 > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-top-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 > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n  color: #999999;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #999999;\n  text-decoration: none;\n  background-color: transparent;\n  cursor: not-allowed;\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.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #dddddd;\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  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-bottom-color: transparent;\n  cursor: default;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  text-align: center;\n  margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\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.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\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@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.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\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.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  text-align: center;\n  margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\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.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\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@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.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  max-height: 340px;\n  overflow-x: visible;\n  padding-right: 15px;\n  padding-left: 15px;\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.navbar-collapse.in {\n  overflow-y: auto;\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: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\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@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\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;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n  height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: 15px;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: none;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\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@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  .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\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.navbar-form {\n  margin-left: -15px;\n  margin-right: -15px;\n  padding: 10px 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  margin-top: 12px;\n  margin-bottom: 12px;\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    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-left: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-form.navbar-right:last-child {\n    margin-right: -15px;\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.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 12px;\n  margin-bottom: 12px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-left: 15px;\n    margin-right: 15px;\n  }\n  .navbar-text.navbar-right:last-child {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777777;\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.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.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.navbar-default .navbar-toggle {\n  border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\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  background-color: #e7e7e7;\n  color: #555555;\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.navbar-default .navbar-link {\n  color: #777777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333333;\n}\n.navbar-inverse {\n  background-color: #222222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #999999;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #999999;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #999999;\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.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.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.navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\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  background-color: #080808;\n  color: #ffffff;\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 .divider {\n    background-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.navbar-inverse .navbar-link {\n  color: #999999;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\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.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  content: \"/\\00a0\";\n  padding: 0 5px;\n  color: #cccccc;\n}\n.breadcrumb > .active {\n  color: #999999;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 2px 12px;\n  line-height: 1.42857143;\n  text-decoration: none;\n  color: #428bca;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  margin-left: -1px;\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.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-bottom-right-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #2a6496;\n  background-color: #eeeeee;\n  border-color: #dddddd;\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  background-color: #428bca;\n  border-color: #428bca;\n  cursor: default;\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  background-color: #ffffff;\n  border-color: #dddddd;\n  cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\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.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-bottom-right-radius: 6px;\n  border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\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.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  list-style: none;\n  text-align: center;\n}\n.pager li {\n  display: inline;\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.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #999999;\n  background-color: #ffffff;\n  cursor: not-allowed;\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.label[href]:hover,\n.label[href]:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #999999;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #808080;\n}\n.label-primary {\n  background-color: #428bca;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  color: #ffffff;\n  line-height: 1;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: #999999;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.container .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-left: 60px;\n    padding-right: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\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.thumbnail > img,\n.thumbnail a > img {\n  margin-left: auto;\n  margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #428bca;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable {\n  padding-right: 35px;\n}\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n  color: #3c763d;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n  color: #31708f;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n  color: #8a6d3b;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  background-color: #f2dede;\n  border-color: #ebccd1;\n  color: #a94442;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\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@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  overflow: hidden;\n  height: 20px;\n  margin-bottom: 20px;\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.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.progress-striped .progress-bar {\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: 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.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\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: 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.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\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: 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.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\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: 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.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\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: 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.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-object {\n  display: block;\n}\n.media-heading {\n  margin: 0 0 5px;\n}\n.media > .pull-left {\n  margin-right: 10px;\n}\n.media > .pull-right {\n  margin-left: 10px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  margin-bottom: 20px;\n  padding-left: 0;\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.list-group-item:first-child {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\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.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\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}\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}\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.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\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.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.panel-body {\n  padding: 15px;\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.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\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.panel > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table {\n  margin-bottom: 0;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive {\n  border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\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.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.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\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.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  border-bottom: 0;\n}\n.panel > .table-responsive {\n  border: 0;\n  margin-bottom: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n  overflow: hidden;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n  border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #dddddd;\n}\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #dddddd;\n}\n.panel-primary {\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #428bca;\n}\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #428bca;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ebccd1;\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.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\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.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}\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n.modal-open {\n  overflow: hidden;\n}\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: 1050;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\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.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\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  -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  outline: none;\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000000;\n}\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n  min-height: 16.42857143px;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 20px;\n}\n.modal-footer {\n  margin-top: 15px;\n  padding: 19px 20px 20px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-left: 5px;\n  margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\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  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  visibility: visible;\n  font-size: 12px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n.tooltip.top {\n  margin-top: -3px;\n  padding: 5px 0;\n}\n.tooltip.right {\n  margin-left: 3px;\n  padding: 0 5px;\n}\n.tooltip.bottom {\n  margin-top: 3px;\n  padding: 5px 0;\n}\n.tooltip.left {\n  margin-left: -3px;\n  padding: 0 5px;\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.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\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  background-color: #ffffff;\n  background-clip: padding-box;\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  white-space: normal;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  margin: 0;\n  padding: 8px 14px;\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.popover-content {\n  padding: 9px 14px;\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.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n.popover.top > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-width: 0;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  bottom: -11px;\n}\n.popover.top > .arrow:after {\n  content: \" \";\n  bottom: 1px;\n  margin-left: -10px;\n  border-bottom-width: 0;\n  border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-left-width: 0;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n  content: \" \";\n  left: 1px;\n  bottom: -10px;\n  border-left-width: 0;\n  border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  top: -11px;\n}\n.popover.bottom > .arrow:after {\n  content: \" \";\n  top: 1px;\n  margin-left: -10px;\n  border-top-width: 0;\n  border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n  content: \" \";\n  right: 1px;\n  border-right-width: 0;\n  border-left-color: #ffffff;\n  bottom: -10px;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n}\n.carousel-inner > .item {\n  display: none;\n  position: relative;\n  -webkit-transition: 0.6s ease-in-out left;\n  transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: 15%;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  font-size: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\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: 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.carousel-control.right {\n  left: auto;\n  right: 0;\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: 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.carousel-control:hover,\n.carousel-control:focus {\n  outline: none;\n  color: #ffffff;\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\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.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\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.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\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.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  border: 1px solid #ffffff;\n  border-radius: 10px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n  margin: 0;\n  width: 12px;\n  height: 12px;\n  background-color: #ffffff;\n}\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: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-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    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  content: \" \";\n  display: table;\n}\n.clearfix:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\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.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\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@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\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@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\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@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\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@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\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}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/bootstrap/less/breadcrumbs.less",
    "content": "//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\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\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/less/button-groups.less",
    "content": "//\n// Button groups\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  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\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 { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.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  > .btn-group > .btn {\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    &:extend(.clearfix all);\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:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-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  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\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": "maverix-theme/bower_components/bootstrap/less/buttons.less",
    "content": "//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\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  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\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// 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// 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// 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\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  // 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  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\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": "maverix-theme/bower_components/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      &:extend(.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    outline: none;\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    .glyphicon-chevron-left,\n    .glyphicon-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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\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  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\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// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\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    border-top: 0;\n    border-bottom: @caret-width-base solid;\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      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n"
  },
  {
    "path": "maverix-theme/bower_components/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  // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 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// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\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 file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\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}\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  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  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // 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    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n  line-height: @input-height-base;\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  label {\n    display: inline;\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\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\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.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n\n  // Feedback icon (requires .glyphicon classes)\n  .form-control-feedback {\n    position: absolute;\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n    right: 0;\n    display: block;\n    width: @input-height-base;\n    height: @input-height-base;\n    line-height: @input-height-base;\n    text-align: center;\n  }\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-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-min) {\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      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\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      vertical-align: middle;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 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  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\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  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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#@{icon-font-svg-id}') 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\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": "maverix-theme/bower_components/bootstrap/less/grid.less",
    "content": "//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\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 > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\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 > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\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  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/less/jumbotron.less",
    "content": "//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\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    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\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": "maverix-theme/bower_components/bootstrap/less/list-group.less",
    "content": "//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\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\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\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\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\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: @list-group-active-text-color;\n    }\n  }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\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": "maverix-theme/bower_components/bootstrap/less/media.css",
    "content": ".media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-object {\n  display: block;\n}\n.media-heading {\n  margin: 0 0 5px;\n}\n.media > .pull-left {\n  margin-right: 10px;\n}\n.media > .pull-right {\n  margin-left: 10px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/bootstrap/less/mixins.css",
    "content": ""
  },
  {
    "path": "maverix-theme/bower_components/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;\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\n                                  opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\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  .hide-text();\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//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n//   supported browsers that have box shadow capabilities now support the\n//   standard `box-shadow` property.\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 only\n          transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n  -webkit-transform: scale(@ratio, @ratio-y);\n      -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n          transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\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 only\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\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      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\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          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-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n    background-image:  linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\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-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\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-6, Chrome 10+\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-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-linear-gradient(@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-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-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  }\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) {\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// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n  .list-group-item-@{state} {\n    color: @color;\n    background-color: @background;\n\n    a& {\n      color: @color;\n\n      .list-group-item-heading { color: inherit; }\n\n      &:hover,\n      &:focus {\n        color: @color;\n        background-color: darken(@background, 5%);\n      }\n      &.active,\n      &.active:hover,\n      &.active:focus {\n        color: #fff;\n        background-color: @color;\n        border-color: @color;\n      }\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  .badge {\n    color: @background;\n    background-color: @color;\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// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n  background-color: @color;\n  a&:hover {\n    background-color: darken(@color, 10%);\n  }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n  color: @color;\n  a&:hover {\n    color: darken(@color, 10%);\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  table&  { display: table; }\n  tr&     { display: table-row !important; }\n  th&,\n  td&     { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n  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  &:extend(.clearfix all);\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  &:extend(.clearfix all);\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  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n  @media (min-width: @screen-xs-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-xs-column-push(@columns) {\n  @media (min-width: @screen-xs-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-xs-column-pull(@columns) {\n  @media (min-width: @screen-xs-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\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\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\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\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\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.float-grid-columns(@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-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n  .col-@{class}-@{index} {\n    width: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n  .col-@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n  .col-@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@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.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n  .calc-grid-column(@index, @class, @type);\n  // next iteration\n  .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class, width);\n  .loop-grid-columns(@grid-columns, @class, pull);\n  .loop-grid-columns(@grid-columns, @class, push);\n  .loop-grid-columns(@grid-columns, @class, offset);\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  // Optional feedback icon\n  .form-control-feedback {\n    color: @text-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  select[multiple]& {\n    height: auto;\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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;\n  -webkit-overflow-scrolling: touch;\n\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\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  width: auto;\n  margin: 10px;\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;\n  background-color: @modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { .opacity(0); }\n  &.in { .opacity(@modal-backdrop-opacity); }\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  &:extend(.clearfix all); // 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 (min-width: @screen-sm-min) {\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    width: @modal-md;\n    margin: 30px auto;\n  }\n  .modal-content {\n    .box-shadow(0 5px 15px rgba(0,0,0,.5));\n  }\n\n  // Modal sizes\n  .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n  .modal-lg { width: @modal-lg; }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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  &:extend(.clearfix all);\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  &:extend(.clearfix all);\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: @navbar-collapse-max-height;\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  &:extend(.clearfix all);\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: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-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,\n.container-fluid {\n  > .navbar-header,\n  > .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//\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  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\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  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\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: none;\n  }\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 its 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: @grid-float-breakpoint-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-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\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: @grid-float-breakpoint-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    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\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\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  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\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  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\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\n  .navbar-nav {\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      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-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\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-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": "maverix-theme/bower_components/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  &:extend(.clearfix all);\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  }\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 its :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    }\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// 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": "maverix-theme/bower_components/bootstrap/less/normalize.css",
    "content": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/less/normalize.less",
    "content": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\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// 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// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; // 1\n  vertical-align: baseline; // 2\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// 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// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// Text-level semantics\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 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.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\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// 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// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari 5.\n//\n\nfigure {\n  margin: 1em 40px;\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// Contain overflow in all browsers.\n//\n\npre {\n  overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n//    Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; // 1\n  font: inherit; // 2\n  margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10.\n//\n\nbutton {\n  overflow: visible;\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 Firefox, IE 8+, and Opera\n// Correct `select` style inheritance in Firefox.\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// 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// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n  line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\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// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\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 and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\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// Remove default vertical scrollbar in IE 8/9.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n  font-weight: bold;\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\ntd,\nth {\n  padding: 0;\n}"
  },
  {
    "path": "maverix-theme/bower_components/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  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-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: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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      color: @pagination-color;\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      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\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-border;\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-disabled-bg;\n      border-color: @pagination-disabled-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": "maverix-theme/bower_components/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: @panel-body-padding;\n  &:extend(.clearfix all);\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 its 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  color: inherit;\n\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// 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      border-radius: 0;\n    }\n\n    // Add border top radius for first one\n    &:first-child {\n      .list-group-item:first-child {\n        border-top: 0;\n        .border-top-radius((@panel-border-radius - 1));\n      }\n    }\n    // Add border bottom radius for last one\n    &:last-child {\n      .list-group-item:last-child {\n        border-bottom: 0;\n        .border-bottom-radius((@panel-border-radius - 1));\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 > .table {\n    margin-bottom: 0;\n  }\n  // Add border top radius for first one\n  > .table:first-child,\n  > .table-responsive:first-child > .table:first-child {\n    .border-top-radius((@panel-border-radius - 1));\n\n    > thead:first-child,\n    > tbody:first-child {\n      > tr:first-child {\n        td:first-child,\n        th:first-child {\n          border-top-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-top-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  // Add border bottom radius for last one\n  > .table:last-child,\n  > .table-responsive:last-child > .table:last-child {\n    .border-bottom-radius((@panel-border-radius - 1));\n\n    > tbody:last-child,\n    > tfoot:last-child {\n      > tr:last-child {\n        td:first-child,\n        th:first-child {\n          border-bottom-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-bottom-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive {\n    border-top: 1px solid @table-border-color;\n  }\n  > .table > tbody:first-child > tr:first-child th,\n  > .table > tbody:first-child > tr:first-child td {\n    border-top: 0;\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    }\n    > thead,\n    > tbody {\n      > tr:first-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n    > tbody,\n    > tfoot {\n      > tr:last-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n  }\n  > .table-responsive {\n    border: 0;\n    margin-bottom: 0;\n  }\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  margin-bottom: @line-height-computed;\n\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-info {\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-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"
  },
  {
    "path": "maverix-theme/bower_components/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: -@popover-arrow-width; }\n  &.right   { margin-left: @popover-arrow-width; }\n  &.bottom  { margin-top: @popover-arrow-width; }\n  &.left    { margin-left: -@popover-arrow-width; }\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": "maverix-theme/bower_components/bootstrap/less/print.css",
    "content": "@media print {\n  * {\n    text-shadow: none !important;\n    color: #000 !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  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"
  },
  {
    "path": "maverix-theme/bower_components/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  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": "maverix-theme/bower_components/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// 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": "maverix-theme/bower_components/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.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  .responsive-invisibility();\n}\n\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.visible-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-visibility();\n  }\n}\n\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.hidden-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-invisibility();\n  }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print {\n  .responsive-invisibility();\n\n  @media print {\n    .responsive-visibility();\n  }\n}\n\n.hidden-print {\n  @media print {\n    .responsive-invisibility();\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/less/scaffolding.less",
    "content": "//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n  .box-sizing(border-box);\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// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n  margin: 0;\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": "maverix-theme/bower_components/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 {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\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 {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\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// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\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": "maverix-theme/bower_components/bootstrap/less/theme.css",
    "content": ".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.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.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n  background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  text-shadow: 0 1px 0 #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #2d6ca2;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #2d6ca2;\n  border-color: #2b669a;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\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.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-image: -webkit-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  background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-image: -webkit-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  background-color: #357ebd;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  border-radius: 4px;\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.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-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.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n  background-image: -webkit-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.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-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.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.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\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.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-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.progress-bar {\n  background-image: -webkit-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.progress-bar-success {\n  background-image: -webkit-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.progress-bar-info {\n  background-image: -webkit-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.progress-bar-warning {\n  background-image: -webkit-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.progress-bar-danger {\n  background-image: -webkit-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.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.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-linear-gradient(top, #428bca 0%, #3278b3 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);\n  border-color: #3278b3;\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.panel-default > .panel-heading {\n  background-image: -webkit-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.panel-primary > .panel-heading {\n  background-image: -webkit-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.panel-success > .panel-heading {\n  background-image: -webkit-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.panel-info > .panel-heading {\n  background-image: -webkit-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.panel-warning > .panel-heading {\n  background-image: -webkit-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.panel-danger > .panel-heading {\n  background-image: -webkit-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.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  border-color: #dcdcdc;\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}\n"
  },
  {
    "path": "maverix-theme/bower_components/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-info    { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger  { .btn-styles(@btn-danger-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": "maverix-theme/bower_components/bootstrap/less/thumbnails.less",
    "content": "//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\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  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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(@tooltip-opacity); }\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": "maverix-theme/bower_components/bootstrap/less/type.less",
    "content": "//\n// Typography\n// --------------------------------------------------\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, .h1,\nh2, .h2,\nh3, .h3 {\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, .h4,\nh5, .h5,\nh6, .h6 {\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// 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: 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// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\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// 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  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\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      &:extend(.clearfix all); // 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}\n.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  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/bootstrap/less/variables-orig.css",
    "content": ""
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/less/variables-orig.less",
    "content": "//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\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-primary:         #428bca;\n@brand-success:         #5cb85c;\n@brand-info:            #5bc0de;\n@brand-warning:         #f0ad4e;\n@brand-danger:          #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for `<body>`.\n@body-bg:               #fff;\n//** Global text color on `<body>`.\n@text-color:            @gray-dark;\n\n//** Global textual link color.\n@link-color:            @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color:      darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif:  \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif:       Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.\n@font-family-monospace:   Menlo, Monaco, 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//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the `<body>`.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text 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@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\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//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for `<th>`s and `<td>`s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\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-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-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-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `<input>` background color\n@input-bg:                       #fff;\n//** `<input disabled>` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for `<input>`s\n@input-color:                    @gray;\n//** `<input>` border color\n@input-border:                   #ccc;\n//** `<input>` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\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//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\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\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\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//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\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@navbar-collapse-max-height:       340px;\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:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\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\n//=== Shared nav styles\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\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\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\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//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\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//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\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-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-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\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\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//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\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//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/less/variables.css",
    "content": ""
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/less/variables.less",
    "content": "//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\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-primary:         #428bca;\n@brand-success:         #5cb85c;\n@brand-info:            #5bc0de;\n@brand-warning:         #f0ad4e;\n@brand-danger:          #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for `<body>`.\n@body-bg:               #fff;\n//** Global text color on `<body>`.\n@text-color:            @gray-dark;\n\n//** Global textual link color.\n@link-color:            @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color:      darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif:  \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif:       Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.\n@font-family-monospace:   Menlo, Monaco, 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//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the `<body>`.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     2px;\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@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\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//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for `<th>`s and `<td>`s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\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-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-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-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `<input>` background color\n@input-bg:                       #fff;\n//** `<input disabled>` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for `<input>`s\n@input-color:                    @gray;\n//** `<input>` border color\n@input-border:                   #ccc;\n//** `<input>` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\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//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\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\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\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//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\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@navbar-collapse-max-height:       340px;\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:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\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\n//=== Shared nav styles\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\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\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\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//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\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//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\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-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-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\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\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//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\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//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n"
  },
  {
    "path": "maverix-theme/bower_components/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 @well-border;\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": "maverix-theme/bower_components/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.1.1\",\n  \"keywords\": [\n    \"bootstrap\",\n    \"css\"\n  ],\n  \"homepage\": \"http://getbootstrap.com\",\n  \"author\": \"Twitter, Inc.\",\n  \"scripts\": {\n    \"test\": \"grunt test\"\n  },\n  \"style\": \"./dist/css/bootstrap.css\",\n  \"less\": \"./less/bootstrap.less\",\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  \"license\": {\n    \"type\": \"MIT\",\n    \"url\": \"https://github.com/twbs/bootstrap/blob/master/LICENSE\"\n  },\n  \"devDependencies\": {\n    \"btoa\": \"~1.1.1\",\n    \"canonical-json\": \"~0.0.3\",\n    \"grunt\": \"~0.4.2\",\n    \"grunt-banner\": \"~0.2.0\",\n    \"grunt-contrib-clean\": \"~0.5.0\",\n    \"grunt-contrib-concat\": \"~0.3.0\",\n    \"grunt-contrib-connect\": \"~0.6.0\",\n    \"grunt-contrib-copy\": \"~0.5.0\",\n    \"grunt-contrib-csslint\": \"~0.2.0\",\n    \"grunt-contrib-cssmin\": \"~0.7.0\",\n    \"grunt-contrib-jade\": \"~0.9.1\",\n    \"grunt-contrib-jshint\": \"~0.8.0\",\n    \"grunt-contrib-less\": \"~0.9.0\",\n    \"grunt-contrib-qunit\": \"~0.4.0\",\n    \"grunt-contrib-uglify\": \"~0.3.0\",\n    \"grunt-contrib-watch\": \"~0.5.3\",\n    \"grunt-csscomb\": \"~2.0.1\",\n    \"grunt-exec\": \"0.4.3\",\n    \"grunt-html-validation\": \"~0.1.13\",\n    \"grunt-jekyll\": \"~0.4.1\",\n    \"grunt-jscs-checker\": \"~0.3.0\",\n    \"grunt-saucelabs\": \"~5.0.0\",\n    \"grunt-sed\": \"~0.1.1\",\n    \"load-grunt-tasks\": \"~0.3.0\",\n    \"markdown\": \"~0.5.0\"\n  },\n  \"jspm\": {\n    \"main\": \"js/bootstrap\",\n    \"directories\": {\n      \"example\": \"examples\",\n      \"lib\": \"dist\"\n    },\n    \"shim\": {\n      \"js/bootstrap\": {\n        \"imports\": \"jquery\",\n        \"exports\": \"$\"\n      }\n    },\n    \"buildConfig\": {\n      \"uglify\": true\n    }\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/test-infra/README.md",
    "content": "## What does `s3_cache.py` do?\n\n### In general\n`s3_cache.py` maintains a cache, stored in an Amazon S3 (Simple Storage Service) bucket, of a given directory whose contents are considered non-critical and are completely & solely determined by (and should be able to be regenerated from) a single given file.\n\nThe SHA-256 hash of the single file is used as the key for the cache. The directory is stored as a gzipped tarball.\n\nAll the tarballs are stored in S3's Reduced Redundancy Storage (RRS) storage class, since this is cheaper and the data is non-critical.\n\n`s3_cache.py` itself never deletes cache entries; deletion should either be done manually or using automatic S3 lifecycle rules on the bucket.\n\nSimilar to git, `s3_cache.py` makes the assumption that [SHA-256 will effectively never have a collision](http://stackoverflow.com/questions/4014090/is-it-safe-to-ignore-the-possibility-of-sha-collisions-in-practice).\n\n\n### For Bootstrap specifically\n`s3_cache.py` is used to cache the npm packages that our Grunt tasks depend on and the RubyGems that Jekyll depends on. (Jekyll is needed to compile our docs to HTML so that we can run them thru an HTML5 validator.)\n\nFor npm, the `node_modules` directory is cached based on our `npm-shrinkwrap.canonical.json` file.\n\nFor RubyGems, the `gemdir` of the current RVM-selected Ruby is cached based on the `pseudo_Gemfile.lock` file generated by our Travis build script.\n`pseudo_Gemfile.lock` contains the versions of Ruby and Jekyll that we're using (read our `.travis.yml` for details).\n\n\n## Why is `s3_cache.py` necessary?\n`s3_cache.py` is used to speed up Bootstrap's Travis builds. Installing npm packages and RubyGems used to take up a significant fraction of our total build times. Also, at the time that `s3_cache.py` was written, npm was occasionally unreliable.\n\nTravis does offer built-in caching on their paid plans, but this do-it-ourselves S3 solution is significantly cheaper since we only need caching and not Travis' other paid features.\n\n\n## Setup\n\n### Overview\n1. Create an Amazon Web Services (AWS) account.\n2. Create an Identity & Access Management (IAM) user, and note their credentials.\n3. Create an S3 bucket.\n4. Set permissions on the bucket to grant the user read+write access.\n5. Set the user credentials as secure Travis environment variables.\n\n### In detail\n1. Create an AWS account.\n2. Login to the [AWS Management Console](https://console.aws.amazon.com).\n3. Go to the IAM Management Console.\n4. Create a new user (named e.g. `travis-ci`) and generate an access key for them. Note both the Access Key ID and the Secret Access Key.\n5. Note the user's ARN (Amazon Resource Name), which can be found in the \"Summary\" tab of the user browser. This will be of the form: `arn:aws:iam::XXXXXXXXXXXXXX:user/the-username-goes-here`\n6. Note the user's access key, which can be found in the \"Security Credentials\" tab of the user browser.\n7. Go to the S3 Management Console.\n8. Create a new bucket. For a non-publicly-accessible bucket (like Bootstrap uses), it's recommended that the bucket name be random to increase security. On most *nix machines, you can easily generate a random UUID to use as the bucket name using Python:\n\n    ```bash\n    python -c \"import uuid; print(uuid.uuid4())\"\n    ```\n\n9. Determine and note what your bucket's ARN is. The ARN for an S3 bucket is of the form: `arn:aws:s3:::the-bucket-name-goes-here`\n10. In the bucket's Properties pane, in the \"Permissions\" section, click the \"Edit bucket policy\" button.\n11. Input and submit an IAM Policy that grants the user at least read+write rights to the bucket. AWS has a policy generator and some examples to help with crafting the policy. Here's the policy that Bootstrap uses, with the sensitive bits censored:\n\n    ```json\n    {\n        \"Version\": \"2012-10-17\",\n        \"Id\": \"PolicyTravisReadWriteNoAdmin\",\n        \"Statement\": [\n            {\n                \"Sid\": \"StmtXXXXXXXXXXXXXX\",\n                \"Effect\": \"Allow\",\n                \"Principal\": {\n                    \"AWS\": \"arn:aws:iam::XXXXXXXXXXXXXX:user/travis-ci\"\n                },\n                \"Action\": [\n                    \"s3:AbortMultipartUpload\",\n                    \"s3:GetObjectVersion\",\n                    \"s3:ListBucket\",\n                    \"s3:DeleteObject\",\n                    \"s3:DeleteObjectVersion\",\n                    \"s3:GetObject\",\n                    \"s3:PutObject\"\n                ],\n                \"Resource\": [\n                    \"arn:aws:s3:::XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\",\n                    \"arn:aws:s3:::XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/*\"\n                ]\n            }\n        ]\n    }\n    ```\n\n12. If you want deletion from the cache to be done automatically based on age (like Bootstrap does): In the bucket's Properties pane, in the \"Lifecycle\" section, add a rule to expire/delete files based on creation date.\n13. Install the [`travis` RubyGem](https://github.com/travis-ci/travis): `gem install travis`\n14. Encrypt the environment variables:\n\n    ```bash\n    travis encrypt --repo twbs/bootstrap \"AWS_ACCESS_KEY_ID=XXX\"\n    travis encrypt --repo twbs/bootstrap \"AWS_SECRET_ACCESS_KEY=XXX\"\n    travis encrypt --repo twbs/bootstrap \"TWBS_S3_BUCKET=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\"\n    ```\n\n14. Add the resulting secure environment variables to `.travis.yml`.\n\n\n## Usage\nRead `s3_cache.py`'s source code and Bootstrap's `.travis.yml` for how to invoke and make use of `s3_cache.py`.\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/test-infra/npm-shrinkwrap.canonical.json",
    "content": "{\"dependencies\":{\"btoa\":{\"from\":\"btoa@~1.1.1\",\"version\":\"1.1.1\"},\"canonical-json\":{\"from\":\"canonical-json@~0.0.3\",\"version\":\"0.0.4\"},\"grunt\":{\"dependencies\":{\"async\":{\"from\":\"async@~0.1.22\",\"version\":\"0.1.22\"},\"coffee-script\":{\"from\":\"coffee-script@~1.3.3\",\"version\":\"1.3.3\"},\"colors\":{\"from\":\"colors@~0.6.0\",\"version\":\"0.6.2\"},\"dateformat\":{\"from\":\"dateformat@1.0.2-1.2.3\",\"version\":\"1.0.2-1.2.3\"},\"eventemitter2\":{\"from\":\"eventemitter2@~0.4.13\",\"version\":\"0.4.13\"},\"exit\":{\"from\":\"exit@~0.1.1\",\"version\":\"0.1.2\"},\"findup-sync\":{\"dependencies\":{\"lodash\":{\"from\":\"lodash@~1.0.1\",\"version\":\"1.0.1\"}},\"from\":\"findup-sync@~0.1.2\",\"version\":\"0.1.2\"},\"getobject\":{\"from\":\"getobject@~0.1.0\",\"version\":\"0.1.0\"},\"glob\":{\"dependencies\":{\"graceful-fs\":{\"from\":\"graceful-fs@~1.2.0\",\"version\":\"1.2.3\"},\"inherits\":{\"from\":\"inherits@1\",\"version\":\"1.0.0\"}},\"from\":\"glob@~3.1.21\",\"version\":\"3.1.21\"},\"hooker\":{\"from\":\"hooker@~0.2.3\",\"version\":\"0.2.3\"},\"iconv-lite\":{\"from\":\"iconv-lite@~0.2.11\",\"version\":\"0.2.11\"},\"js-yaml\":{\"dependencies\":{\"argparse\":{\"dependencies\":{\"underscore\":{\"from\":\"underscore@1.4.x\",\"version\":\"1.4.4\"},\"underscore.string\":{\"from\":\"underscore.string@~2.3.1\",\"version\":\"2.3.3\"}},\"from\":\"argparse@~ 0.1.11\",\"version\":\"0.1.15\"},\"esprima\":{\"from\":\"esprima@~ 1.0.2\",\"version\":\"1.0.4\"}},\"from\":\"js-yaml@~2.0.5\",\"version\":\"2.0.5\"},\"lodash\":{\"from\":\"lodash@~0.9.2\",\"version\":\"0.9.2\"},\"minimatch\":{\"dependencies\":{\"lru-cache\":{\"from\":\"lru-cache@2\",\"version\":\"2.5.0\"},\"sigmund\":{\"from\":\"sigmund@~1.0.0\",\"version\":\"1.0.0\"}},\"from\":\"minimatch@~0.2.9\",\"version\":\"0.2.14\"},\"nopt\":{\"dependencies\":{\"abbrev\":{\"from\":\"abbrev@1\",\"version\":\"1.0.4\"}},\"from\":\"nopt@~1.0.10\",\"version\":\"1.0.10\"},\"rimraf\":{\"dependencies\":{\"graceful-fs\":{\"from\":\"graceful-fs@~1.1\",\"version\":\"1.1.14\"}},\"from\":\"rimraf@~2.0.3\",\"version\":\"2.0.3\"},\"underscore.string\":{\"from\":\"underscore.string@~2.2.1\",\"version\":\"2.2.1\"},\"which\":{\"from\":\"which@~1.0.5\",\"version\":\"1.0.5\"}},\"from\":\"grunt@~0.4.2\",\"version\":\"0.4.2\"},\"grunt-banner\":{\"from\":\"grunt-banner@~0.2.0\",\"version\":\"0.2.0\"},\"grunt-contrib-clean\":{\"dependencies\":{\"rimraf\":{\"from\":\"rimraf@~2.2.1\",\"version\":\"2.2.6\"}},\"from\":\"grunt-contrib-clean@~0.5.0\",\"version\":\"0.5.0\"},\"grunt-contrib-concat\":{\"from\":\"grunt-contrib-concat@~0.3.0\",\"version\":\"0.3.0\"},\"grunt-contrib-connect\":{\"dependencies\":{\"connect\":{\"dependencies\":{\"batch\":{\"from\":\"batch@0.5.0\",\"version\":\"0.5.0\"},\"buffer-crc32\":{\"from\":\"buffer-crc32@0.2.1\",\"version\":\"0.2.1\"},\"bytes\":{\"from\":\"bytes@0.2.1\",\"version\":\"0.2.1\"},\"cookie\":{\"from\":\"cookie@0.1.0\",\"version\":\"0.1.0\"},\"cookie-signature\":{\"from\":\"cookie-signature@1.0.1\",\"version\":\"1.0.1\"},\"debug\":{\"from\":\"debug@>= 0.7.3 < 1\",\"version\":\"0.7.4\"},\"fresh\":{\"from\":\"fresh@0.2.0\",\"version\":\"0.2.0\"},\"methods\":{\"from\":\"methods@0.1.0\",\"version\":\"0.1.0\"},\"multiparty\":{\"dependencies\":{\"readable-stream\":{\"dependencies\":{\"core-util-is\":{\"from\":\"core-util-is@~1.0.0\",\"version\":\"1.0.1\"},\"debuglog\":{\"from\":\"debuglog@0.0.2\",\"version\":\"0.0.2\"}},\"from\":\"readable-stream@~1.1.9\",\"version\":\"1.1.10\"},\"stream-counter\":{\"from\":\"stream-counter@~0.2.0\",\"version\":\"0.2.0\"}},\"from\":\"multiparty@2.2.0\",\"version\":\"2.2.0\"},\"negotiator\":{\"from\":\"negotiator@0.3.0\",\"version\":\"0.3.0\"},\"pause\":{\"from\":\"pause@0.0.1\",\"version\":\"0.0.1\"},\"qs\":{\"from\":\"qs@0.6.6\",\"version\":\"0.6.6\"},\"raw-body\":{\"from\":\"raw-body@1.1.2\",\"version\":\"1.1.2\"},\"send\":{\"dependencies\":{\"mime\":{\"from\":\"mime@~1.2.9\",\"version\":\"1.2.11\"},\"range-parser\":{\"from\":\"range-parser@0.0.4\",\"version\":\"0.0.4\"}},\"from\":\"send@0.1.4\",\"version\":\"0.1.4\"},\"uid2\":{\"from\":\"uid2@0.0.3\",\"version\":\"0.0.3\"}},\"from\":\"connect@~2.12.0\",\"version\":\"2.12.0\"},\"connect-livereload\":{\"from\":\"connect-livereload@~0.3.0\",\"version\":\"0.3.2\"},\"open\":{\"from\":\"open@0.0.4\",\"version\":\"0.0.4\"}},\"from\":\"grunt-contrib-connect@~0.6.0\",\"version\":\"0.6.0\"},\"grunt-contrib-copy\":{\"from\":\"grunt-contrib-copy@~0.5.0\",\"version\":\"0.5.0\"},\"grunt-contrib-csslint\":{\"dependencies\":{\"csslint\":{\"dependencies\":{\"parserlib\":{\"from\":\"parserlib@~0.2.2\",\"version\":\"0.2.4\"}},\"from\":\"csslint@~0.10.0\",\"version\":\"0.10.0\"}},\"from\":\"grunt-contrib-csslint@~0.2.0\",\"version\":\"0.2.0\"},\"grunt-contrib-cssmin\":{\"dependencies\":{\"clean-css\":{\"dependencies\":{\"commander\":{\"from\":\"commander@2.0.x\",\"version\":\"2.0.0\"}},\"from\":\"clean-css@~2.0.0\",\"version\":\"2.0.8\"},\"grunt-lib-contrib\":{\"dependencies\":{\"zlib-browserify\":{\"from\":\"zlib-browserify@0.0.1\",\"version\":\"0.0.1\"}},\"from\":\"grunt-lib-contrib@~0.6.0\",\"version\":\"0.6.1\"}},\"from\":\"grunt-contrib-cssmin@~0.7.0\",\"version\":\"0.7.0\"},\"grunt-contrib-jade\":{\"dependencies\":{\"grunt-lib-contrib\":{\"dependencies\":{\"zlib-browserify\":{\"from\":\"zlib-browserify@0.0.1\",\"version\":\"0.0.1\"}},\"from\":\"grunt-lib-contrib@~0.6.1\",\"version\":\"0.6.1\"},\"jade\":{\"dependencies\":{\"character-parser\":{\"from\":\"character-parser@1.2.0\",\"version\":\"1.2.0\"},\"commander\":{\"from\":\"commander@2.0.0\",\"version\":\"2.0.0\"},\"constantinople\":{\"dependencies\":{\"uglify-js\":{\"dependencies\":{\"async\":{\"from\":\"async@~0.2.6\",\"version\":\"0.2.10\"},\"optimist\":{\"dependencies\":{\"wordwrap\":{\"from\":\"wordwrap@~0.0.2\",\"version\":\"0.0.2\"}},\"from\":\"optimist@~0.3.5\",\"version\":\"0.3.7\"},\"source-map\":{\"dependencies\":{\"amdefine\":{\"from\":\"amdefine@>=0.0.4\",\"version\":\"0.1.0\"}},\"from\":\"source-map@~0.1.7\",\"version\":\"0.1.31\"},\"uglify-to-browserify\":{\"from\":\"uglify-to-browserify@~1.0.0\",\"version\":\"1.0.2\"}},\"from\":\"uglify-js@~2.4.0\",\"version\":\"2.4.12\"}},\"from\":\"constantinople@~1.0.2\",\"version\":\"1.0.2\"},\"mkdirp\":{\"from\":\"mkdirp@~0.3.5\",\"version\":\"0.3.5\"},\"monocle\":{\"dependencies\":{\"readdirp\":{\"dependencies\":{\"minimatch\":{\"dependencies\":{\"lru-cache\":{\"from\":\"lru-cache@2\",\"version\":\"2.5.0\"},\"sigmund\":{\"from\":\"sigmund@~1.0.0\",\"version\":\"1.0.0\"}},\"from\":\"minimatch@>=0.2.4\",\"version\":\"0.2.14\"}},\"from\":\"readdirp@~0.2.3\",\"version\":\"0.2.5\"}},\"from\":\"monocle@1.1.50\",\"version\":\"1.1.50\"},\"transformers\":{\"dependencies\":{\"css\":{\"dependencies\":{\"css-parse\":{\"from\":\"css-parse@1.0.4\",\"version\":\"1.0.4\"},\"css-stringify\":{\"from\":\"css-stringify@1.0.5\",\"version\":\"1.0.5\"}},\"from\":\"css@~1.0.8\",\"version\":\"1.0.8\"},\"promise\":{\"dependencies\":{\"is-promise\":{\"from\":\"is-promise@~1\",\"version\":\"1.0.0\"}},\"from\":\"promise@~2.0\",\"version\":\"2.0.0\"},\"uglify-js\":{\"dependencies\":{\"optimist\":{\"dependencies\":{\"wordwrap\":{\"from\":\"wordwrap@~0.0.2\",\"version\":\"0.0.2\"}},\"from\":\"optimist@~0.3.5\",\"version\":\"0.3.7\"},\"source-map\":{\"dependencies\":{\"amdefine\":{\"from\":\"amdefine@>=0.0.4\",\"version\":\"0.1.0\"}},\"from\":\"source-map@~0.1.7\",\"version\":\"0.1.31\"}},\"from\":\"uglify-js@~2.2.5\",\"version\":\"2.2.5\"}},\"from\":\"transformers@2.1.0\",\"resolved\":\"https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz\",\"version\":\"2.1.0\"},\"with\":{\"dependencies\":{\"uglify-js\":{\"dependencies\":{\"async\":{\"from\":\"async@~0.2.6\",\"version\":\"0.2.10\"},\"optimist\":{\"dependencies\":{\"wordwrap\":{\"from\":\"wordwrap@~0.0.2\",\"version\":\"0.0.2\"}},\"from\":\"optimist@~0.3.5\",\"version\":\"0.3.7\"},\"source-map\":{\"dependencies\":{\"amdefine\":{\"from\":\"amdefine@>=0.0.4\",\"version\":\"0.1.0\"}},\"from\":\"source-map@~0.1.7\",\"version\":\"0.1.31\"},\"uglify-to-browserify\":{\"from\":\"uglify-to-browserify@~1.0.0\",\"version\":\"1.0.2\"}},\"from\":\"uglify-js@2.4.0\",\"version\":\"2.4.0\"}},\"from\":\"with@~2.0.0\",\"version\":\"2.0.0\"}},\"from\":\"jade@~1.0.2\",\"version\":\"1.0.2\"},\"lodash-node\":{\"from\":\"lodash-node@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"grunt-contrib-jade@~0.9.1\",\"version\":\"0.9.1\"},\"grunt-contrib-jshint\":{\"dependencies\":{\"jshint\":{\"dependencies\":{\"cli\":{\"dependencies\":{\"glob\":{\"dependencies\":{\"inherits\":{\"from\":\"inherits@2\",\"version\":\"2.0.1\"}},\"from\":\"glob@>= 3.1.4\",\"version\":\"3.2.8\"}},\"from\":\"cli@0.4.x\",\"version\":\"0.4.5\"},\"console-browserify\":{\"from\":\"console-browserify@0.1.x\",\"version\":\"0.1.6\"},\"htmlparser2\":{\"dependencies\":{\"domelementtype\":{\"from\":\"domelementtype@1\",\"version\":\"1.1.1\"},\"domhandler\":{\"from\":\"domhandler@2.1\",\"version\":\"2.1.0\"},\"domutils\":{\"from\":\"domutils@1.1\",\"version\":\"1.1.6\"},\"readable-stream\":{\"dependencies\":{\"string_decoder\":{\"from\":\"string_decoder@~0.10.x\",\"version\":\"0.10.25\"}},\"from\":\"readable-stream@1.0\",\"version\":\"1.0.25\"}},\"from\":\"htmlparser2@3.3.x\",\"version\":\"3.3.0\"},\"minimatch\":{\"dependencies\":{\"lru-cache\":{\"from\":\"lru-cache@2\",\"version\":\"2.5.0\"},\"sigmund\":{\"from\":\"sigmund@~1.0.0\",\"version\":\"1.0.0\"}},\"from\":\"minimatch@0.x.x\",\"version\":\"0.2.14\"},\"shelljs\":{\"from\":\"shelljs@0.1.x\",\"version\":\"0.1.4\"},\"underscore\":{\"from\":\"underscore@1.4.x\",\"version\":\"1.4.4\"}},\"from\":\"jshint@~2.4.0\",\"version\":\"2.4.3\"}},\"from\":\"grunt-contrib-jshint@~0.8.0\",\"version\":\"0.8.0\"},\"grunt-contrib-less\":{\"dependencies\":{\"chalk\":{\"dependencies\":{\"ansi-styles\":{\"from\":\"ansi-styles@~1.0.0\",\"version\":\"1.0.0\"},\"has-color\":{\"from\":\"has-color@~0.1.0\",\"version\":\"0.1.4\"},\"strip-ansi\":{\"from\":\"strip-ansi@~0.1.0\",\"version\":\"0.1.1\"}},\"from\":\"chalk@~0.4.0\",\"version\":\"0.4.0\"},\"grunt-lib-contrib\":{\"dependencies\":{\"zlib-browserify\":{\"from\":\"zlib-browserify@0.0.1\",\"version\":\"0.0.1\"}},\"from\":\"grunt-lib-contrib@~0.6.1\",\"version\":\"0.6.1\"},\"less\":{\"dependencies\":{\"clean-css\":{\"dependencies\":{\"commander\":{\"from\":\"commander@2.0.x\",\"version\":\"2.0.0\"}},\"from\":\"clean-css@2.0.x\",\"version\":\"2.0.8\"},\"mime\":{\"from\":\"mime@1.2.x\",\"version\":\"1.2.11\"},\"mkdirp\":{\"from\":\"mkdirp@~0.3.5\",\"version\":\"0.3.5\"},\"request\":{\"dependencies\":{\"aws-sign2\":{\"from\":\"aws-sign2@~0.5.0\",\"version\":\"0.5.0\"},\"forever-agent\":{\"from\":\"forever-agent@~0.5.0\",\"version\":\"0.5.2\"},\"form-data\":{\"dependencies\":{\"async\":{\"from\":\"async@~0.2.9\",\"version\":\"0.2.10\"},\"combined-stream\":{\"dependencies\":{\"delayed-stream\":{\"from\":\"delayed-stream@0.0.5\",\"version\":\"0.0.5\"}},\"from\":\"combined-stream@~0.0.4\",\"version\":\"0.0.4\"}},\"from\":\"form-data@~0.1.0\",\"version\":\"0.1.2\"},\"hawk\":{\"dependencies\":{\"boom\":{\"from\":\"boom@0.4.x\",\"version\":\"0.4.2\"},\"cryptiles\":{\"from\":\"cryptiles@0.2.x\",\"version\":\"0.2.2\"},\"hoek\":{\"from\":\"hoek@0.9.x\",\"version\":\"0.9.1\"},\"sntp\":{\"from\":\"sntp@0.2.x\",\"version\":\"0.2.4\"}},\"from\":\"hawk@~1.0.0\",\"version\":\"1.0.0\"},\"http-signature\":{\"dependencies\":{\"asn1\":{\"from\":\"asn1@0.1.11\",\"version\":\"0.1.11\"},\"assert-plus\":{\"from\":\"assert-plus@0.1.2\",\"version\":\"0.1.2\"},\"ctype\":{\"from\":\"ctype@0.5.2\",\"version\":\"0.5.2\"}},\"from\":\"http-signature@~0.10.0\",\"version\":\"0.10.0\"},\"json-stringify-safe\":{\"from\":\"json-stringify-safe@~5.0.0\",\"version\":\"5.0.0\"},\"node-uuid\":{\"from\":\"node-uuid@~1.4.0\",\"version\":\"1.4.1\"},\"oauth-sign\":{\"from\":\"oauth-sign@~0.3.0\",\"version\":\"0.3.0\"},\"qs\":{\"from\":\"qs@~0.6.0\",\"version\":\"0.6.6\"},\"tough-cookie\":{\"dependencies\":{\"punycode\":{\"from\":\"punycode@>=0.2.0\",\"version\":\"1.2.3\"}},\"from\":\"tough-cookie@>=0.12.0\",\"version\":\"0.12.1\"},\"tunnel-agent\":{\"from\":\"tunnel-agent@~0.3.0\",\"version\":\"0.3.0\"}},\"from\":\"request@>=2.12.0\",\"version\":\"2.33.0\"},\"source-map\":{\"dependencies\":{\"amdefine\":{\"from\":\"amdefine@>=0.0.4\",\"version\":\"0.1.0\"}},\"from\":\"source-map@0.1.x\",\"version\":\"0.1.31\"}},\"from\":\"less@~1.6.0\",\"version\":\"1.6.3\"}},\"from\":\"grunt-contrib-less@~0.9.0\",\"version\":\"0.9.0\"},\"grunt-contrib-qunit\":{\"dependencies\":{\"grunt-lib-phantomjs\":{\"dependencies\":{\"eventemitter2\":{\"from\":\"eventemitter2@~0.4.9\",\"version\":\"0.4.13\"},\"phantomjs\":{\"dependencies\":{\"adm-zip\":{\"from\":\"adm-zip@0.2.1\",\"version\":\"0.2.1\"},\"kew\":{\"from\":\"kew@~0.1.7\",\"version\":\"0.1.7\"},\"mkdirp\":{\"from\":\"mkdirp@0.3.5\",\"version\":\"0.3.5\"},\"ncp\":{\"from\":\"ncp@0.4.2\",\"version\":\"0.4.2\"},\"npmconf\":{\"dependencies\":{\"config-chain\":{\"dependencies\":{\"proto-list\":{\"from\":\"proto-list@~1.2.1\",\"version\":\"1.2.2\"}},\"from\":\"config-chain@~1.1.1\",\"version\":\"1.1.8\"},\"inherits\":{\"from\":\"inherits@~1.0.0\",\"version\":\"1.0.0\"},\"ini\":{\"from\":\"ini@~1.1.0\",\"version\":\"1.1.0\"},\"nopt\":{\"dependencies\":{\"abbrev\":{\"from\":\"abbrev@1\",\"version\":\"1.0.4\"}},\"from\":\"nopt@2\",\"version\":\"2.1.2\"},\"once\":{\"from\":\"once@~1.1.1\",\"version\":\"1.1.1\"},\"osenv\":{\"from\":\"osenv@0.0.3\",\"version\":\"0.0.3\"},\"semver\":{\"from\":\"semver@~1.1.0\",\"version\":\"1.1.4\"}},\"from\":\"npmconf@0.0.24\",\"version\":\"0.0.24\"},\"rimraf\":{\"from\":\"rimraf@~2.2.2\",\"version\":\"2.2.6\"},\"which\":{\"from\":\"which@~1.0.5\",\"version\":\"1.0.5\"}},\"from\":\"phantomjs@~1.9.0-1\",\"version\":\"1.9.7-1\"},\"semver\":{\"from\":\"semver@~1.0.14\",\"version\":\"1.0.14\"},\"temporary\":{\"dependencies\":{\"package\":{\"from\":\"package@>= 1.0.0 < 1.2.0\",\"version\":\"1.0.1\"}},\"from\":\"temporary@~0.0.4\",\"version\":\"0.0.8\"}},\"from\":\"grunt-lib-phantomjs@~0.5.0\",\"version\":\"0.5.0\"}},\"from\":\"grunt-contrib-qunit@~0.4.0\",\"version\":\"0.4.0\"},\"grunt-contrib-uglify\":{\"dependencies\":{\"chalk\":{\"dependencies\":{\"ansi-styles\":{\"from\":\"ansi-styles@~1.0.0\",\"version\":\"1.0.0\"},\"has-color\":{\"from\":\"has-color@~0.1.0\",\"version\":\"0.1.4\"},\"strip-ansi\":{\"from\":\"strip-ansi@~0.1.0\",\"version\":\"0.1.1\"}},\"from\":\"chalk@~0.4.0\",\"version\":\"0.4.0\"},\"grunt-lib-contrib\":{\"dependencies\":{\"zlib-browserify\":{\"from\":\"zlib-browserify@0.0.1\",\"version\":\"0.0.1\"}},\"from\":\"grunt-lib-contrib@~0.6.1\",\"version\":\"0.6.1\"},\"uglify-js\":{\"dependencies\":{\"async\":{\"from\":\"async@~0.2.6\",\"version\":\"0.2.10\"},\"optimist\":{\"dependencies\":{\"wordwrap\":{\"from\":\"wordwrap@~0.0.2\",\"version\":\"0.0.2\"}},\"from\":\"optimist@~0.3.5\",\"version\":\"0.3.7\"},\"source-map\":{\"dependencies\":{\"amdefine\":{\"from\":\"amdefine@>=0.0.4\",\"version\":\"0.1.0\"}},\"from\":\"source-map@~0.1.7\",\"version\":\"0.1.31\"},\"uglify-to-browserify\":{\"from\":\"uglify-to-browserify@~1.0.0\",\"version\":\"1.0.2\"}},\"from\":\"uglify-js@~2.4.0\",\"version\":\"2.4.12\"}},\"from\":\"grunt-contrib-uglify@~0.3.0\",\"version\":\"0.3.2\"},\"grunt-contrib-watch\":{\"dependencies\":{\"gaze\":{\"dependencies\":{\"globule\":{\"dependencies\":{\"glob\":{\"dependencies\":{\"graceful-fs\":{\"from\":\"graceful-fs@~1.2.0\",\"version\":\"1.2.3\"},\"inherits\":{\"from\":\"inherits@1\",\"version\":\"1.0.0\"}},\"from\":\"glob@~3.1.21\",\"version\":\"3.1.21\"},\"lodash\":{\"from\":\"lodash@~1.0.1\",\"version\":\"1.0.1\"},\"minimatch\":{\"dependencies\":{\"lru-cache\":{\"from\":\"lru-cache@2\",\"version\":\"2.5.0\"},\"sigmund\":{\"from\":\"sigmund@~1.0.0\",\"version\":\"1.0.0\"}},\"from\":\"minimatch@~0.2.11\",\"version\":\"0.2.14\"}},\"from\":\"globule@~0.1.0\",\"version\":\"0.1.0\"}},\"from\":\"gaze@~0.4.0\",\"version\":\"0.4.3\"},\"tiny-lr\":{\"dependencies\":{\"debug\":{\"from\":\"debug@~0.7.2\",\"version\":\"0.7.4\"},\"faye-websocket\":{\"from\":\"faye-websocket@~0.4.3\",\"version\":\"0.4.4\"},\"noptify\":{\"dependencies\":{\"nopt\":{\"dependencies\":{\"abbrev\":{\"from\":\"abbrev@1\",\"version\":\"1.0.4\"}},\"from\":\"nopt@~2.0.0\",\"version\":\"2.0.0\"}},\"from\":\"noptify@latest\",\"version\":\"0.0.3\"},\"qs\":{\"from\":\"qs@~0.5.2\",\"version\":\"0.5.6\"}},\"from\":\"tiny-lr@0.0.4\",\"version\":\"0.0.4\"}},\"from\":\"grunt-contrib-watch@~0.5.3\",\"version\":\"0.5.3\"},\"grunt-csscomb\":{\"dependencies\":{\"csscomb\":{\"dependencies\":{\"commander\":{\"from\":\"commander@2.0.0\",\"version\":\"2.0.0\"},\"gonzales-pe\":{\"from\":\"gonzales-pe@2.0.x\",\"version\":\"2.0.2\"},\"minimatch\":{\"dependencies\":{\"lru-cache\":{\"from\":\"lru-cache@2\",\"version\":\"2.5.0\"},\"sigmund\":{\"from\":\"sigmund@~1.0.0\",\"version\":\"1.0.0\"}},\"from\":\"minimatch@0.2.12\",\"version\":\"0.2.12\"},\"vow\":{\"from\":\"vow@0.3.11\",\"version\":\"0.3.11\"},\"vow-fs\":{\"dependencies\":{\"node-uuid\":{\"from\":\"node-uuid@1.4.0\",\"version\":\"1.4.0\"},\"vow-queue\":{\"from\":\"vow-queue@0.0.2\",\"version\":\"0.0.2\"}},\"from\":\"vow-fs@0.2.3\",\"version\":\"0.2.3\"}},\"from\":\"csscomb@~2.0.0\",\"version\":\"2.0.4\"}},\"from\":\"grunt-csscomb@~2.0.1\",\"version\":\"2.0.1\"},\"grunt-exec\":{\"from\":\"grunt-exec@0.4.3\",\"version\":\"0.4.3\"},\"grunt-html-validation\":{\"dependencies\":{\"colors\":{\"from\":\"colors@~0.6.0\",\"version\":\"0.6.2\"},\"request\":{\"dependencies\":{\"aws-sign\":{\"from\":\"aws-sign@~0.3.0\",\"version\":\"0.3.0\"},\"cookie-jar\":{\"from\":\"cookie-jar@~0.3.0\",\"version\":\"0.3.0\"},\"forever-agent\":{\"from\":\"forever-agent@~0.5.0\",\"version\":\"0.5.2\"},\"form-data\":{\"dependencies\":{\"async\":{\"from\":\"async@~0.2.9\",\"version\":\"0.2.10\"},\"combined-stream\":{\"dependencies\":{\"delayed-stream\":{\"from\":\"delayed-stream@0.0.5\",\"version\":\"0.0.5\"}},\"from\":\"combined-stream@~0.0.4\",\"version\":\"0.0.4\"}},\"from\":\"form-data@~0.1.0\",\"version\":\"0.1.2\"},\"hawk\":{\"dependencies\":{\"boom\":{\"from\":\"boom@0.4.x\",\"version\":\"0.4.2\"},\"cryptiles\":{\"from\":\"cryptiles@0.2.x\",\"version\":\"0.2.2\"},\"hoek\":{\"from\":\"hoek@0.9.x\",\"version\":\"0.9.1\"},\"sntp\":{\"from\":\"sntp@0.2.x\",\"version\":\"0.2.4\"}},\"from\":\"hawk@~1.0.0\",\"version\":\"1.0.0\"},\"http-signature\":{\"dependencies\":{\"asn1\":{\"from\":\"asn1@0.1.11\",\"version\":\"0.1.11\"},\"assert-plus\":{\"from\":\"assert-plus@0.1.2\",\"version\":\"0.1.2\"},\"ctype\":{\"from\":\"ctype@0.5.2\",\"version\":\"0.5.2\"}},\"from\":\"http-signature@~0.10.0\",\"version\":\"0.10.0\"},\"json-stringify-safe\":{\"from\":\"json-stringify-safe@~5.0.0\",\"version\":\"5.0.0\"},\"mime\":{\"from\":\"mime@~1.2.9\",\"version\":\"1.2.11\"},\"node-uuid\":{\"from\":\"node-uuid@~1.4.0\",\"version\":\"1.4.1\"},\"oauth-sign\":{\"from\":\"oauth-sign@~0.3.0\",\"version\":\"0.3.0\"},\"qs\":{\"from\":\"qs@~0.6.0\",\"version\":\"0.6.6\"},\"tunnel-agent\":{\"from\":\"tunnel-agent@~0.3.0\",\"version\":\"0.3.0\"}},\"from\":\"request@~2.27.0\",\"version\":\"2.27.0\"},\"w3cjs\":{\"dependencies\":{\"commander\":{\"from\":\"commander@2.0.x\",\"version\":\"2.0.0\"},\"superagent\":{\"dependencies\":{\"cookiejar\":{\"from\":\"cookiejar@1.3.0\",\"version\":\"1.3.0\"},\"debug\":{\"from\":\"debug@~0.7.2\",\"version\":\"0.7.4\"},\"emitter-component\":{\"from\":\"emitter-component@1.0.0\",\"version\":\"1.0.0\"},\"formidable\":{\"from\":\"formidable@1.0.14\",\"version\":\"1.0.14\"},\"methods\":{\"from\":\"methods@0.0.1\",\"version\":\"0.0.1\"},\"mime\":{\"from\":\"mime@1.2.5\",\"version\":\"1.2.5\"},\"qs\":{\"from\":\"qs@0.6.5\",\"version\":\"0.6.5\"},\"reduce-component\":{\"from\":\"reduce-component@1.0.1\",\"version\":\"1.0.1\"}},\"from\":\"superagent@~0.15.7\",\"version\":\"0.15.7\"},\"superagent-proxy\":{\"dependencies\":{\"proxy-agent\":{\"dependencies\":{\"http-proxy-agent\":{\"dependencies\":{\"agent-base\":{\"from\":\"agent-base@~1.0.1\",\"version\":\"1.0.1\"},\"debug\":{\"from\":\"debug@~0.7.2\",\"version\":\"0.7.4\"},\"extend\":{\"from\":\"extend@~1.2.0\",\"version\":\"1.2.1\"}},\"from\":\"http-proxy-agent@0\",\"version\":\"0.2.4\"},\"https-proxy-agent\":{\"dependencies\":{\"agent-base\":{\"from\":\"agent-base@~1.0.1\",\"version\":\"1.0.1\"},\"debug\":{\"from\":\"debug@~0.7.2\",\"version\":\"0.7.4\"},\"extend\":{\"from\":\"extend@~1.2.0\",\"version\":\"1.2.1\"}},\"from\":\"https-proxy-agent@0\",\"version\":\"0.3.3\"},\"lru-cache\":{\"from\":\"lru-cache@~2.3.1\",\"version\":\"2.3.1\"},\"socks-proxy-agent\":{\"dependencies\":{\"agent-base\":{\"from\":\"agent-base@~1.0.1\",\"version\":\"1.0.1\"},\"extend\":{\"from\":\"extend@~1.2.0\",\"version\":\"1.2.1\"},\"rainbowsocks\":{\"dependencies\":{\"debug\":{\"from\":\"debug@~0.7.2\",\"version\":\"0.7.4\"}},\"from\":\"rainbowsocks@~0.1.0\",\"version\":\"0.1.1\"}},\"from\":\"socks-proxy-agent@0\",\"version\":\"0.1.0\"}},\"from\":\"proxy-agent@~0.0.2\",\"version\":\"0.0.2\"}},\"from\":\"superagent-proxy@~0.2.0\",\"version\":\"0.2.0\"}},\"from\":\"w3cjs@~0.1.22\",\"version\":\"0.1.24\"}},\"from\":\"grunt-html-validation@~0.1.13\",\"version\":\"0.1.13\"},\"grunt-jekyll\":{\"dependencies\":{\"tmp\":{\"from\":\"tmp@0.0.21\",\"version\":\"0.0.21\"}},\"from\":\"grunt-jekyll@~0.4.1\",\"version\":\"0.4.1\"},\"grunt-jscs-checker\":{\"dependencies\":{\"hooker\":{\"from\":\"hooker@0.2.3\",\"version\":\"0.2.3\"},\"jscs\":{\"dependencies\":{\"colors\":{\"from\":\"colors@0.6.0-1\",\"resolved\":\"https://registry.npmjs.org/colors/-/colors-0.6.0-1.tgz\",\"version\":\"0.6.0-1\"},\"commander\":{\"dependencies\":{\"keypress\":{\"from\":\"keypress@0.1.x\",\"version\":\"0.1.0\"}},\"from\":\"commander@1.2.0\",\"version\":\"1.2.0\"},\"esprima\":{\"from\":\"esprima@1.0.3\",\"version\":\"1.0.3\"},\"glob\":{\"dependencies\":{\"inherits\":{\"from\":\"inherits@2\",\"version\":\"2.0.1\"}},\"from\":\"glob@3.2.7\",\"version\":\"3.2.7\"},\"minimatch\":{\"dependencies\":{\"lru-cache\":{\"from\":\"lru-cache@2\",\"version\":\"2.5.0\"},\"sigmund\":{\"from\":\"sigmund@~1.0.0\",\"version\":\"1.0.0\"}},\"from\":\"minimatch@0.2.12\",\"version\":\"0.2.12\"},\"vow\":{\"from\":\"vow@0.3.9\",\"version\":\"0.3.9\"},\"vow-fs\":{\"dependencies\":{\"node-uuid\":{\"from\":\"node-uuid@1.4.0\",\"version\":\"1.4.0\"},\"vow-queue\":{\"from\":\"vow-queue@0.0.2\",\"version\":\"0.0.2\"}},\"from\":\"vow-fs@0.2.3\",\"version\":\"0.2.3\"},\"xmlbuilder\":{\"dependencies\":{\"underscore\":{\"from\":\"underscore@>=1.5.x\",\"version\":\"1.6.0\"}},\"from\":\"xmlbuilder@1.1.2\",\"version\":\"1.1.2\"}},\"from\":\"jscs@~1.2.0\",\"version\":\"1.2.4\"},\"lodash.assign\":{\"dependencies\":{\"lodash._basecreatecallback\":{\"dependencies\":{\"lodash._setbinddata\":{\"dependencies\":{\"lodash._isnative\":{\"from\":\"lodash._isnative@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.noop\":{\"from\":\"lodash.noop@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash._setbinddata@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.bind\":{\"dependencies\":{\"lodash._createwrapper\":{\"dependencies\":{\"lodash._basebind\":{\"dependencies\":{\"lodash._basecreate\":{\"dependencies\":{\"lodash._isnative\":{\"from\":\"lodash._isnative@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.noop\":{\"from\":\"lodash.noop@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash._basecreate@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.isobject\":{\"from\":\"lodash.isobject@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash._basebind@~2.4.1\",\"version\":\"2.4.1\"},\"lodash._basecreatewrapper\":{\"dependencies\":{\"lodash._basecreate\":{\"dependencies\":{\"lodash._isnative\":{\"from\":\"lodash._isnative@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.noop\":{\"from\":\"lodash.noop@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash._basecreate@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.isobject\":{\"from\":\"lodash.isobject@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash._basecreatewrapper@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.isfunction\":{\"from\":\"lodash.isfunction@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash._createwrapper@~2.4.1\",\"version\":\"2.4.1\"},\"lodash._slice\":{\"from\":\"lodash._slice@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash.bind@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.identity\":{\"from\":\"lodash.identity@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.support\":{\"dependencies\":{\"lodash._isnative\":{\"from\":\"lodash._isnative@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash.support@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash._basecreatecallback@~2.4.1\",\"version\":\"2.4.1\"},\"lodash._objecttypes\":{\"from\":\"lodash._objecttypes@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.keys\":{\"dependencies\":{\"lodash._isnative\":{\"from\":\"lodash._isnative@~2.4.1\",\"version\":\"2.4.1\"},\"lodash._shimkeys\":{\"from\":\"lodash._shimkeys@~2.4.1\",\"version\":\"2.4.1\"},\"lodash.isobject\":{\"from\":\"lodash.isobject@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash.keys@~2.4.1\",\"version\":\"2.4.1\"}},\"from\":\"lodash.assign@2.4.1\",\"version\":\"2.4.1\"},\"vow\":{\"from\":\"vow@0.4.0\",\"version\":\"0.4.0\"}},\"from\":\"grunt-jscs-checker@~0.3.0\",\"version\":\"0.3.2\"},\"grunt-saucelabs\":{\"dependencies\":{\"colors\":{\"from\":\"colors@~0.6.2\",\"version\":\"0.6.2\"},\"lodash\":{\"from\":\"lodash@~2.4.1\",\"version\":\"2.4.1\"},\"q\":{\"from\":\"q@~1.0.0\",\"version\":\"1.0.0\"},\"request\":{\"dependencies\":{\"aws-sign2\":{\"from\":\"aws-sign2@~0.5.0\",\"version\":\"0.5.0\"},\"forever-agent\":{\"from\":\"forever-agent@~0.5.0\",\"version\":\"0.5.2\"},\"form-data\":{\"dependencies\":{\"async\":{\"from\":\"async@~0.2.9\",\"version\":\"0.2.10\"},\"combined-stream\":{\"dependencies\":{\"delayed-stream\":{\"from\":\"delayed-stream@0.0.5\",\"version\":\"0.0.5\"}},\"from\":\"combined-stream@~0.0.4\",\"version\":\"0.0.4\"}},\"from\":\"form-data@~0.1.0\",\"version\":\"0.1.2\"},\"hawk\":{\"dependencies\":{\"boom\":{\"from\":\"boom@0.4.x\",\"version\":\"0.4.2\"},\"cryptiles\":{\"from\":\"cryptiles@0.2.x\",\"version\":\"0.2.2\"},\"hoek\":{\"from\":\"hoek@0.9.x\",\"version\":\"0.9.1\"},\"sntp\":{\"from\":\"sntp@0.2.x\",\"version\":\"0.2.4\"}},\"from\":\"hawk@~1.0.0\",\"version\":\"1.0.0\"},\"http-signature\":{\"dependencies\":{\"asn1\":{\"from\":\"asn1@0.1.11\",\"version\":\"0.1.11\"},\"assert-plus\":{\"from\":\"assert-plus@0.1.2\",\"version\":\"0.1.2\"},\"ctype\":{\"from\":\"ctype@0.5.2\",\"version\":\"0.5.2\"}},\"from\":\"http-signature@~0.10.0\",\"version\":\"0.10.0\"},\"json-stringify-safe\":{\"from\":\"json-stringify-safe@~5.0.0\",\"version\":\"5.0.0\"},\"mime\":{\"from\":\"mime@~1.2.9\",\"version\":\"1.2.11\"},\"node-uuid\":{\"from\":\"node-uuid@~1.4.0\",\"version\":\"1.4.1\"},\"oauth-sign\":{\"from\":\"oauth-sign@~0.3.0\",\"version\":\"0.3.0\"},\"qs\":{\"from\":\"qs@~0.6.0\",\"version\":\"0.6.6\"},\"tough-cookie\":{\"dependencies\":{\"punycode\":{\"from\":\"punycode@>=0.2.0\",\"version\":\"1.2.3\"}},\"from\":\"tough-cookie@>=0.12.0\",\"version\":\"0.12.1\"},\"tunnel-agent\":{\"from\":\"tunnel-agent@~0.3.0\",\"version\":\"0.3.0\"}},\"from\":\"request@~2.33.0\",\"version\":\"2.33.0\"},\"sauce-tunnel\":{\"dependencies\":{\"request\":{\"dependencies\":{\"aws-sign\":{\"from\":\"aws-sign@~0.3.0\",\"version\":\"0.3.0\"},\"cookie-jar\":{\"from\":\"cookie-jar@~0.3.0\",\"version\":\"0.3.0\"},\"forever-agent\":{\"from\":\"forever-agent@~0.5.0\",\"version\":\"0.5.2\"},\"form-data\":{\"dependencies\":{\"async\":{\"from\":\"async@~0.2.7\",\"version\":\"0.2.10\"},\"combined-stream\":{\"dependencies\":{\"delayed-stream\":{\"from\":\"delayed-stream@0.0.5\",\"version\":\"0.0.5\"}},\"from\":\"combined-stream@~0.0.4\",\"version\":\"0.0.4\"}},\"from\":\"form-data@0.0.8\",\"version\":\"0.0.8\"},\"hawk\":{\"dependencies\":{\"boom\":{\"dependencies\":{\"hoek\":{\"from\":\"hoek@0.9.x\",\"version\":\"0.9.1\"}},\"from\":\"boom@0.4.x\",\"version\":\"0.4.2\"},\"cryptiles\":{\"from\":\"cryptiles@0.2.x\",\"version\":\"0.2.2\"},\"hoek\":{\"from\":\"hoek@0.8.x\",\"version\":\"0.8.5\"},\"sntp\":{\"dependencies\":{\"hoek\":{\"from\":\"hoek@0.9.x\",\"version\":\"0.9.1\"}},\"from\":\"sntp@0.2.x\",\"version\":\"0.2.4\"}},\"from\":\"hawk@~0.13.0\",\"version\":\"0.13.1\"},\"http-signature\":{\"dependencies\":{\"asn1\":{\"from\":\"asn1@0.1.11\",\"version\":\"0.1.11\"},\"assert-plus\":{\"from\":\"assert-plus@0.1.2\",\"version\":\"0.1.2\"},\"ctype\":{\"from\":\"ctype@0.5.2\",\"version\":\"0.5.2\"}},\"from\":\"http-signature@~0.9.11\",\"version\":\"0.9.11\"},\"json-stringify-safe\":{\"from\":\"json-stringify-safe@~4.0.0\",\"version\":\"4.0.0\"},\"mime\":{\"from\":\"mime@~1.2.9\",\"version\":\"1.2.11\"},\"node-uuid\":{\"from\":\"node-uuid@~1.4.0\",\"version\":\"1.4.1\"},\"oauth-sign\":{\"from\":\"oauth-sign@~0.3.0\",\"version\":\"0.3.0\"},\"qs\":{\"from\":\"qs@~0.6.0\",\"version\":\"0.6.6\"},\"tunnel-agent\":{\"from\":\"tunnel-agent@~0.3.0\",\"version\":\"0.3.0\"}},\"from\":\"request@~2.21.0\",\"version\":\"2.21.0\"}},\"from\":\"sauce-tunnel@~1.1.1\",\"version\":\"1.1.2\"},\"saucelabs\":{\"from\":\"saucelabs@~0.1.1\",\"version\":\"0.1.1\"}},\"from\":\"grunt-saucelabs@~5.0.0\",\"version\":\"5.0.1\"},\"grunt-sed\":{\"dependencies\":{\"replace\":{\"dependencies\":{\"colors\":{\"from\":\"colors@0.5.x\",\"version\":\"0.5.1\"},\"minimatch\":{\"dependencies\":{\"lru-cache\":{\"from\":\"lru-cache@2\",\"version\":\"2.5.0\"},\"sigmund\":{\"from\":\"sigmund@~1.0.0\",\"version\":\"1.0.0\"}},\"from\":\"minimatch@~0.2.9\",\"version\":\"0.2.14\"},\"nomnom\":{\"dependencies\":{\"underscore\":{\"from\":\"underscore@~1.4.4\",\"version\":\"1.4.4\"}},\"from\":\"nomnom@1.6.x\",\"version\":\"1.6.2\"}},\"from\":\"replace@~0.2.4\",\"version\":\"0.2.9\"}},\"from\":\"grunt-sed@~0.1.1\",\"version\":\"0.1.1\"},\"load-grunt-tasks\":{\"dependencies\":{\"findup-sync\":{\"dependencies\":{\"glob\":{\"dependencies\":{\"graceful-fs\":{\"from\":\"graceful-fs@~1.2.0\",\"version\":\"1.2.3\"},\"inherits\":{\"from\":\"inherits@1\",\"version\":\"1.0.0\"},\"minimatch\":{\"dependencies\":{\"lru-cache\":{\"from\":\"lru-cache@2\",\"version\":\"2.5.0\"},\"sigmund\":{\"from\":\"sigmund@~1.0.0\",\"version\":\"1.0.0\"}},\"from\":\"minimatch@~0.2.11\",\"version\":\"0.2.14\"}},\"from\":\"glob@~3.1.21\",\"version\":\"3.1.21\"},\"lodash\":{\"from\":\"lodash@~1.0.1\",\"version\":\"1.0.1\"}},\"from\":\"findup-sync@~0.1.2\",\"version\":\"0.1.2\"},\"globule\":{\"dependencies\":{\"glob\":{\"dependencies\":{\"inherits\":{\"from\":\"inherits@2\",\"version\":\"2.0.1\"}},\"from\":\"glob@~3.2.7\",\"version\":\"3.2.8\"},\"lodash\":{\"from\":\"lodash@~2.4.1\",\"version\":\"2.4.1\"},\"minimatch\":{\"dependencies\":{\"lru-cache\":{\"from\":\"lru-cache@2\",\"version\":\"2.5.0\"},\"sigmund\":{\"from\":\"sigmund@~1.0.0\",\"version\":\"1.0.0\"}},\"from\":\"minimatch@~0.2.9\",\"version\":\"0.2.14\"}},\"from\":\"globule@~0.2.0\",\"version\":\"0.2.0\"}},\"from\":\"load-grunt-tasks@~0.3.0\",\"version\":\"0.3.0\"},\"markdown\":{\"dependencies\":{\"nopt\":{\"dependencies\":{\"abbrev\":{\"from\":\"abbrev@1\",\"version\":\"1.0.4\"}},\"from\":\"nopt@~2.1.1\",\"version\":\"2.1.2\"}},\"from\":\"markdown@~0.5.0\",\"version\":\"0.5.0\"}},\"name\":\"bootstrap\",\"version\":\"3.1.1\"}"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/test-infra/requirements.txt",
    "content": "boto==2.20.0\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/test-infra/s3_cache.py",
    "content": "#!/usr/bin/env python2.7\nfrom __future__ import absolute_import, unicode_literals, print_function, division\n\nfrom sys import argv\nfrom os import environ, stat, remove as _delete_file\nfrom os.path import isfile, dirname, basename, abspath\nfrom hashlib import sha256\nfrom subprocess import check_call as run\n\nfrom boto.s3.connection import S3Connection\nfrom boto.s3.key import Key\nfrom boto.exception import S3ResponseError\n\n\nNEED_TO_UPLOAD_MARKER = '.need-to-upload'\nBYTES_PER_MB = 1024 * 1024\ntry:\n    BUCKET_NAME = environ['TWBS_S3_BUCKET']\nexcept KeyError:\n    raise SystemExit(\"TWBS_S3_BUCKET environment variable not set!\")\n\n\ndef _sha256_of_file(filename):\n    hasher = sha256()\n    with open(filename, 'rb') as input_file:\n        hasher.update(input_file.read())\n    file_hash = hasher.hexdigest()\n    print('sha256({}) = {}'.format(filename, file_hash))\n    return file_hash\n\n\ndef _delete_file_quietly(filename):\n    try:\n        _delete_file(filename)\n    except (OSError, IOError):\n        pass\n\n\ndef _tarball_size(directory):\n    kib = stat(_tarball_filename_for(directory)).st_size // BYTES_PER_MB\n    return \"{} MiB\".format(kib)\n\n\ndef _tarball_filename_for(directory):\n    return abspath('./{}.tar.gz'.format(basename(directory)))\n\n\ndef _create_tarball(directory):\n    print(\"Creating tarball of {}...\".format(directory))\n    run(['tar', '-czf', _tarball_filename_for(directory), '-C', dirname(directory), basename(directory)])\n\n\ndef _extract_tarball(directory):\n    print(\"Extracting tarball of {}...\".format(directory))\n    run(['tar', '-xzf', _tarball_filename_for(directory), '-C', dirname(directory)])\n\n\ndef download(directory):\n    _delete_file_quietly(NEED_TO_UPLOAD_MARKER)\n    try:\n        print(\"Downloading {} tarball from S3...\".format(friendly_name))\n        key.get_contents_to_filename(_tarball_filename_for(directory))\n    except S3ResponseError as err:\n        open(NEED_TO_UPLOAD_MARKER, 'a').close()\n        print(err)\n        raise SystemExit(\"Cached {} download failed!\".format(friendly_name))\n    print(\"Downloaded {}.\".format(_tarball_size(directory)))\n    _extract_tarball(directory)\n    print(\"{} successfully installed from cache.\".format(friendly_name))\n\n\ndef upload(directory):\n    _create_tarball(directory)\n    print(\"Uploading {} tarball to S3... ({})\".format(friendly_name, _tarball_size(directory)))\n    key.set_contents_from_filename(_tarball_filename_for(directory))\n    print(\"{} cache successfully updated.\".format(friendly_name))\n    _delete_file_quietly(NEED_TO_UPLOAD_MARKER)\n\n\nif __name__ == '__main__':\n    # Uses environment variables:\n    #   AWS_ACCESS_KEY_ID -- AWS Access Key ID\n    #   AWS_SECRET_ACCESS_KEY -- AWS Secret Access Key\n    argv.pop(0)\n    if len(argv) != 4:\n        raise SystemExit(\"USAGE: s3_cache.py <download | upload> <friendly name> <dependencies file> <directory>\")\n    mode, friendly_name, dependencies_file, directory = argv\n\n    conn = S3Connection()\n    bucket = conn.lookup(BUCKET_NAME, validate=False)\n    if bucket is None:\n        raise SystemExit(\"Could not access bucket!\")\n\n    dependencies_file_hash = _sha256_of_file(dependencies_file)\n\n    key = Key(bucket, dependencies_file_hash)\n    key.storage_class = 'REDUCED_REDUNDANCY'\n\n    if mode == 'download':\n        download(directory)\n    elif mode == 'upload':\n        if isfile(NEED_TO_UPLOAD_MARKER):  # FIXME\n            upload(directory)\n        else:\n            print(\"No need to upload anything.\")\n    else:\n        raise SystemExit(\"Unrecognized mode {!r}\".format(mode))\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/test-infra/sauce_browsers.yml",
    "content": "[\n  # Docs: https://saucelabs.com/docs/platforms/webdriver\n\n  {\n    browserName: \"safari\",\n    platform: \"OS X 10.9\"\n  },\n  # {\n  #   browserName: \"googlechrome\",\n  #   platform: \"OS X 10.9\",\n  #   version: \"31\"\n  # },\n  {\n    browserName: \"firefox\",\n    platform: \"OS X 10.9\"\n  },\n\n  # Mac Opera not currently supported by Sauce Labs\n\n  {\n    browserName: \"internet explorer\",\n    version: \"11\",\n    platform: \"Windows 8.1\"\n  },\n  {\n    browserName: \"internet explorer\",\n    version: \"10\",\n    platform: \"Windows 8\"\n  },\n  # {\n  #   browserName: \"internet explorer\",\n  #   version: \"9\",\n  #   platform: \"Windows 7\"\n  # },\n  # {\n  #   browserName: \"internet explorer\",\n  #   version: \"8\",\n  #   platform: \"Windows 7\"\n  # },\n\n  # { # Unofficial\n  #   browserName: \"internet explorer\",\n  #   version: \"7\",\n  #   platform: \"Windows XP\"\n  # },\n\n  {\n    browserName: \"googlechrome\",\n    platform: \"Windows 8.1\"\n  },\n  {\n    browserName: \"firefox\",\n    platform: \"Windows 8.1\"\n  },\n\n  # Win Opera 15+ not currently supported by Sauce Labs\n\n  {\n    browserName: \"iphone\",\n    platform: \"OS X 10.9\",\n    version: \"7\"\n  },\n\n  # iOS Chrome not currently supported by Sauce Labs\n\n  # Linux (unofficial)\n  {\n    browserName: \"googlechrome\",\n    platform: \"Linux\"\n  },\n  {\n    browserName: \"firefox\",\n    platform: \"Linux\"\n  }\n\n  # Android Chrome not currently supported by Sauce Labs\n\n  # { # Android Browser (super-unofficial)\n  #   browserName: \"android\",\n  #   version: \"4.0\",\n  #   platform: \"Linux\"\n  # }\n]\n"
  },
  {
    "path": "maverix-theme/bower_components/bootstrap/test-infra/uncached-npm-install.sh",
    "content": "#!/bin/bash\ncp test-infra/npm-shrinkwrap.canonical.json npm-shrinkwrap.json\nnpm install\nrm npm-shrinkwrap.json\n"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/.bower.json",
    "content": "{\n  \"name\": \"css-toggle-switch\",\n  \"version\": \"2.1.5\",\n  \"main\": \"./dist/toggle-switch.css\",\n  \"author\": \"Ionut Colceriu\",\n  \"ignore\": [\n    \"**/docs/\",\n    \"node_modules/\",\n    \"bower_components/\",\n    \".sass-cache\",\n    \".gitignore\",\n    \"npm-debug.log\",\n    \"*.html\",\n    \"CHANGELOG.md\",\n    \"Gruntfile.js\",\n    \"component.json\",\n    \"package.json\"\n  ],\n  \"devDependencies\": {\n    \"bootstrap\": \"~3\",\n    \"foundation\": \"~5\",\n    \"normalize-css\": \"~2\",\n    \"bourbon\": \"~3\",\n    \"qunit\": \"~1\",\n    \"prism\": \"gh-pages\"\n  },\n  \"homepage\": \"https://github.com/ghinda/css-toggle-switch\",\n  \"_release\": \"2.1.5\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v2.1.5\",\n    \"commit\": \"b2d99093d6ce82b0421d002538d0f68aecfdfbf8\"\n  },\n  \"_source\": \"git://github.com/ghinda/css-toggle-switch.git\",\n  \"_target\": \"~2.1.5\",\n  \"_originalSource\": \"css-toggle-switch\",\n  \"_direct\": true\n}"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/.bowerrc",
    "content": "{\n\t\"directory\": \"bower_components\"\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/.travis.yml",
    "content": "language: node_js\nnode_js:\n    - \"0.8\"\n"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/LICENSE.txt",
    "content": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or\ndistribute this software, either in source code form or as a compiled\nbinary, for any purpose, commercial or non-commercial, and by any\nmeans.\n\nIn jurisdictions that recognize copyright laws, the author or authors\nof this software dedicate any and all copyright interest in the\nsoftware to the public domain. We make this dedication for the benefit\nof the public at large and to the detriment of our heirs and\nsuccessors. We intend this dedication to be an overt act of\nrelinquishment in perpetuity of all present and future rights to this\nsoftware under copyright law.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\nOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\nFor more information, please refer to <http://unlicense.org/>"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/README.md",
    "content": "# CSS Toggle Switch\n\n[![Build Status](https://travis-ci.org/ghinda/css-toggle-switch.png)](https://travis-ci.org/ghinda/css-toggle-switch)\n\nCSS Toggle Switches are a set of accessible CSS-only *switch* components, created from standard form controls in the markup.\n\nYou can use them standalone, or with [Bootstrap](http://getbootstrap.com/) or [Foundation](http://foundation.zurb.com/).\n\n## Install\n\nDownload from the [project page](http://ghinda.net/css-toggle-switch/).\n\nInstall with [Bower](http://bower.io/): `bower install --save css-toggle-switch`\n\nInstall with [Component(1)](http://component.io/): `component install ghinda/css-toggle-switch`\n\n\n## How to use it\n\nJust include `toggle-switch.css`, and use the markup from the [documentation](http://ghinda.net/css-toggle-switch/).\n\n\n## Switches\n\n### Light switch\n\nUse the light switch, instead of a checkbox, for simple *On/Off* options.\n\n### Toggle switch\n\nUse the toggle switches, instead of radio buttons, for two or more, specific options.\n\n\n## Browser support\n\nThe toggle switches work on all modern browsers, including mobile ones(even proxy-browsers like Opera Mini).\n\n**Browsers without support for media-queries, such as IE8 and bellow, get standard form elements.**\n\nThe `onclick=\"\"` attribute is required for older iOS and Opera Mini support.\n\n## Development\n\nYou'll need Grunt:\n\n\tgrunt server\n\nThen\n\n\thttp://localhost:9000/\n\n## Acknowledgements\n\nCSS Toggle Switches is a project by [Ionuț Colceriu](http://ghinda.net).\n\n* Standalone themes are based on [Sort Switches / Toggles by Orman Clark](http://www.premiumpixels.com/freebies/sort-switches-toggles-psd/), [iOS 7](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/UIKitUICatalog/UISwitch.html) and [Android](https://developer.android.com/design/building-blocks/switches.html).\n* iOS label tap issue and fix reported by [scruffian](https://github.com/scruffian).\n"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/bower.json",
    "content": "{\n\t\"name\": \"css-toggle-switch\",\n\t\"version\": \"2.1.4\",\n\t\"main\": \"./dist/toggle-switch.css\",\n\t\"author\": \"Ionut Colceriu\",\n\t\"ignore\": [\n\t\t\"**/docs/\",\n\t\t\"node_modules/\",\n\t\t\"bower_components/\",\n\t\t\".sass-cache\",\n\t\t\".gitignore\",\n\t\t\"npm-debug.log\",\n\t\t\"*.html\",\n\t\t\"CHANGELOG.md\",\n\t\t\"Gruntfile.js\",\n\t\t\"component.json\",\n\t\t\"package.json\"\n\t],\n\t\"devDependencies\": {\n\t\t\"bootstrap\": \"~3\",\n\t\t\"foundation\": \"~5\",\n\t\t\"normalize-css\": \"~2\",\n\t\t\"bourbon\": \"~3\",\n\t\t\"qunit\": \"~1\",\n\t\t\"prism\": \"gh-pages\"\n\t}\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/dist/toggle-switch.css",
    "content": "/*\n * CSS TOGGLE SWITCHES\n * Unlicense\n *\n * Ionuț Colceriu - ghinda.net\n * https://github.com/ghinda/css-toggle-switch\n *\n */\n/* Toggle Switches\n */\n/* Shared\n */\n/* Checkbox\n */\n/* Radio Switch\n */\n/* Hide by default\n */\n.switch-toggle a, .switch-light span span {\n  display: none; }\n\n/* We can't test for a specific feature,\n * so we only target browsers with support for media queries.\n */\n@media only screen {\n  /* Checkbox switch\n\t */\n  /* Radio switch\n\t */\n  /* Standalone Themes */\n  /* Candy Theme\n\t * Based on the \"Sort Switches / Toggles (PSD)\" by Ormal Clarck\n\t * http://www.premiumpixels.com/freebies/sort-switches-toggles-psd/\n\t */\n  /* Android Theme\n\t */\n  /* iOS Theme\n\t */\n  .switch-light {\n    display: block;\n    height: 30px;\n    /* Outline the toggles when the inputs are focused\n\t */\n    position: relative;\n    overflow: visible;\n    padding: 0;\n    margin-left: 100px;\n    /* Position the label over all the elements, except the slide-button (<a>)\n\t * Clicking anywhere on the label will change the switch-state\n\t */\n    /* Don't hide the input from screen-readers and keyboard access\n\t */ }\n    .switch-light * {\n      -webkit-box-sizing: border-box;\n      -moz-box-sizing: border-box;\n      box-sizing: border-box; }\n    .switch-light a {\n      display: block;\n      -webkit-transition: all 0.05s ease-out;\n      -moz-transition: all 0.05s ease-out;\n      transition: all 0.05s ease-out; }\n    .switch-light label, .switch-light > span {\n      line-height: 30px;\n      vertical-align: middle; }\n    .switch-light input:focus ~ a, .switch-light input:focus + label {\n      outline: 1px dotted #888888; }\n    .switch-light label {\n      position: relative;\n      z-index: 3;\n      display: block;\n      width: 100%; }\n    .switch-light input {\n      position: absolute;\n      opacity: 0;\n      z-index: 5; }\n      .switch-light input:checked ~ a {\n        right: 0%; }\n    .switch-light > span {\n      position: absolute;\n      left: -100px;\n      width: 100%;\n      margin: 0;\n      padding-right: 100px;\n      text-align: left; }\n      .switch-light > span span {\n        position: absolute;\n        top: 0;\n        left: 0;\n        z-index: 5;\n        display: block;\n        width: 50%;\n        margin-left: 100px;\n        text-align: center; }\n        .switch-light > span span:last-child {\n          left: 50%; }\n    .switch-light a {\n      position: absolute;\n      right: 50%;\n      top: 0;\n      z-index: 4;\n      display: block;\n      width: 50%;\n      height: 100%;\n      padding: 0; }\n  .switch-toggle {\n    display: block;\n    height: 30px;\n    /* Outline the toggles when the inputs are focused\n\t */\n    position: relative;\n    /* For callout panels in foundation\n\t */\n    padding: 0 !important;\n    /* Generate styles for the multiple states */ }\n    .switch-toggle * {\n      -webkit-box-sizing: border-box;\n      -moz-box-sizing: border-box;\n      box-sizing: border-box; }\n    .switch-toggle a {\n      display: block;\n      -webkit-transition: all 0.05s ease-out;\n      -moz-transition: all 0.05s ease-out;\n      transition: all 0.05s ease-out; }\n    .switch-toggle label, .switch-toggle > span {\n      line-height: 30px;\n      vertical-align: middle; }\n    .switch-toggle input:focus ~ a, .switch-toggle input:focus + label {\n      outline: 1px dotted #888888; }\n    .switch-toggle input {\n      position: absolute;\n      opacity: 0; }\n    .switch-toggle input + label {\n      position: relative;\n      z-index: 2;\n      float: left;\n      width: 50%;\n      height: 100%;\n      margin: 0;\n      text-align: center; }\n    .switch-toggle a {\n      position: absolute;\n      top: 0;\n      left: 0;\n      padding: 0;\n      z-index: 1;\n      width: 50%;\n      height: 100%; }\n    .switch-toggle input:last-of-type:checked ~ a {\n      left: 50%; }\n    .switch-toggle.switch-3 label, .switch-toggle.switch-3 a {\n      width: 33.33333%; }\n    .switch-toggle.switch-3 input:checked:nth-of-type(2) ~ a {\n      left: 33.33333%; }\n    .switch-toggle.switch-3 input:checked:last-of-type ~ a {\n      left: 66.66667%; }\n    .switch-toggle.switch-4 label, .switch-toggle.switch-4 a {\n      width: 25%; }\n    .switch-toggle.switch-4 input:checked:nth-of-type(2) ~ a {\n      left: 25%; }\n    .switch-toggle.switch-4 input:checked:nth-of-type(3) ~ a {\n      left: 50%; }\n    .switch-toggle.switch-4 input:checked:last-of-type ~ a {\n      left: 75%; }\n    .switch-toggle.switch-5 label, .switch-toggle.switch-5 a {\n      width: 20%; }\n    .switch-toggle.switch-5 input:checked:nth-of-type(2) ~ a {\n      left: 20%; }\n    .switch-toggle.switch-5 input:checked:nth-of-type(3) ~ a {\n      left: 40%; }\n    .switch-toggle.switch-5 input:checked:nth-of-type(4) ~ a {\n      left: 60%; }\n    .switch-toggle.switch-5 input:checked:last-of-type ~ a {\n      left: 80%; }\n  .switch-candy {\n    background-color: #2d3035;\n    border-radius: 3px;\n    color: white;\n    font-weight: bold;\n    text-align: center;\n    text-shadow: 1px 1px 1px #191b1e;\n    box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); }\n    .switch-candy label {\n      color: white;\n      -webkit-transition: color 0.2s ease-out;\n      -moz-transition: color 0.2s ease-out;\n      transition: color 0.2s ease-out; }\n    .switch-candy input:checked + label {\n      color: #333333;\n      text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); }\n    .switch-candy a {\n      border: 1px solid #333333;\n      background-color: #70c66b;\n      border-radius: 3px;\n      background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0));\n      background-image: linear-gradient(to  bottom, rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0));\n      box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), inset 0 1px 1px rgba(255, 255, 255, 0.45); }\n    .switch-candy > span {\n      color: #333333;\n      text-shadow: none; }\n    .switch-candy span {\n      color: white; }\n    .switch-candy.switch-candy-blue a {\n      background-color: #38a3d4; }\n    .switch-candy.switch-candy-yellow a {\n      background-color: #f5e560; }\n  .switch-android {\n    background-color: #464747;\n    border-radius: 1px;\n    color: white;\n    box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0;\n    /* Selected ON switch-light\n\t\t */ }\n    .switch-android label {\n      color: white; }\n    .switch-android > span span {\n      opacity: 0;\n      -webkit-transition: all 0.05s;\n      -moz-transition: all 0.05s;\n      transition: all 0.05s; }\n      .switch-android > span span:first-of-type {\n        opacity: 1; }\n    .switch-android a {\n      background-color: #666666;\n      border-radius: 1px;\n      box-shadow: inset rgba(255, 255, 255, 0.2) 0 1px 0, inset rgba(0, 0, 0, 0.3) 0 -1px 0; }\n    .switch-android.switch-light input:checked ~ a {\n      background-color: #0e88b1; }\n    .switch-android.switch-light input:checked ~ span span:first-of-type {\n      opacity: 0; }\n    .switch-android.switch-light input:checked ~ span span:last-of-type {\n      opacity: 1; }\n    .switch-android.switch-toggle, .switch-android > span span {\n      font-size: 85%;\n      text-transform: uppercase; }\n  .switch-ios.switch-light {\n    color: #868686; }\n    .switch-ios.switch-light a {\n      left: 0;\n      width: 30px;\n      background-color: white;\n      border: 1px solid lightgrey;\n      border-radius: 100%;\n      -webkit-transition: all 0.05s ease-out;\n      -moz-transition: all 0.05s ease-out;\n      transition: all 0.05s ease-out;\n      box-shadow: inset 0 -3px 3px rgba(0, 0, 0, 0.025), 0 1px 4px rgba(0, 0, 0, 0.15), 0 4px 4px rgba(0, 0, 0, 0.1); }\n    .switch-ios.switch-light > span span {\n      width: 100%;\n      left: 0;\n      opacity: 0; }\n      .switch-ios.switch-light > span span:first-of-type {\n        opacity: 1;\n        padding-left: 30px; }\n      .switch-ios.switch-light > span span:last-of-type {\n        padding-right: 30px; }\n    .switch-ios.switch-light > span:before {\n      content: '';\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      left: 100px;\n      top: 0;\n      background-color: #fafafa;\n      border: 1px solid lightgrey;\n      border-radius: 30px;\n      -webkit-transition: all 0.5s ease-out;\n      -moz-transition: all 0.5s ease-out;\n      transition: all 0.5s ease-out;\n      box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0; }\n    .switch-ios.switch-light input:checked ~ a {\n      left: 100%;\n      margin-left: -30px; }\n    .switch-ios.switch-light input:checked ~ span:before {\n      border-color: #53d76a;\n      box-shadow: inset 0 0 0 30px #53d76a; }\n    .switch-ios.switch-light input:checked ~ span span:first-of-type {\n      opacity: 0; }\n    .switch-ios.switch-light input:checked ~ span span:last-of-type {\n      opacity: 1;\n      color: white; }\n  .switch-ios.switch-toggle {\n    background-color: #fafafa;\n    border: 1px solid lightgrey;\n    border-radius: 30px;\n    box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0; }\n    .switch-ios.switch-toggle a {\n      background-color: #53d76a;\n      border-radius: 25px;\n      -webkit-transition: all 0.05s ease-out;\n      -moz-transition: all 0.05s ease-out;\n      transition: all 0.05s ease-out; }\n    .switch-ios.switch-toggle label {\n      color: #868686; }\n  .switch-ios input:checked + label {\n    color: #3a3a3a; } }\n\n/* Bugfix for older Webkit, including mobile Webkit. Adapted from\n * http://css-tricks.com/webkit-sibling-bug/\n */\n@media only screen and (-webkit-max-device-pixel-ratio: 2) and (max-device-width: 1280px) {\n  .switch-light, .switch-toggle {\n    -webkit-animation: webkitSiblingBugfix infinite 1s; } }\n\n@-webkit-keyframes webkitSiblingBugfix {\n  from {\n    -webkit-transform: translate3d(0, 0, 0); }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0); } }\n"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/src/toggle-switch.css",
    "content": "/*\n * CSS TOGGLE SWITCHES\n * Unlicense\n *\n * Ionuț Colceriu - ghinda.net\n * https://github.com/ghinda/css-toggle-switch\n *\n */\n/* Toggle Switches\n */\n/* Shared\n */\n/* Checkbox\n */\n/* Radio Switch\n */\n/* Hide by default\n */\n/* Variables\n */\n/* Mixins\n*/\n.switch-toggle a,\n.switch-light span span {\n  display: none;\n}\n/* We can't test for a specific feature,\n * so we only target browsers with support for media queries.\n */\n@media only screen {\n  /* Checkbox switch\n   */\n  /* Radio switch\n   */\n  /* Standalone Themes */\n  /* Candy Theme\n   * Based on the \"Sort Switches / Toggles (PSD)\" by Ormal Clarck\n   * http://www.premiumpixels.com/freebies/sort-switches-toggles-psd/\n   */\n  /* Android Theme\n   */\n  /* iOS Theme\n   */\n  .switch-light {\n    display: block;\n    height: 30px;\n    /* Outline the toggles when the inputs are focused\n   */\n    position: relative;\n    overflow: visible;\n    padding: 0;\n    margin-left: 100px;\n    /* Position the label over all the elements, except the slide-button (<a>)\n   * Clicking anywhere on the label will change the switch-state\n   */\n    /* Don't hide the input from screen-readers and keyboard access\n   */\n  }\n  .switch-light * {\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n  }\n  .switch-light a {\n    display: block;\n    -webkit-transition: all 0.3s ease-out;\n    -moz-transition: all 0.3s ease-out;\n    transition: all 0.3s ease-out;\n  }\n  .switch-light label,\n  .switch-light > span {\n    line-height: 30px;\n    vertical-align: middle;\n  }\n  .switch-light input:focus ~ a,\n  .switch-light input:focus + label {\n    outline: 1px dotted #888888;\n  }\n  .switch-light label {\n    position: relative;\n    top: static;\n    right: static;\n    left: static;\n    display: block;\n    width: 100%;\n    z-index: 3;\n  }\n  .switch-light input {\n    position: absolute;\n    top: static;\n    right: static;\n    left: static;\n    display: inherit;\n    width: auto;\n    z-index: 5;\n    opacity: 0;\n  }\n  .switch-light input:checked ~ a {\n    right: 0%;\n  }\n  .switch-light > span {\n    position: absolute;\n    top: static;\n    right: static;\n    left: -100px;\n    display: inherit;\n    width: 100%;\n    z-index: auto;\n    margin: 0;\n    padding-right: 100px;\n    text-align: left;\n  }\n  .switch-light > span span {\n    position: absolute;\n    top: 0;\n    right: static;\n    left: 0;\n    display: block;\n    width: 50%;\n    z-index: 5;\n    margin-left: 100px;\n    text-align: center;\n  }\n  .switch-light > span span:last-child {\n    left: 50%;\n  }\n  .switch-light a {\n    position: absolute;\n    top: 0;\n    right: 50%;\n    left: static;\n    display: block;\n    width: 50%;\n    z-index: 4;\n    height: 100%;\n    padding: 0;\n  }\n  .switch-toggle {\n    display: block;\n    height: 30px;\n    /* Outline the toggles when the inputs are focused\n   */\n    position: relative;\n    /* For callout panels in foundation\n   */\n    padding: 0 !important;\n    /* Generate styles for the multiple states */\n  }\n  .switch-toggle * {\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n  }\n  .switch-toggle a {\n    display: block;\n    -webkit-transition: all 0.3s ease-out;\n    -moz-transition: all 0.3s ease-out;\n    transition: all 0.3s ease-out;\n  }\n  .switch-toggle label,\n  .switch-toggle > span {\n    line-height: 30px;\n    vertical-align: middle;\n  }\n  .switch-toggle input:focus ~ a,\n  .switch-toggle input:focus + label {\n    outline: 1px dotted #888888;\n  }\n  .switch-toggle input {\n    position: absolute;\n    opacity: 0;\n  }\n  .switch-toggle input + label {\n    position: relative;\n    top: static;\n    right: static;\n    left: static;\n    display: inherit;\n    width: 50%;\n    z-index: 2;\n    float: left;\n    height: 100%;\n    margin: 0;\n    text-align: center;\n  }\n  .switch-toggle a {\n    position: absolute;\n    top: 0;\n    right: static;\n    left: 0;\n    display: inherit;\n    width: 50%;\n    z-index: 1;\n    padding: 0;\n    height: 100%;\n  }\n  .switch-toggle input:last-of-type:checked ~ a {\n    left: 50%;\n  }\n  .switch-toggle.switch-3 label,\n  .switch-toggle.switch-3 a {\n    width: 33.33333%;\n  }\n  .switch-toggle.switch-3 input:checked:nth-of-type(2) ~ a {\n    left: 33.33333%;\n  }\n  .switch-toggle.switch-3 input:checked:last-of-type ~ a {\n    left: 66.66667%;\n  }\n  .switch-toggle.switch-4 label,\n  .switch-toggle.switch-4 a {\n    width: 25%;\n  }\n  .switch-toggle.switch-4 input:checked:nth-of-type(2) ~ a {\n    left: 25%;\n  }\n  .switch-toggle.switch-4 input:checked:nth-of-type(3) ~ a {\n    left: 50%;\n  }\n  .switch-toggle.switch-4 input:checked:last-of-type ~ a {\n    left: 75%;\n  }\n  .switch-toggle.switch-5 label,\n  .switch-toggle.switch-5 a {\n    width: 20%;\n  }\n  .switch-toggle.switch-5 input:checked:nth-of-type(2) ~ a {\n    left: 20%;\n  }\n  .switch-toggle.switch-5 input:checked:nth-of-type(3) ~ a {\n    left: 40%;\n  }\n  .switch-toggle.switch-5 input:checked:nth-of-type(4) ~ a {\n    left: 60%;\n  }\n  .switch-toggle.switch-5 input:checked:last-of-type ~ a {\n    left: 80%;\n  }\n  .switch-candy {\n    background-color: #2d3035;\n    border: none;\n    border-radius: 3px;\n    -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2), 0;\n    -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2), 0;\n    box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2), 0;\n    color: #ffffff;\n    font-weight: bold;\n    text-align: center;\n    text-shadow: 1px 1px 1px #191b1e;\n  }\n  .switch-candy label {\n    color: #ffffff;\n    -webkit-transition: all 0.2s ease-out;\n    -moz-transition: all 0.2s ease-out;\n    transition: all 0.2s ease-out;\n  }\n  .switch-candy input:checked + label {\n    color: #333333;\n    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n  }\n  .switch-candy a {\n    background-color: #70c66b;\n    border: 1px solid #333333;\n    border-radius: 3px;\n    -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), inset 0 1px 1px rgba(255, 255, 255, 0.45), 0;\n    -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), inset 0 1px 1px rgba(255, 255, 255, 0.45), 0;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), inset 0 1px 1px rgba(255, 255, 255, 0.45), 0;\n    background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0));\n    background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0));\n  }\n  .switch-candy > span {\n    color: #333333;\n    text-shadow: none;\n  }\n  .switch-candy span {\n    color: #ffffff;\n  }\n  .switch-candy.switch-candy-blue a {\n    background-color: #38a3d4;\n  }\n  .switch-candy.switch-candy-yellow a {\n    background-color: #f5e560;\n  }\n  .switch-android {\n    background-color: #464747;\n    border: none;\n    border-radius: 1px;\n    -webkit-box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0, 0, 0;\n    -moz-box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0, 0, 0;\n    box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0, 0, 0;\n    color: #ffffff;\n    /* Selected ON switch-light\n     */\n  }\n  .switch-android label {\n    color: #ffffff;\n  }\n  .switch-android > span span {\n    opacity: 0;\n    -webkit-transition: all 0.1s ease-out;\n    -moz-transition: all 0.1s ease-out;\n    transition: all 0.1s ease-out;\n  }\n  .switch-android > span span:first-of-type {\n    opacity: 1;\n  }\n  .switch-android a {\n    background-color: #666666;\n    border: none;\n    border-radius: 1px;\n    -webkit-box-shadow: inset rgba(255, 255, 255, 0.2) 0 1px 0, inset rgba(0, 0, 0, 0.3) 0 -1px 0, 0;\n    -moz-box-shadow: inset rgba(255, 255, 255, 0.2) 0 1px 0, inset rgba(0, 0, 0, 0.3) 0 -1px 0, 0;\n    box-shadow: inset rgba(255, 255, 255, 0.2) 0 1px 0, inset rgba(0, 0, 0, 0.3) 0 -1px 0, 0;\n  }\n  .switch-android.switch-light input:checked ~ a {\n    background-color: #0e88b1;\n  }\n  .switch-android.switch-light input:checked ~ span span:first-of-type {\n    opacity: 0;\n  }\n  .switch-android.switch-light input:checked ~ span span:last-of-type {\n    opacity: 1;\n  }\n  .switch-android.switch-toggle,\n  .switch-android .switch-android > span span {\n    font-size: 85%;\n    text-transform: uppercase;\n  }\n  .switch-ios.switch-light {\n    color: #868686;\n  }\n  .switch-ios.switch-light a {\n    background-color: #ffffff;\n    border: 1px solid #d3d3d3;\n    border-radius: 100%;\n    -webkit-box-shadow: inset 0 -3px 3px rgba(0, 0, 0, 0.025), 0 1px 4px rgba(0, 0, 0, 0.15), 0 4px 4px rgba(0, 0, 0, 0.1);\n    -moz-box-shadow: inset 0 -3px 3px rgba(0, 0, 0, 0.025), 0 1px 4px rgba(0, 0, 0, 0.15), 0 4px 4px rgba(0, 0, 0, 0.1);\n    box-shadow: inset 0 -3px 3px rgba(0, 0, 0, 0.025), 0 1px 4px rgba(0, 0, 0, 0.15), 0 4px 4px rgba(0, 0, 0, 0.1);\n    left: 0;\n    width: 30px;\n    -webkit-transition: all 0.3s ease-out;\n    -moz-transition: all 0.3s ease-out;\n    transition: all 0.3s ease-out;\n  }\n  .switch-ios.switch-light > span span {\n    width: 100%;\n    left: 0;\n    opacity: 0;\n  }\n  .switch-ios.switch-light > span span:first-of-type {\n    opacity: 1;\n    padding-left: 30px;\n  }\n  .switch-ios.switch-light > span span:last-of-type {\n    padding-right: 30px;\n  }\n  .switch-ios.switch-light > span:before {\n    position: absolute;\n    top: 0;\n    right: static;\n    left: 100px;\n    display: block;\n    width: 100%;\n    z-index: inherit;\n    background-color: #fafafa;\n    border: 1px solid #d3d3d3;\n    border-radius: 30px;\n    -webkit-box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0, 0, 0;\n    -moz-box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0, 0, 0;\n    box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0, 0, 0;\n    content: '';\n    height: 100%;\n    -webkit-transition: all 0.5s ease-out;\n    -moz-transition: all 0.5s ease-out;\n    transition: all 0.5s ease-out;\n  }\n  .switch-ios.switch-light input:checked ~ a {\n    left: 100%;\n    margin-left: -30px;\n  }\n  .switch-ios.switch-light input:checked ~ span:before {\n    border-color: #53d76a;\n    box-shadow: inset 0 0 0 30px #53d76a;\n  }\n  .switch-ios.switch-light input:checked ~ span span:first-of-type {\n    opacity: 0;\n  }\n  .switch-ios.switch-light input:checked ~ span span:last-of-type {\n    opacity: 1;\n    color: #ffffff;\n  }\n  .switch-ios.switch-toggle {\n    background-color: #fafafa;\n    border: 1px solid #d3d3d3;\n    border-radius: 30px;\n    -webkit-box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0, 0, 0;\n    -moz-box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0, 0, 0;\n    box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0, 0, 0;\n  }\n  .switch-ios.switch-toggle a {\n    background-color: #53d76a;\n    border-radius: 25px;\n    -webkit-transition: all 0.3s ease-out;\n    -moz-transition: all 0.3s ease-out;\n    transition: all 0.3s ease-out;\n  }\n  .switch-ios.switch-toggle label {\n    color: #868686;\n  }\n  .switch-ios input:checked + label {\n    color: #3a3a3a;\n  }\n}\n/* Bugfix for older Webkit, including mobile Webkit. Adapted from\n * http://css-tricks.com/webkit-sibling-bug/\n */\n@media only screen and (-webkit-max-device-pixel-ratio: 2) and (max-device-width: 1280px) {\n  .switch-light,\n  .switch-toggle {\n    -webkit-animation: webkitSiblingBugfix infinite 1s;\n  }\n}\n@-webkit-keyframes webkitSiblingBugfix {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n  }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n  }\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/src/toggle-switch.less",
    "content": "/*\n * CSS TOGGLE SWITCHES\n * Unlicense\n *\n * Ionuț Colceriu - ghinda.net\n * https://github.com/ghinda/css-toggle-switch\n *\n */\n/* Toggle Switches\n */\n/* Shared\n */\n/* Checkbox\n */\n/* Radio Switch\n */\n/* Hide by default\n */\n\n  /* Variables\n */\n@white: #fff;\n@dark-gray: #333333;\n@candy-gray: #2d3035;\n@candy-green: #70c66b;\n@candy-blue: #38a3d4;\n@candy-yellow: #f5e560;\n@android-gray: #666666;\n@android-black: #464747;\n@android-blue: #0E88B1;\n@ios-white: #fafafa;\n@ios-green: #53d76a;\n@ios-gray: #868686;\n@ios-dark-gray: #3a3a3a;\n\n/* Mixins\n*/\n.layout (@position; @top; @right; @left; @display; @width; @zindex) {\n  position: @position;\n  top: @top;\n  right: @right;\n  left: @left;\n  display: @display;\n  width: @width;\n  z-index: @zindex;\n}\n\n.container (@bg-color; @border; @border-radius; @shadow1; @shadow2; @shadow3) {\n  background-color: @bg-color;\n  border: @border;\n  border-radius: @border-radius;\n  .box-shadow (@shadow1; @shadow2; @shadow3);\n}\n\n.box-shadow (@shadow1: 0 0 0 rgba(0, 0, 0, 0); @shadow2: 0 0 0 rgba(0, 0, 0, 0); @shadow3: 0 0 0 rgba(0, 0, 0, 0)) {\n  -webkit-box-shadow: @shadow1, @shadow2, @shadow3;\n  -moz-box-shadow: @shadow1, @shadow2, @shadow3;\n  box-shadow: @shadow1, @shadow2, @shadow3;\n}\n\n.bg-image (@start-color; @end-color) {\n  background-image: -webkit-linear-gradient(top, @start-color, @end-color);\n  background-image: linear-gradient(to bottom, @start-color, @end-color);\n}\n\n.slide-button-transition (@duration: .3s) {\n  -webkit-transition: all @duration ease-out;\n  -moz-transition: all @duration ease-out;\n  transition: all @duration ease-out;\n}\n\n.switch-toggle a, .switch-light span span {\n  display: none; }\n\n/* We can't test for a specific feature,\n * so we only target browsers with support for media queries.\n */\n@media only screen {\n  /* Checkbox switch\n   */\n  /* Radio switch\n   */\n  /* Standalone Themes */\n  /* Candy Theme\n   * Based on the \"Sort Switches / Toggles (PSD)\" by Ormal Clarck\n   * http://www.premiumpixels.com/freebies/sort-switches-toggles-psd/\n   */\n  /* Android Theme\n   */\n  /* iOS Theme\n   */\n  .switch-light {\n    display: block;\n    height: 30px;\n    /* Outline the toggles when the inputs are focused\n   */\n    position: relative;\n    overflow: visible;\n    padding: 0;\n    margin-left: 100px;\n    /* Position the label over all the elements, except the slide-button (<a>)\n   * Clicking anywhere on the label will change the switch-state\n   */\n    /* Don't hide the input from screen-readers and keyboard access\n   */ }\n    .switch-light * {\n      -webkit-box-sizing: border-box;\n      -moz-box-sizing: border-box;\n      box-sizing: border-box; }\n    .switch-light a {\n      display: block;\n      .slide-button-transition; }\n    .switch-light label, .switch-light > span {\n      line-height: 30px;\n      vertical-align: middle; }\n    .switch-light input:focus ~ a, .switch-light input:focus + label {\n      outline: 1px dotted #888888; }\n    .switch-light label {\n      .layout (relative; static; static; static; block; 100%; 3); }\n    .switch-light input {\n      .layout (absolute; static; static; static; inherit; auto; 5);\n      opacity: 0; }\n      .switch-light input:checked ~ a {\n        right: 0%; }\n    .switch-light > span {\n      .layout (absolute; static; static; -100px; inherit; 100%; auto);\n      margin: 0;\n      padding-right: 100px;\n      text-align: left; }\n      .switch-light > span span {\n        .layout (absolute; 0; static; 0; block; 50%; 5);\n        margin-left: 100px;\n        text-align: center; }\n        .switch-light > span span:last-child {\n          left: 50%; }\n    .switch-light a {\n      .layout (absolute; 0; 50%; static; block; 50%; 4);\n      height: 100%;\n      padding: 0; }\n  .switch-toggle {\n    display: block;\n    height: 30px;\n    /* Outline the toggles when the inputs are focused\n   */\n    position: relative;\n    /* For callout panels in foundation\n   */\n    padding: 0 !important;\n    /* Generate styles for the multiple states */ }\n    .switch-toggle * {\n      -webkit-box-sizing: border-box;\n      -moz-box-sizing: border-box;\n      box-sizing: border-box; }\n    .switch-toggle a {\n      display: block;\n      .slide-button-transition; }\n    .switch-toggle label, .switch-toggle > span {\n      line-height: 30px;\n      vertical-align: middle; }\n    .switch-toggle input:focus ~ a, .switch-toggle input:focus + label {\n      outline: 1px dotted #888888; }\n    .switch-toggle input {\n      position: absolute;\n      opacity: 0; }\n    .switch-toggle input + label {\n      .layout (relative; static; static; static; inherit; 50%; 2);\n      float: left;\n      height: 100%;\n      margin: 0;\n      text-align: center; }\n    .switch-toggle a {\n      .layout (absolute; 0; static; 0; inherit; 50%; 1);\n      padding: 0;\n      height: 100%; }\n    .switch-toggle input:last-of-type:checked ~ a {\n      left: 50%; }\n    .switch-toggle.switch-3 label, .switch-toggle.switch-3 a {\n      width: 33.33333%; }\n    .switch-toggle.switch-3 input:checked:nth-of-type(2) ~ a {\n      left: 33.33333%; }\n    .switch-toggle.switch-3 input:checked:last-of-type ~ a {\n      left: 66.66667%; }\n    .switch-toggle.switch-4 label, .switch-toggle.switch-4 a {\n      width: 25%; }\n    .switch-toggle.switch-4 input:checked:nth-of-type(2) ~ a {\n      left: 25%; }\n    .switch-toggle.switch-4 input:checked:nth-of-type(3) ~ a {\n      left: 50%; }\n    .switch-toggle.switch-4 input:checked:last-of-type ~ a {\n      left: 75%; }\n    .switch-toggle.switch-5 label, .switch-toggle.switch-5 a {\n      width: 20%; }\n    .switch-toggle.switch-5 input:checked:nth-of-type(2) ~ a {\n      left: 20%; }\n    .switch-toggle.switch-5 input:checked:nth-of-type(3) ~ a {\n      left: 40%; }\n    .switch-toggle.switch-5 input:checked:nth-of-type(4) ~ a {\n      left: 60%; }\n    .switch-toggle.switch-5 input:checked:last-of-type ~ a {\n      left: 80%; }\n\n  .switch-candy {\n    .container (@candy-gray; none; 3px; inset 0 2px 6px rgba(0, 0, 0, 0.3); 0 1px 0px rgba(255, 255, 255, 0.2); 0);\n    color: @white;\n    font-weight: bold;\n    text-align: center;\n    text-shadow: 1px 1px 1px #191b1e;\n\n    label {\n      color: @white;\n      .slide-button-transition(.2s); }\n\n    input:checked + label {\n      color: @dark-gray;\n      text-shadow: 0 1px 0 rgba(255,255,255, 0.5); }\n\n    a {\n      .container (@candy-green; 1px solid @dark-gray; 3px; 0 1px 1px rgba(0, 0, 0, 0.2); inset 0 1px 1px rgba(255, 255, 255, 0.45); 0);\n      .bg-image(rgba(255, 255, 255, 0.2); rgba(0, 0, 0, 0)); }\n\n    > span {\n      color: @dark-gray;\n      text-shadow: none; }\n\n    span {\n      color: @white; }\n\n    &.switch-candy-blue a {\n      background-color: @candy-blue; }\n\n    &.switch-candy-yellow a {\n      background-color: @candy-yellow; }\n  }\n\n  .switch-android {\n    .container (@android-black; none; 1px; inset rgba(0, 0, 0, 0.1) 0 1px 0; 0; 0);\n    color: @white;\n    /* Selected ON switch-light\n     */ \n    label {\n      color: @white; }\n\n    > span span {\n      opacity: 0;\n      .slide-button-transition(0.1s);\n\n      &:first-of-type {\n        opacity: 1; }\n    }\n\n    a {\n      .container (@android-gray; none; 1px; inset rgba(255, 255, 255, 0.2) 0 1px 0; inset rgba(0, 0, 0, 0.3) 0 -1px 0; 0); }\n\n    &.switch-light input:checked {\n      & ~ a {\n        background-color: @android-blue; }\n\n      & ~ span span {\n        &:first-of-type {\n          opacity: 0; }\n\n        &:last-of-type {\n          opacity: 1; }\n      }\n    }\n\n    &.switch-toggle, .switch-android > span span {\n      font-size: 85%;\n      text-transform: uppercase; }\n  }\n\n  .switch-ios {\n    &.switch-light {\n      color: @ios-gray;\n\n      a {\n        .container (@white; 1px solid lightgrey; 100%; inset 0 -3px 3px rgba(0, 0, 0, 0.025); 0 1px 4px rgba(0, 0, 0, 0.15); 0 4px 4px rgba(0, 0, 0, 0.1));\n        left: 0;\n        width: 30px;\n        .slide-button-transition; }\n        \n      > span span {\n        width: 100%;\n        left: 0;\n        opacity: 0; \n\n        &:first-of-type {\n          opacity: 1;\n          padding-left: 30px; }\n\n        &:last-of-type {\n          padding-right: 30px; }\n        }\n\n      > span:before {\n        .layout (absolute; 0; static; 100px; block; 100%; inherit);\n        .container (@ios-white; 1px solid lightgrey; 30px; inset rgba(0, 0, 0, 0.1) 0 1px 0; 0; 0);\n        content: '';\n        height: 100%;\n        .slide-button-transition(0.5s); }\n\n      input:checked {\n        & ~ a {\n          left: 100%;\n          margin-left: -30px; }\n\n        & ~ span {\n          &:before {\n            border-color: @ios-green;\n            box-shadow: inset 0 0 0 30px @ios-green; }\n\n            span {\n              &:first-of-type {\n                opacity: 0; }\n\n              &:last-of-type {\n                opacity: 1;\n                color: @white; }\n            }\n          }\n        }\n      }\n\n      &.switch-toggle {\n        .container (@ios-white; 1px solid lightgrey; 30px; inset rgba(0, 0, 0, 0.1) 0 1px 0; 0; 0);\n\n        a {\n          background-color: @ios-green;\n          border-radius: 25px;\n          .slide-button-transition; }\n\n        label {\n          color: @ios-gray; }\n      }\n\n      input:checked + label {\n      color: @ios-dark-gray; }\n    }\n  }\n\n/* Bugfix for older Webkit, including mobile Webkit. Adapted from\n * http://css-tricks.com/webkit-sibling-bug/\n */\n@media only screen and (-webkit-max-device-pixel-ratio: 2) and (max-device-width: 1280px) {\n  .switch-light, .switch-toggle {\n    -webkit-animation: webkitSiblingBugfix infinite 1s; } }\n\n@-webkit-keyframes webkitSiblingBugfix {\n  from {\n    -webkit-transform: translate3d(0, 0, 0); }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0); } }\n"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/src/toggle-switch.scss",
    "content": "/*\n * CSS TOGGLE SWITCHES\n * Unlicense\n *\n * Ionuț Colceriu - ghinda.net\n * https://github.com/ghinda/css-toggle-switch\n *\n */\n\n@import \"../bower_components/bourbon/app/assets/stylesheets/bourbon\";\n\n/* Toggle Switches\n */\n\n/* Shared\n */\n@mixin switch-shared() {\n\n\tdisplay: block;\n\theight: 30px;\n\n\t* {\n\t\t@include box-sizing(border-box);\n\t}\n\n\ta {\n\t\tdisplay: block;\n\n\t\t@include transition(all 0.3s ease-out);\n\t}\n\n\tlabel,\n\t> span {\n\t\tline-height: 30px;\n\t\tvertical-align: middle;\n\t}\n\n\t/* Outline the toggles when the inputs are focused\n\t */\n\tinput:focus ~ a,\n\tinput:focus + label {\n\t\toutline: 1px dotted #888;\n\t}\n\n}\n\n/* Checkbox\n */\n@mixin switch-light() {\n\n\t@include switch-shared();\n\n\tposition: relative;\n\toverflow: visible;\n\tpadding: 0;\n\tmargin-left: 100px;\n\n\t/* Position the label over all the elements, except the slide-button (<a>)\n\t * Clicking anywhere on the label will change the switch-state\n\t */\n\tlabel {\n\t\tposition: relative;\n\t\tz-index: 3;\n\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\n\t/* Don't hide the input from screen-readers and keyboard access\n\t */\n\tinput {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t\tz-index: 5;\n\n\t\t&:checked ~ a {\n\t\t\tright: 0%;\n\t\t}\n\n\t}\n\n\t> span {\n\t\tposition: absolute;\n\t\tleft: -100px;\n\n\t\twidth: 100%;\n\t\tmargin: 0;\n\t\tpadding-right: 100px;\n\n\t\ttext-align: left;\n\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tz-index: 5;\n\n\t\t\tdisplay: block;\n\t\t\twidth: 50%;\n\t\t\tmargin-left: 100px;\n\n\t\t\ttext-align: center;\n\n\t\t\t&:last-child {\n\t\t\t\tleft: 50%;\n\t\t\t}\n\t\t}\n\n\t}\n\n\ta {\n\t\tposition: absolute;\n\t\tright: 50%;\n\t\ttop: 0;\n\t\tz-index: 4;\n\n\t\tdisplay: block;\n\t\twidth: 50%;\n\t\theight: 100%;\n\t\tpadding: 0;\n\t}\n\n}\n\n/* Radio Switch\n */\n@mixin switch-toggle() {\n\n\t@include switch-shared();\n\n\tposition: relative;\n\n\t/* For callout panels in foundation\n\t */\n\tpadding: 0 !important;\n\n\tinput {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t}\n\n\tinput + label {\n\t\tposition: relative;\n\t\tz-index: 2;\n\n\t\tfloat: left;\n\t\twidth: 50%;\n\t\theight: 100%;\n\n\t\tmargin: 0;\n\t\ttext-align: center;\n\t}\n\n\ta {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tpadding: 0;\n\t\tz-index: 1;\n\n\t\twidth: 50%;\n\t\theight: 100%;\n\t}\n\n\tinput:last-of-type:checked ~ a {\n\t\tleft: 50%;\n\t}\n\n\t/* Generate styles for the multiple states */\n\t@for $i from 1 through 3 {\n\t\t$state: $i + 2;\n\t\t$width: 100 / ($i + 2);\n\n\t\t&.switch-#{$state} {\n\t\t\tlabel,\n\t\t\ta {\n\t\t\t\twidth: $width * 1%;\n\t\t\t}\n\t\t}\n\n\t\t@for $j from 2 through ($i + 1) {\n\t\t\t&.switch-#{$state} input:checked:nth-of-type(#{$j}) ~ a {\n\t\t\t\tleft: $width * ($j - 1) * 1%;\n\t\t\t}\n\t\t}\n\n\t\t&.switch-#{$state} input:checked:last-of-type ~ a {\n\t\t\tleft: 100 - $width * 1%;\n\t\t}\n\t}\n\n}\n\n/* Hide by default\n */\n.switch-toggle a,\n.switch-light span span {\n\tdisplay: none;\n}\n\n/* We can't test for a specific feature,\n * so we only target browsers with support for media queries.\n */\n@media only screen {\n\n\t/* Checkbox switch\n\t */\n\t.switch-light {\n\t\t@include switch-light();\n\t}\n\n\t/* Radio switch\n\t */\n\t.switch-toggle {\n\t\t@include switch-toggle();\n\t}\n\n\t/* Standalone Themes */\n\n\t/* Candy Theme\n\t * Based on the \"Sort Switches / Toggles (PSD)\" by Ormal Clarck\n\t * http://www.premiumpixels.com/freebies/sort-switches-toggles-psd/\n\t */\n\t.switch-candy {\n\t\tbackground-color: #2d3035;\n\t\tborder-radius: 3px;\n\n\t\tcolor: #fff;\n\t\tfont-weight: bold;\n\t\ttext-align: center;\n\t\ttext-shadow: 1px 1px 1px #191b1e;\n\n\t\tbox-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3),\n\t\t\t0 1px 0px rgba(255, 255, 255, 0.2);\n\n\t\tlabel {\n\t\t\tcolor: #fff;\n\t\t\t@include transition(color 0.2s ease-out);\n\t\t}\n\n\t\tinput:checked + label {\n\t\t\tcolor: #333;\n\t\t\ttext-shadow: 0 1px 0 rgba(255,255,255,0.5);\n\t\t}\n\n\t\ta {\n\t\t\tborder: 1px solid #333;\n\t\t\tbackground-color: #70c66b;\n\t\t\tborder-radius: 3px;\n\n\t\t\t@include background-image(\n\t\t\t\tlinear-gradient(top, rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0))\n\t\t\t);\n\n\t\t\tbox-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),\n\t\t\t\tinset 0 1px 1px rgba(255, 255, 255, 0.45);\n\t\t}\n\n\t\t> span {\n\t\t\tcolor: #333;\n\n\t\t\ttext-shadow: none;\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: #fff;\n\t\t}\n\n\t\t&.switch-candy-blue a {\n\t\t\tbackground-color: #38a3d4;\n\t\t}\n\n\t\t&.switch-candy-yellow a {\n\t\t\tbackground-color: #f5e560;\n\t\t}\n\t}\n\n\t/* Android Theme\n\t */\n\t.switch-android {\n\t\tbackground-color: #464747;\n\t\tborder-radius: 1px;\n\n\t\tcolor: #fff;\n\n\t\tlabel {\n\t\t\tcolor: #fff;\n\t\t}\n\n\t\tbox-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0;\n\n\t\t> span span {\n\t\t\topacity: 0;\n\n\t\t\t@include transition(all 0.1s);\n\n\t\t\t&:first-of-type {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\tbackground-color: #666;\n\t\t\tborder-radius: 1px;\n\n\t\t\tbox-shadow: inset rgba(255, 255, 255, 0.2) 0 1px 0,\n\t\t\t\tinset rgba(0, 0, 0, 0.3) 0 -1px 0;\n\t\t}\n\n\t\t/* Selected ON switch-light\n\t\t */\n\t\t&.switch-light input:checked {\n\n\t\t\t~ a {\n\t\t\t\tbackground-color: #0E88B1;\n\t\t\t}\n\n\t\t\t~ span span {\n\t\t\t\t&:first-of-type {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\n\t\t\t\t&:last-of-type {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\n\t\t&.switch-toggle,\n\t\t> span span {\n\t\t\tfont-size: 85%;\n\t\t\ttext-transform: uppercase;\n\t\t}\n\n\t}\n\n\t/* iOS Theme\n\t */\n\t.switch-ios {\n\t\t$white: #fff;\n\t\t$grey: #d3d3d3;\n\t\t$green: #53d76a;\n\n\t\t&.switch-light {\n\t\t\tcolor: darken($grey, 30%);\n\n\t\t\ta {\n\t\t\t\tleft: 0;\n\t\t\t\twidth: 30px;\n\t\t\t\tbackground-color: $white;\n\t\t\t\tborder: 1px solid $grey;\n\t\t\t\tborder-radius: 100%;\n\n\t\t\t\t@include transition(all 0.3s ease-out);\n\n\t\t\t\tbox-shadow: inset 0 -3px 3px hsla(0,0%,0%,.025),\n\t\t\t\t\t0 1px 4px hsla(0,0%,0%,.15),\n\t\t\t\t\t0 4px 4px hsla(0,0%,0%,.1);\n\t\t\t}\n\n\t\t\t> span span {\n\t\t\t\twidth: 100%;\n\t\t\t\tleft: 0;\n\t\t\t\topacity: 0;\n\n\t\t\t\t&:first-of-type {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\tpadding-left: 30px\n\t\t\t\t}\n\n\t\t\t\t&:last-of-type {\n\t\t\t\t\tpadding-right: 30px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t> span:before {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 100px;\n\t\t\t\ttop: 0;\n\n\t\t\t\tbackground-color: darken($white, 2%);\n\t\t\t\tborder: 1px solid $grey;\n\t\t\t\tborder-radius: 30px;\n\n\t\t\t\t@include transition(all 0.5s ease-out);\n\n\t\t\t\tbox-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0;\n\t\t\t}\n\n\t\t\tinput:checked {\n\t\t\t\t~ a {\n\t\t\t\t\tleft: 100%;\n\t\t\t\t\tmargin-left: -30px;\n\t\t\t\t}\n\n\t\t\t\t~ span:before {\n\t\t\t\t\tborder-color: $green;\n\n\t\t\t\t\tbox-shadow: inset 0 0 0 30px $green;\n\t\t\t\t}\n\n\t\t\t\t~ span span {\n\t\t\t\t\t&:first-of-type {\n\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t&:last-of-type {\n\t\t\t\t\t\topacity: 1;\n\n\t\t\t\t\t\tcolor: $white;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t&.switch-toggle {\n\t\t\tbackground-color: darken($white, 2%);\n\t\t\tborder: 1px solid $grey;\n\t\t\tborder-radius: 30px;\n\n\t\t\tbox-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0;\n\n\t\t\ta {\n\t\t\t\tbackground-color: $green;\n\t\t\t\tborder-radius: 25px;\n\n\t\t\t\t@include transition(all 0.3s ease-out);\n\t\t\t}\n\n\t\t\tlabel {\n\t\t\t\tcolor: darken($grey, 30%);\n\t\t\t}\n\n\t\t}\n\n\t\tinput:checked + label {\n\t\t\tcolor: darken($grey, 60%);\n\t\t}\n\n\t}\n\n}\n\n/* Bugfix for older Webkit, including mobile Webkit. Adapted from\n * http://css-tricks.com/webkit-sibling-bug/\n */\n.switch-light,\n.switch-toggle {\n\t@media only screen and (-webkit-max-device-pixel-ratio: 2) and (max-device-width: 1280px) {\n\t\t-webkit-animation: webkitSiblingBugfix infinite 1s;\n\t}\n}\n\n@-webkit-keyframes webkitSiblingBugfix {\n\tfrom {\n\t\t-webkit-transform: translate3d(0,0,0);\n\t} to {\n\t\t-webkit-transform: translate3d(0,0,0);\n\t}\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/css-toggle-switch/test/tests.js",
    "content": "function testSwitchTheme(name, theme) {\n\tvar $container = document.getElementsByClassName(theme)[0],\n\t\t$switchLightButton = $container.querySelector('.switch-light a'),\n\t\t$switchToggleButton = $container.querySelector('.switch-toggle a');\n\n\tif($switchLightButton) {\n\t\ttest(name + ' switch-light', function() {\n\t\t\tnotEqual($switchLightButton.offsetLeft, '0');\n\t\t});\n\t}\n\n\tif($switchToggleButton) {\n\t\ttest(name + ' switch-toggle', function() {\n\t\t\tnotEqual($switchToggleButton.offsetLeft, '0');\n\t\t});\n\t}\n};\n\nfunction testSwitchNumber(name, number) {\n\tvar $container = document.getElementsByClassName(number)[0],\n\t\t$switchToggleButton = $container.querySelector('a');\n\n\ttest(name, function() {\n\t\tnotEqual($switchToggleButton.offsetLeft, '0');\n\t});\n};\n\nfunction triggerEventOnPage(element, eventName) {\n\tif(element[eventName]) {\n\t\t// firefox and other desktop browsers\n\t\telement[eventName]();\n\n\t} else {\n\t\tvar event;\n\n\t\tevent = document.createEvent('Event');\n\t\tevent.initEvent(eventName, true, true);\n\n\t\telement.dispatchEvent(event);\n\t}\n};\n\nwindow.onload = function() {\n\n\t// click all the switches\n\tvar $switchLightButtons = document.querySelectorAll('.switch-light');\n\tvar $switchToggleButtons = document.querySelectorAll('.switch-toggle label:last-of-type');\n\n\tvar clickLabel = function(el) {\n\t\tsetTimeout(function() {\n\t\t\ttriggerEventOnPage(el, 'click');\n\t\t});\n\t};\n\n\tvar i;\n\tfor(i = 0; i < $switchLightButtons.length; i++) {\n\t\tclickLabel($switchLightButtons[i]);\n\t}\n\n\tfor(i = 0; i < $switchToggleButtons.length; i++) {\n\t\tclickLabel($switchToggleButtons[i]);\n\t}\n\n\t// give it a second to move the switch buttons\n\tsetTimeout(function() {\n\n\t\ttestSwitchTheme('Barebones Switches (no theme)', 'barebones');\n\t\ttestSwitchTheme('Android Theme', 'android');\n\t\ttestSwitchTheme('Candy Theme', 'candy');\n\t\ttestSwitchTheme('iOS Theme', 'ios');\n\n\t\ttestSwitchNumber('Switch-toggle with 3 options', 'switch-3');\n\t\ttestSwitchNumber('Switch-toggle with 4 options', 'switch-4');\n\t\ttestSwitchNumber('Switch-toggle with 5 options', 'switch-5');\n\n\t\ttestSwitchTheme('Bootstrap', 'bootstrap');\n\t\ttestSwitchTheme('Foundation', 'foundation');\n\n\t}, 1000);\n\n};\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/.bower.json",
    "content": "{\n  \"name\": \"entypo\",\n  \"homepage\": \"https://github.com/danielbruce/entypo\",\n  \"_release\": \"f94e077449\",\n  \"_resolution\": {\n    \"type\": \"branch\",\n    \"branch\": \"master\",\n    \"commit\": \"f94e077449daa87321aa0df5643889460ba8291b\"\n  },\n  \"_source\": \"git://github.com/danielbruce/entypo.git\",\n  \"_target\": \"*\",\n  \"_originalSource\": \"entypo\",\n  \"_direct\": true\n}"
  },
  {
    "path": "maverix-theme/bower_components/entypo/.gitignore",
    "content": "node_modules/\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/.gitmodules",
    "content": "[submodule \"support/font-builder\"]\n\tpath = support/font-builder\n\turl = git://github.com/fontello/font-builder.git\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/DEVELOPMENT.md",
    "content": "Development docs\n================\n\nSet if scripts to easily build webfonts from SVG images\n\nInstallation\n------------\n\n### Ubuntu\n\n**(!)** Use Ubuntu **12.04**. Or you will have to manually install fresh\nfreetype library, to build ttfautohint.\n\nInit font-builder and build additional software (ttf2eot, ttfautohint):\n\n    make support\n\nInstall system dependencies (fontforge & python modules):\n\n    cd support/font-builder && sudo make dev-deps\n\n\nIf you are working on multiple font you would like to have only one instance of\nheavy dependencies like _ttfautohint_ installed. Run this:\n\n    cd support/font-builder && sudo make support-install\n\n\nNote that you don't need to install system dependencies more than once.\n\n\n### Mac\n\nTBD. Anyone, please help.\n\n\n### Windows\n\nTBD. Anyone, please help.\n\n\nMaking font\n-----------\n\n### Steps\n\n1. Place images into `/src/svg` folder.\n2. Add image info to `config.yml` (see comments in it)\n3. Edit css/html templates, if needed.\n4. Run `make`\n\nGenerated data will be placed in `./font`\n\nYou can rebuild css/html only with `make html`\n\n### SVG image requirements\n\nAny image will be proportionnaly scaled, to fit height in ascent-descent\nIt's convenient to make height = 1000px. Default font baseline will be 20% from\nthe bottom.\n\nIn most cases it's ok to visually allign icons to middle line, not to baseline.\nIf you are not shure, how to start - make image with 10% top/bottom padding.\nThen generate demo page and tune scale/offset.\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/Makefile",
    "content": "PROJECT     := $(notdir ${PWD})\nFONT_NAME   := entypo\n\n\n################################################################################\n## ! DO NOT EDIT BELOW THIS LINE, UNLESS YOU REALLY KNOW WHAT ARE YOU DOING ! ##\n################################################################################\n\n\nTMP_PATH    := /tmp/${PROJECT}-$(shell date +%s)\nREMOTE_NAME ?= origin\nREMOTE_REPO ?= $(shell git config --get remote.${REMOTE_NAME}.url)\n\n\n# Add local versions of ttf2eot nd ttfautohint to the PATH\nPATH := $(PATH):./support/font-builder/support/ttf2eot\nPATH := $(PATH):./support/font-builder/support/ttfautohint/frontend\nPATH := $(PATH):./support/font-builder/bin\n\n\ndist: font html\n\ndump:\n\trm -r ./src/svg/\n\tmkdir ./src/svg/\n\tfont-dump.js --hcrop -c config.yml -f -i ./src/original/Entypo.svg -o ./src/svg/ -d diff.yml\n\tfont-dump.js --hcrop -c config.yml -f -i ./src/original/EntypoSocial.svg -o ./src/svg/ -d diff.yml\n\n\nfont:\n\t@if test ! -d support/font-builder/bin ; then \\\n\t\techo \"font-builder binaries not found. run:\" >&2 ; \\\n\t\techo \"  make support\" >&2 ; \\\n\t\texit 128 ; \\\n\t\tfi\n\t@if test ! `which ttf2eot` ; then \\\n\t\techo \"ttf2eot not found. run:\" >&2 ; \\\n\t\techo \"  make support\" >&2 ; \\\n\t\texit 128 ; \\\n\t\tfi\n\t@if test ! `which ttfautohint` ; then \\\n\t\techo \"ttfautohint not found. run:\" >&2 ; \\\n\t\techo \"  make support\" >&2 ; \\\n\t\texit 128 ; \\\n\t\tfi\n\tfontbuild.py -c ./config.yml -t ./src/font_template.sfd -i ./src/svg -o ./font/$(FONT_NAME).ttf\n\tttfautohint --latin-fallback --hinting-limit=200 --hinting-range-max=50 --symbol ./font/$(FONT_NAME).ttf ./font/$(FONT_NAME)-hinted.ttf\n\tmv ./font/$(FONT_NAME)-hinted.ttf ./font/$(FONT_NAME).ttf\n\tfontconvert.py -i ./font/$(FONT_NAME).ttf -o ./font\n\tttf2eot < ./font/$(FONT_NAME).ttf >./font/$(FONT_NAME).eot\n\n\nnpm-deps:\n\t@if test ! `which npm` ; then \\\n\t\techo \"Node.JS and NPM are required for html demo generation.\" >&2 ; \\\n\t\techo \"This is non-fatal error and you'll still be able to build font,\" >&2 ; \\\n\t\techo \"however, to build demo with >> make html << you need:\" >&2 ; \\\n\t\techo \"  - Install Node.JS and NPM\" >&2 ; \\\n\t\techo \"  - Run this task once again\" >&2 ; \\\n\t\telse \\\n\t\tnpm install -g jade js-yaml.bin ; \\\n\t\tfi\n\n\nsupport:\n\tgit submodule init support/font-builder\n\tgit submodule update support/font-builder\n\twhich ttf2eot ttfautohint > /dev/null || (cd support/font-builder && $(MAKE))\n\twhich js-yaml jade > /dev/null || $(MAKE) npm-deps\n\n\nhtml:\n\ttpl-render.js --locals config.yml --input ./src/demo/demo.jade --output ./font/demo.html\n\n\ngh-pages:\n\t@if test -z ${REMOTE_REPO} ; then \\\n\t\techo 'Remote repo URL not found' >&2 ; \\\n\t\texit 128 ; \\\n\t\tfi\n\tcp -r ./font ${TMP_PATH} && \\\n\t\ttouch ${TMP_PATH}/.nojekyll\n\tcd ${TMP_PATH} && \\\n\t\tgit init && \\\n\t\tgit add . && \\\n\t\tgit commit -q -m 'refreshed gh-pages'\n\tcd ${TMP_PATH} && \\\n\t\tgit remote add remote ${REMOTE_REPO} && \\\n\t\tgit push --force remote +master:gh-pages \n\trm -rf ${TMP_PATH}\n\n\n.PHONY: font npm-deps support\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/README.md",
    "content": "Experimental scripts to automate Entypo font building.\n\nPlease, don't use until this work finished. Look now original at entypo\nsite: http://www.entypo.com\n\nLicense\n-------\n\n### Icons, font\n\nArtwork by Daniel Bruce:\n\n- http://www.entypo.com\n- me@danielbruce.se\n- [twitter](http://twitter.com/danielbruce_)\n- [dribble](http://dribbble.com/danielbruce)\n\nAll icons are distributed under\n[CC BY-SA](http://creativecommons.org/licenses/by-sa/3.0/) licence.\n\nFont is distributed under\n[SIL](http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL) licence.\n\n\n### Scripting\n\nThis project uses [font-builder](https://github.com/fontello/font-builder)\nscripts to generate data.\n\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/config.yml",
    "content": "---\n# This is configuration file for font builder and other support scripts.\n# Format is descriped below.\n#\n#\n# # metadata, to generate demo & fontello info dialogs\n# meta:\n#\n#  author: Daniel Buce\n#  homepage: http://...\n#  email: ...\n#  twitter: http://twitter.com/...\n#  dribbble: http://dribbble.com/...\n#  license: SIL\n#  license_url: http://scripts.sil.org/OFL\n#\n#   css-prefix: \"icon-\"             # prefix for css-generated classes\n#   demo-columns: 4                 # used for html demo page generation\n#\n# # Font headers. All vars from here will be used as font\n# # params in fontforge http://fontforge.sourceforge.net/python.html\n# font:\n#\n#   version: \"1.0\"\n#\n#   # use !!!small!!! letters a-z, or Opera will fail under OS X\n#   # fontname will be also used as file name.\n#   fontname: myfont\n#\n#   fullname: MyFont\n#   familyname: Myfont\n#\n#   copyright: Copyright (C) 2012 by xxxxxxxx\n#\n#   ascent: 1638\n#   descent: 410\n#   weight: Regular\n#\n#\n# #\n# # Optional. You can apply global rescale + offset to all font glyphs.\n# # Param values ar 0..1, where 1 = 100%. \n# #\n# transform:\n#   baseline: 0.2                 # baseline for rescale symmetry. Default value\n#                                 # calculated from ascent/decsent\n#   rescale: 0.68                 # rescale glyphs and center around baseline\n#   offset: -0.1                  # shift up/down\n#\n# glyphs:\n#   - file: glyph1_file           # file name, without extention\n#     from: 0xNNN                 # Source code for remapper or merge tool\n#     code: 0xNNN                 # Symbol code 0x - hex\n#     css: icon-gpyph1-name       # For generated CSS\n#     search: [word1, word2]      # Search aliases (array). CSS name will be\n#                                 # included automatically\n#     src: first_font_alias       # alias to font for merge tool\n#                                 # list of aliases in src_fonts section\n#\n#     #\n#     # local transformations, only for this glyph (optional)\n#     #\n#     transform:                  # personal glyph transformation.\n#       rescale_rel               # *_rel - applyed after global.\n#       offset: 0.2               # without *_rel - override global\n#\n# #\n# # Fonts aliases used only in font merge tool\n# #\n# src_fonts:\n#   first_font_alias: \"/absolute/path/to/first/font.ttf\"\n#\n################################################################################\n#\n\n\nmeta:\n  author: Daniel Buce\n  homepage: http://www.entypo.com\n  email: daniel@precinct.net\n  twitter: http://twitter.com/danielbruce_\n  dribbble: http://dribbble.com/danielbruce\n  github: https://github.com/danielbruce/entypo\n  license: SIL\n  license_url: http://scripts.sil.org/OFL\n\n  css_prefix: \"icon-\"\n  columns: 4\n\nfont:\n  version: \"1.0\"\n\n  # use !!!small!!! letters a-z, or Opera will fail under OS X\n  # fontname will be also used as file name.\n  fontname: entypo\n\n  fullname: Entypo\n  familyname: Entypo\n\n  copyright: Copyright (C) 2012 by Daniel Bruce\n\n  ascent: 850\n  descent: 150\n  weight: Medium\n\n\nglyphs:\n\n  - css: note\n    code: 0x266a\n    uid: 39e2e6682c28e1e3b5f49825a19717c4\n    search: [music, note, song]\n\n  - css: note-beamed\n    code: 0x266b\n    uid: fda731b5a4026685e1a9c7e64228e2b2\n    search: [music, note, song]\n\n  - css: music\n    code: 0x1f3b5\n    uid: f2a036a85c0a6a46b0c9709a70e1bb70\n    search: [song, music, sound]\n\n\n  - css: search\n    code: 0x1f50d\n    uid: 7222571caa5c15f83dcfd447c58d68d9\n    search: [search, find]\n\n  - css: flashlight\n    code: 0x1f526\n    uid: c9b928dc82d7d77033644fcf59dca3b3\n    search: [search, find, flashlight]\n\n\n  - css: mail\n    code: 0x2709\n    uid: e335adbc2d898c7d85d40c507796e7b4\n    search: [mail, email]\n\n\n  - css: heart\n    code: 0x2665\n    uid: 0eabe5f8d71cc838484ff39436426d2d\n    search: [heart]\n  - css: heart-empty\n    code: 0x2661\n    uid: d18071bbf8f0a8cec8d1f556c91c6af0\n    search: [heart]\n\n\n  - css: star\n    code: 0x2605\n    uid: 25b34dea4784f72c710454f32ff8fa2b\n    search: [star]\n\n  - css: star-empty\n    code: 0x2606\n    uid: 0e3f1335f83cca67329b2c4bcb3aaec5\n    search: [star]\n\n\n  - css: user\n    code: 0x1f464\n    uid: bbd66ef66bb8fa9edde54d9a90b89150\n    search: [profile, contact, user]\n\n  - css: users\n    code: 0x1f465\n    uid: ecf8edb95c3f45eb433b4cce7ba9f740\n    search: [users, contacts, friends]\n\n  - css: user-add\n    code: 0xe700\n    uid: 6274e0601f2feef7eced89146e708de0\n    search: [profile, contact, user, add]\n\n\n  - css: video\n    code: 0x1f3ac\n    uid: 6341ebcbe1ed1f6777c1b9527ead368e\n    search: [movie, video, film]\n\n  - css: picture\n    code: 0x1f304\n    uid: 3def559c3c39b8500882e02892b7daa8\n    search: [image, picture, photo]\n\n  - css: camera\n    code: 0x1f4f7\n    uid: 85017ab6ca074831a8de771b40e9640c\n    search: [camera, photo]\n\n\n  - css: layout\n    code: 0x268f\n    uid: 5e9f01871d44e56b45ecbfd00f4dbc3a\n    search: [image, list, thumbnails]\n\n  - css: menu\n    code: 0x2630\n    uid: 2cfb3f2b46b34a1790aec0aa846297b6\n    search: [menu, list]\n\n\n  - css: check\n    code: 0x2713\n    uid: 14017aae737730faeda4a6fd8fb3a5f0\n    search: [ok, yes, check, mark]\n\n  - css: cancel\n    code: 0x2715\n    from: 0x274c\n    uid: c709da589c923ba3c2ad48d9fc563e93\n    search: [close, cancel, reject]\n\n  - css: cancel-circled\n    code: 0x2716\n    uid: c759418c008e9562944080fee617fc76\n    search: [close, cancel, reject]\n\n  - css: cancel-squared\n    code: 0x274e\n    uid: bf45c39702763f1803b550c36a0ceb12\n    search: [close, cancel, reject]\n\n  - css: plus\n    code: 0x2b\n    from: 0x2795\n    uid: 70370693ada58ef0a60fa0984fe8d52a\n    search: [plus]\n\n  - css: plus-circled\n    code: 0x2795\n    from: 0x2295\n    uid: a66cdc7278e6b33b8bd44a141f5e1a8d\n    search: [plus]\n\n  - css: plus-squared\n    code: 0x229e\n    uid: 9e1c33b6849ceb08db8acfaf02188b7d\n    search: [plus, expand]\n\n  - css: minus\n    code: 0x2d\n    from: 0x2796\n    uid: 1256e3054823e304d7e452a589cf8bb8\n    search: [minus]\n\n  - css: minus-circled\n    code: 0x2796\n    from: 0x2296\n    uid: 3eb93689881ad0804f87052a53edc2b6\n    search: [minus]\n\n  - css: minus-squared\n    code: 0x229f\n    uid: 4ffa544c1a81c905f0a8a5745d8b9faa\n    search: [minus, collapse]\n\n\n  - css: help\n    code: 0x2753\n    uid: 3a230e539a4f3b904debd04c6c155034\n    search: [help, question]\n\n  - css: help-circled\n    code: 0xe704\n    uid: de9a631a7d18106aea1c89ba51b1990a\n    search: [help, question]\n\n  - css: info\n    code: 0x2139\n    uid: 63b86fedd4ee9ad2105f54f4888e7088\n    search: [info]\n\n  - css: info-circled\n    code: 0xe705\n    uid: 7e4164950ffa4990961958b2d6318658\n    search: [info]\n\n\n  - css: back\n    code: 0x1f519\n    uid: 3ba4275937db277075fc47d6b5a69a2e\n    search: [back, return]\n\n\n  - css: home\n    code: 0x2302\n    uid: 513ac180ff85bd275f2b736720cbbf5e\n    search: [home]\n\n  - css: link\n    code: 0x1f517\n    uid: 815503841e980c848f55e0271deacead\n    search: [link, url]\n\n  - css: attach\n    code: 0x1f4ce\n    uid: 44b9e75612c5fad5505edd70d071651f\n    search: [attach, clip]\n\n  - css: lock\n    code: 0x1f512\n    uid: 1a7104205ea96e6f40ac716d0ca72f21\n    search: [lock]\n\n  - css: lock-open\n    code: 0x1f513\n    uid: e81fc3a0d39ace6ee735d7b24eedd56d\n    search: [lock, open, unlock]\n\n  - code: 0xe70a\n    uid: 25fc99a30fecc4021fdcae5fff5ba9ac\n    css: eye\n    search: [eye, subscribe]\n\n  - css: tag\n    code: 0xe70c\n    uid: 875ab0f6d417223f6ec76ff7f0a4baed\n    search: [tag, price, offer]\n\n  - css: bookmark\n    code: 0x1f516\n    uid: 23912d5623126e14b7b137c3ba557168\n    search: [bookmark]\n\n  - css: bookmarks\n    code: 0x1f4d1\n    uid: 8538a2249db7f07ae75411886732fb87\n    search: [bookmarks]\n\n\n  - css: flag\n    code: 0x2691\n    uid: 1d2a6c3d9236b88b0f185c7c4530fa52\n    search: [flag]\n\n  - css: thumbs-up\n    code: 0x1f44d\n    uid: 7ad4d2306ebda8452e5e3eff3cd8241c\n    search: [thumbs, up, like, love, vote]\n  - css: thumbs-down\n    code: 0x1f44e\n    uid: 429fba993b729174468a9493613ad1ba\n    search: [thumbs, down, dislike, unlike, vote]\n\n\n  - css: download\n    code: 0x1f4e5\n    uid: b08cfe8039de2ce815686aced2caef06\n    search: [download]\n  - css: upload\n    code: 0x1f4e4\n    uid: 44199a54057e6e264fde61a49b034171\n    search: [upload]\n  - css: upload-cloud\n    code: 0xe711\n    uid: 5d595124cecf472869d1cdc020da0ccc\n    search: [upload, cloud]\n\n\n  - css: reply\n    code: 0xe712\n    uid: b6fc2f656ef87275889422e19550680a\n    search: [reply]\n\n  - css: reply-all\n    code: 0xe713\n    uid: 1a4b54ba5618e5364fc47a3d26c1cf59\n    search: [reply]\n\n  - css: forward\n    code: 0x27a6\n    uid: ec347024a3640deebeeab53fd0d5ad03\n    search: [forward]\n\n  - css: quote\n    code: 0x275e\n    uid: c3e5dafba1739ef33cc574c7484febf7\n    search: [quote]\n\n  - css: code\n    code: 0xe714\n    uid: b6f32db98a3de777f5ae3005191b1831\n    search: [code]\n\n  - css: export\n    code: 0xe715\n    uid: 390d6d13398cbf8c8c3c5493f7d34088\n    search: [export, share]\n\n  - code: 0x270e\n    uid: c77fd2fd065b5fe16d6f2b41e190b266\n    css: pencil\n    search: [pencil, write, reply, edit]\n\n  - css: feather\n    code: 0x2712\n    uid: bcb868184ff9c35f8aef564f50c0d649\n    search: [pen, write, reply, edit, feather]\n\n  - css: print\n    code: 0xe716\n    uid: 28f124a10127a47b9d9472699193d75a\n    search: [print]\n\n  - css: retweet\n    code: 0xe717\n    uid: 216891b0093d4dbef19877d5b00d1b16\n    search: [retweet, twitter]\n\n  - css: keyboard\n    code: 0x2328\n    uid: 005a38f6af74b31aeb817fedb09d2175\n    search: [keyboard]\n\n\n  - css: comment\n    code: 0xe718\n    uid: 16890362e811b4cb8de36282b071fe30\n    search: [comment, reply, write]\n\n  - css: chat\n    code: 0xe720\n    uid: 2c0b53280f82068f6bab4e2200025d9f\n    search: [chat, talk]\n\n\n  - css: bell\n    code: 0x1f514\n    uid: 2c5335c6e56b876139d7a58ab2f4b2fe\n    search: [alert, bell, jingle]\n\n  - css: attention\n    code: 0x26a0\n    uid: 97902f87200ce74d181044df02a0458d\n    search: [attention, warning, alert]\n\n  - css: alert\n    code: 0x1f4a5\n    uid: 39a5a0d7ce8342d149373b2ce219503a\n    search: [attention, warning, alert]\n\n\n  - css: vcard\n    code: 0xe722\n    uid: 457c8e2b305e7af74c1be4f07a01ca92\n    search: [contact, card, vcard]\n\n  - css: address\n    code: 0xe723\n    uid: 540b6a4262be769515c79700618b4aea\n    search: [address]\n\n  - css: location\n    code: 0xe724\n    uid: a42b598e4298f3319b25a2702a02e7ff\n    search: [location, mark, marker]\n\n  - css: map\n    code: 0xe727\n    uid: 64f5a50cf7ac972a56a9a511acb5d28e\n    search: [down]\n\n  - css: direction\n    code: 0x27a2\n    uid: f8513213799b244e66b2836aeee88531\n    search: [direction]\n\n  - css: compass\n    code: 0xe728\n    uid: c117f17c0316ef71fb2a658c4c273002\n    search: [compass]\n\n\n\n  - css: cup\n    code: 0x2615\n    uid: 9bdc80f58999873c5a8079ad2d7f4143\n    search: [cup]\n\n  - css: trash\n    code: 0xe729\n    uid: 2626e3a1bbcd90e45849af3b58a1d594\n    search: [trash, delete]\n\n  - css: doc\n    code: 0xe730\n    uid: 49bd3e825b8267f976f6d1ad391e2f4d\n    search: [doc, article]\n  - css: docs\n    code: 0xe736\n    uid: 922ab2cb66943a83de969990289ef1dc\n    search: [doc, article]\n  - css: doc-landscape\n    code: 0xe737\n    uid: 8782cc70184b33096ae927590d1fadc4\n    search: [doc, article]\n\n  - css: doc-text\n    code: 0x1f4c4\n    uid: 1189604bf305b6b03a74685ce60e6632\n    search: [doc, text, article]\n  - css: doc-text-inv\n    code: 0xe731\n    uid: 1d7c1d30ad49a988556273a238097c2a\n    search: [doc, text, article]\n\n  - css: newspaper\n    code: 0x1f4f0\n    uid: da0fd38d651815e3a12f6c030ff1fe5b\n    search: [newspaper, article]\n\n  - css: book-open\n    code: 0x1f4d6\n    uid: 51727ca007aa35ceabcaffc28934faee\n    search: [book, doc]\n\n  - css: book\n    code: 0x1f4d5\n    uid: 48b79f27e4798f23bafa07b55dbe5b73\n    search: [book]\n\n  - css: folder\n    code: 0x1f4c1\n    uid: 0ccb084ddeeae372673793ed0b45bb4a\n    search: [folder]\n\n  - css: archive\n    code: 0xe738\n    from: 0xe800\n    uid: 96ea1be71f597a5bdfc8f791ada4f651\n    css: archive\n    search: [archive]\n\n  - css: box\n    code: 0x1f4e6\n    uid: cc05df515bebe11df3ada0a5910a8f6d\n    search: [box]\n\n\n  - css: rss\n    code: 0xe73a\n    uid: 3e617d8049807e128c80d0344ba09e37\n    search: [rss]\n\n  - css: phone\n    code: 0x1f4de\n    uid: 5854855e963044f93b15738a5bb27a29\n    search: [phone, telephone, call]\n\n  - css: cog\n    code: 0x2699\n    uid: bc64550dd022ce21604f97309b346cea\n    search: [settings, cog, gear]\n\n  - css: tools\n    code: 0x2692\n    uid: 6a7b9d4863bb7e6c79e9457a72d689b6\n    search: [tools]\n\n\n  - css: share\n    code: 0xe73c\n    uid: 91426c82d94428a33353e495418435e3\n    search: [share]\n  - css: shareable\n    code: 0xe73e\n    uid: e4536ab890a215f2fe8952de5c2fe354\n    search: [shareable]\n\n\n  - css: basket\n    code: 0xe73d\n    uid: e126987944593dfee041f8e2a68145db\n    search: [basket, shopping, cart]\n\n  - css: bag\n    code: 0x1f45c\n    uid: 2c71ee1c65e1992ba32d5ffc5ee7f337\n    search: [bag, shopping, cart]\n\n\n  - css: calendar\n    code: 0x1f4c5\n    uid: 413717f5ea649e8d8b93938be277264a\n    search: [calendar, date]\n\n\n  - css: login\n    code: 0xe740\n    uid: a204f0fa972408eaae5a363c444991b2\n    search: [login]\n  - css: logout\n    code: 0xe741\n    uid: 2d76f2c8d13be40694ecadfea7fb83c3\n    search: [logout]\n\n\n    # Sound\n  - css: mic\n    code: 0x1f3a4\n    uid: 1e099a876c8a6a83f10c9bafa9886614\n    search: [mic]\n  - css: mute\n    code: 0x1f507\n    uid: 2f750a9be253e8e451209574336e7020\n    search: [volume, sound, mute]\n  - css: sound\n    code: 0x1f50a\n    uid: ef51920c7a9bed4d87f53709db115e34\n    search: [volume, sound]\n  - css: volume\n    code: 0xe742\n    from: 0x23f7\n    uid: edd88296295d95d6510e66d9a6bbd6c3\n    search: [volume, sound]\n\n\n\n  - css: clock\n    code: 0x1f554\n    uid: 8663320a860b00f26e94d3d15c9ba99a\n    search: [clock, time]\n\n  - css: hourglass\n    code: 0x23f3\n    uid: 7f6916533c0842b6cec699fd773693d3\n    search: [clock, hourglass, busy, wait]\n\n\n  - css: lamp\n    code: 0x1f4a1\n    uid: 4b20e1deee87faf4c3fab735fbd4bc1a\n    search: [idea, lamp, light]\n\n  - css: light-down\n    code: 0x1f505\n    uid: 2d14369ed7f129e779eaa30195368218\n    search: [light, dim, bright]\n  - css: light-up\n    code: 0x1f506\n    uid: f8e120c48c070f8afd2d072651b4fb9f\n    search: [light, dim, bright]\n\n  - css: adjust\n    code: 0x25d1\n    uid: f6fa10cb3ffec7becb60834f50bb0182\n    search: [adjust, contrast]\n\n\n  - css: block\n    code: 0x1f6ab\n    uid: 29e7f6072d5935d7818204d9b088508b\n    search: [block, deny]\n\n\n  - css: resize-full\n    code: 0xe744\n    uid: 3a3f65b92c9b2fcbb3a8dcd0d42ee806\n    search: [resize, fullscreen]\n  - css: resize-small\n    code: 0xe746\n    uid: 108c8ac13badc00ce66da014436e6eb1\n    search: [resize]\n\n\n  - css: popup\n    code: 0xe74c\n    uid: 9248ce8062fb4707a6919bfe9ac1af8e\n    search: [popup, window]\n\n  - css: publish\n    code: 0xe74d\n    uid: 77bcf90f0c68635bab5abfb4ed736696\n    search: [publish]\n\n  - css: window\n    code: 0xe74e\n    uid: 744a71fe4b5ab7c4f4b7cd598e9bf75a\n    search: [window]\n\n\n  - css: arrow-combo\n    code: 0xe74f\n    uid: 0a3192de65a73ca1501b073ad601f87d\n    search: [arrow, dropdown, combobox]\n\n\n\n    # Arrows\n  - css: down-circled\n    code: 0xe758\n    uid: 40ef3542646bed70cb63f1290c9d98c9\n    search: [arrow, down, download]\n  - css: left-circled\n    code: 0xe759\n    uid: 0db0310883e0bdacfd1bb2d394238e8a\n    search: [arrow, left]\n  - css: right-circled\n    code: 0xe75a\n    uid: 52725ff4d4042964bd3a60609bf3695b\n    search: [arrow, right]\n  - css: up-circled\n    code: 0xe75b\n    uid: 64691230b90991883f94c6dfb2afc90a\n    search: [arrow, up, upload]\n\n\n    # Arrows\n  - css: down-open\n    code: 0xe75c\n    uid: 8704cd847a47b64265b8bb110c8b4d62\n    search: [arrow, down]\n  - css: left-open\n    code: 0xe75d\n    uid: c311c48d79488965b0fab7f9cd12b6b5\n    search: [arrow, left]\n  - css: right-open\n    code: 0xe75e\n    uid: 749e7d90a9182938180f1d2d8c33584e\n    search: [arrow, right]\n  - css: up-open\n    code: 0xe75f\n    uid: 9c7ff134960bb5a82404e4aeaab366d9\n    search: [arrow, up]\n\n  - css: down-open-mini\n    code: 0xe760\n    uid: f11c9e95ae5eaa84d193e8fa1d38c6f9\n    search: [arrow, down]\n  - css: left-open-mini\n    code: 0xe761\n    uid: 592717bd601645d61517d2a584d04127\n    search: [arrow, left]\n  - css: right-open-mini\n    code: 0xe762\n    uid: 37f6cfbb4062ed0d01b351ec35c334ff\n    search: [arrow, right]\n  - css: up-open-mini\n    code: 0xe763\n    uid: 9e251fb8e9e1c71ab09683468e0479a3\n    search: [arrow, up]\n\n  - css: down-open-big\n    code: 0xe764\n    uid: 289b5f92f23acf1059c93fbf401c1ad5\n    search: [arrow, down]\n  - css: left-open-big\n    code: 0xe765\n    uid: 884cfc3e6e2d456dd2a2ca0dbb9e6337\n    search: [arrow, left]\n  - css: right-open-big\n    code: 0xe766\n    uid: 004882ab2d5c418c5b2060e80596279b\n    search: [arrow, right]\n  - css: up-open-big\n    code: 0xe767\n    uid: 0805cca616b3c12714f35af4d0912c10\n    search: [arrow, up]\n\n\n    # Arrows\n  - css: down\n    code: 0x2b07\n    uid: d5098cb09be5827a2911dbab5af49ad2\n    search: [arrow, down]\n  - css: left\n    code: 0x2b05\n    uid: 6acd5cf005d48f96787350e72bd45688\n    search: [arrow, left]\n  - css: right\n    code: 0x27a1\n    uid: 9e67bfab0143d9511f8eef6897caeb88\n    search: [arrow, right]\n  - css: up\n    code: 0x2b06\n    uid: 43c4064ec1260d0e55c37e0467c75cbb\n    search: [arrow, up]\n\n\n    # Arrows\n  - css: down-dir\n    code: 0x25be\n    uid: 7e89c12b577c31bc91bfb61bb597f01f\n    search: [arrow, down]\n  - css: left-dir\n    code: 0x25c2\n    uid: 9aeaf29161eb005a308bbd624d6e066a\n    search: [arrow, left]\n  - css: right-dir\n    code: 0x25b8\n    uid: ff9a85aa20950dcc0615a2707a2b3f8e\n    search: [arrow, right]\n  - css: up-dir\n    code: 0x25b4\n    uid: 401b644723fb2f20b0df30cce7745c18\n    search: [arrow, up]\n\n\n    # Arrows\n  - css: down-bold\n    code: 0xe4b0\n    uid: 78944e4652d6f9b8b506eaef331308cd\n    search: [arrow, down]\n  - css: left-bold\n    code: 0xe4ad\n    uid: 0222089fb4194cc714dcc1ffd2525c11\n    css: left-bold\n    search: [arrow, left]\n  - css: right-bold\n    code: 0xe4ae\n    uid: 1a90b06af8614b12d8c8a5b90cc19ab3\n    search: [arrow, right]\n  - css: up-bold\n    code: 0xe4af\n    uid: 8c8f768607b8fc4c92c0f85b488e87e8\n    search: [arrow, up]\n\n\n    # Arrows\n  - css: down-thin\n    code: 0x2193\n    uid: a30a32d49f80bb534c062ae1743ef433\n    search: [arrow, down]\n  - css: left-thin\n    code: 0x2190\n    uid: 8d8f4722d16e95290858eaf294d9d830\n    search: [arrow, left]\n  - css: right-thin\n    code: 0x2192\n    uid: ef3eda51383ce050517892df3fc05ffc\n    search: [arrow, right]\n  - css: up-thin\n    code: 0x2191\n    uid: dbc97808cba7d0c135c7054e7a85fb86\n    search: [arrow, up]\n\n\n\n  - css: ccw\n    code: 0x27f2\n    uid: 465bb89b6f204234e5787c326b4ae54c\n    search: [reload, undo, arrow]\n\n  - css: cw\n    code: 0x27f3\n    uid: bb46b15cb78cc4cc05d3d715d522ac4d\n    search: [reload, redo, repeat]\n\n  - css: arrows-ccw\n    code: 0x1f504\n    uid: 3bd18d47a12b8709e9f4fe9ead4f7518\n    search: [circle, sync, reload, refresh]\n\n\n  - css: level-down\n    code: 0x21b3\n    uid: fa0118a65fc8dee739469f6901bbd189\n    search: [down]\n\n  - css: level-up\n    code: 0x21b0\n    uid: 5308d824454af8ec7835786e272361a9\n    search: [back, return]\n\n\n  - css: shuffle\n    code: 0x1f500\n    uid: 3d349daaea304032a7669b4f24931b6c\n    search: [shuffle, random]\n\n  - css: loop\n    code: 0x1f501\n    uid: 8e0220796066428d6ddea96a4f1b5131\n    search: [loop, repeat]\n\n  - css: switch\n    code: 0x21c6\n    uid: f0eac0958921fe45b85d01b79d76e86b\n    search: [switch, exchange]\n\n\n    # Player\n  - css: play\n    code: 0x25b6\n    uid: cb13afd4722a849d48056540bb74c47e\n    search: [play, player]\n  - css: stop\n    code: 0x25a0\n    uid: 48f2e18872fe74d4579a4c8a1527fc1e\n    search: [stop, player]\n  - css: pause\n    code: 0x2389\n    from: 0x2016\n    uid: d8d378d0ce413f231dfa37592e39c227\n    search: [pause, player]\n  - css: record\n    code: 0x26ab\n    from: 0x25cf\n    uid: e188c02f740feff7e2d2bce1950b75fa\n    search: [record, player]\n  - css: to-end\n    code: 0x23ed\n    uid: 0afbb00323696f49e9c47f4d9fe6390b\n    search: [right, player]\n  - css: to-start\n    code: 0x23ee\n    uid: ceefe7653a4f6edaacce9e7f196cec5a\n    search: [left, player]\n  - css: fast-forward\n    code: 0x23e9\n    uid: 18f7c393e3532e40edd45607c9d99988\n    search: [right, player]\n  - css: fast-backward\n    code: 0x23ea\n    uid: 85806fd8ab907f45d34f976354a0df23\n    search: [left, player]\n\n\n    # Progress\n  - css: progress-0\n    code: 0xe768\n    uid: be998d5ee625a58912ae630f34cc8419\n    search: [progress, charge]\n  - css: progress-1\n    code: 0xe769\n    uid: 054519608bca087aa306252471dda9c4\n    search: [progress, charge]\n  - css: progress-2\n    code: 0xe76a\n    uid: 3e49435dd1950a0b7543e13256c89e52\n    search: [progress, charge]\n  - css: progress-3\n    code: 0xe76b\n    uid: d924bc68683f68ecf5e09e49731fd59a\n    search: [progress, charge]\n\n\n\n  - css: target\n    code: 0x1f3af\n    uid: 3eadc3e443cf1c7e17f1b44d21254c00\n    search: [target]\n\n  - css: palette\n    code: 0x1f3a8\n    uid: 80451d627470ea7f977a263fdb771d7b\n    search: [palette]\n\n\n  - css: list\n    code: 0xe005\n    uid: 3626b3f3a0b284e7f4166b815719aece\n    search: [list]\n\n  - css: list-add\n    code: 0xe003\n    uid: 97bd5542ed3e143d2ee9b60e14487615\n    search: [add, list]\n\n\n  - css: signal\n    code: 0x1f4f6\n    uid: 84a7262985600b683bbab0da9298776d\n    search: [broadcast, wifi, signal]\n\n\n\n  - css: trophy\n    code: 0x1f3c6\n    uid: 978aa8facd816df874039e139cb0cdde\n    search: [top, trophy]\n\n\n  - css: battery\n    code: 0x1f50b\n    uid: a51290161c48d96d7f2e2151a4cbcde1\n    search: [battery]\n\n  - css: back-in-time\n    code: 0xe771\n    uid: 89eb512cb82a1c3fe83cb16134f9876c\n    search: [back, time]\n\n\n\n  - css: monitor\n    code: 0x1f4bb\n    uid: b7a336095aa4535c3689cb557edf23db\n    search: [tv, screen, monitor]\n\n  - css: mobile\n    code: 0x1f4f1\n    uid: 767fede84586366cd7d6c835be745454\n    search: [mobile, iphone]\n\n  - css: network\n    code: 0xe776\n    uid: 414fe97e4af5215a06d29be0f2cecdf5\n    search: [net]\n\n  - code: 0x1f4bf\n    uid: 16f88519423df34fc5c48be7ded81b8f\n    css: cd\n    search: [cd, vinyl]\n\n  - css: inbox\n    code: 0xe777\n    uid: b32d88adf7cd6bfa8d0e177dfa642a4d\n    search: [inbox]\n\n  - css: install\n    code: 0xe778\n    uid: d83b7429002f7b0b206c8d550034212b\n    search: [install]\n\n\n  - css: globe\n    code: 0x1f30e\n    uid: 6a12c2b74456ea21cc984e11dec227a1\n    search: [globe]\n\n  - css: cloud\n    code: 0x2601\n    uid: 114fed43140e2b5ce42c48b95c19375b\n    search: [cloud]\n\n  - css: cloud-thunder\n    code: 0x26c8\n    uid: 66a40c7c0ee5ea61f4b6aa0dd0f9ebb9\n    search: [cloud, thunder, bolt]\n\n  - css: flash\n    code: 0x26a1\n    uid: 98c63f6b98c543b52d4c43bcd486d28f\n    search: [flash, bolt]\n\n  - css: moon\n    code: 0x263d\n    uid: 0d03db7afd4857accf1821efdc8ea72b\n    search: [moon, sleep]\n\n  - css: flight\n    code: 0x2708\n    uid: 6e8aea8fff9525dfc5149f0c03669091\n    search: [flight, plane, airplane, fly]\n\n  - css: paper-plane\n    code: 0xe79b\n    from: 0x1f53f\n    uid: db112402805d9dadc01ce009fbfdb914\n    search: [paper, plane, fly]\n\n\n  - css: leaf\n    code: 0x1f342\n    uid: 41d534223ef447a01af3e2f629ec70eb\n    search: [leaf]\n\n  - css: lifebuoy\n    code: 0xe788\n    uid: 2f9f67ee4354feef8c1f51e03bac6ef3\n    search: [lifebuoy]\n\n  - css: mouse\n    code: 0xe789\n    uid: 97c6901d8db077614e77b089d4eedac8\n    search: [mouse, website]\n\n  - css: briefcase\n    code: 0x1f4bc\n    uid: 9ea7cce5e08e5ac2c225fabf2e6dc353\n    search: [briefcase]\n\n  - css: suitcase\n    code: 0xe78e\n    uid: 11dd26ebf6934bf750a9156b353d7f2d\n    from: 0x1f6c6\n    search: [suitcase]\n\n\n  - css: dot\n    code: 0xe78b\n    from: 0x23f4\n    uid: d2c6b59d9a239140cb76be0627480855\n    search: [dot]\n  - css: dot-2\n    code: 0xe78c\n    from: 0x23f5\n    uid: 13b11ab72c6ae9c97ee12428e17f3a4e\n    search: [dot, flickr]\n  - css: dot-3\n    code: 0xe78d\n    from: 0x23f6\n    uid: d10920db2e79c997c5e783279291970c\n    search: [dot]\n\n\n\n  - css: brush\n    code: 0xe79a\n    uid: 39c4d0e225a1263a398a47523cb5b9bd\n    search: [brush]\n\n  - css: magnet\n    code: 0xe7a1\n    uid: d55e21e6468c04c5ca38a6560b27d1aa\n    search: [magnet]\n\n  - css: infinity\n    code: 0x221e\n    uid: 34ba50fe8e4f95e7f3d76c6534814a70\n    search: [infinity]\n\n\n  - css: erase\n    code: 0x232b\n    uid: e8239f8188c76c925be4bd1bbcc013ac\n    search: [erase]\n\n\n  - css: chart-pie\n    code: 0xe751\n    from: 0x25f4\n    uid: fb5082fac1794b69a1381196219a836e\n    search: [chart, pie, diagram]\n\n  - css: chart-line\n    code: 0x1f4c8\n    uid: 7184d8171b6a9b18eabbace94cca21db\n    search: [chart, graph, line, diagram]\n\n  - css: chart-bar\n    code: 0x1f4ca\n    uid: 7d90b6cb3f3783170a96b09e5f0de6d5\n    search: [chart, bar, diagram]\n\n  - css: chart-area\n    code: 0x1f53e\n    uid: 32b4054f35918992f723e39f4095f005\n    search: [chart, area, diagram]\n\n\n  - css: tape\n    code: 0x2707\n    uid: ed62f5f10b256b0a959e6c847ed8f4a6\n    search: [tape, voice mail]\n\n\n  - css: graduation-cap\n    code: 0x1f393\n    uid: ef74ff62feda486fd414410e782b598a\n    search: [graduation]\n\n  - css: language\n    code: 0xe752\n    from: 0x1f394\n    uid: ddecf5ad7935e3fb1b70dac6ed00d06a\n    search: [language, translate]\n\n  - css: ticket\n    code: 0x1f3ab\n    uid: 333bae7aaf7395d1004875be5a075661\n    search: [ticket]\n\n  - css: water\n    code: 0x1f4a6\n    uid: 36a1cee80657a9c66e8384dd57bed66c\n    search: [whater, wash]\n\n  - css: droplet\n    code: 0x1f4a7\n    uid: 4efb719e797c54b3c58e5ae061d29d53\n    search: [droplet, tint]\n\n  - css: air\n    code: 0xe753\n    from: 0x1f4a8\n    uid: 5f3a0ebf2d13f60ec7ed76eb41ba9bb2\n    search: []\n\n  - css: credit-card\n    code: 0x1f4b3\n    uid: c5cd6ea1981cecdd85c42d9d209bc3b8\n    search: [card, plastic, credit]\n\n  - css: floppy\n    code: 0x1f4be\n    uid: 191bcf63575a78def53c907c3d3bf7f0\n    search: [floppy, save]\n\n  - css: clipboard\n    code: 0x1f4cb\n    uid: b95cfc96d48a72dd665e0ab109880b5e\n    search: [clipboard]\n\n  - css: megaphone\n    code: 0x1f4e3\n    uid: 489090690d8bd1745e365485946e20a8\n    search: [megaphone, bullhorn]\n\n  - css: database\n    code: 0xe754\n    from: 0x1f4f8\n    uid: 248db7c0563d8cee80b7041f7736dcad\n    search: [database]\n\n  - css: drive\n    code: 0xe755\n    from: 0x1f4fd\n    uid: 603d5ccab42d916e79d7c0fcdb56a614\n    search: [drive, disk, hdd]\n\n  - css: bucket\n    code: 0xe756\n    from: 0x1f4fe\n    uid: 8ea66d97faf9816abd34f48f3f26d216\n    search: [bucket]\n\n  - css: thermometer\n    code: 0xe757\n    from: 0x1f4ff\n    uid: d4939d1f4e5f03f6e58900b2ac8f1c6c\n    search: [thermometer]\n\n  - css: key\n    code: 0x1f511\n    uid: 8beac4a5fd5bed9f82ca7a96cc8ba218\n    search: [key, password]\n\n  - css: flow-cascade\n    code: 0xe790\n    from: 0x1f568\n    uid: 898ddc67cb7d9ae53dbd4cce78043e9e\n    search: [flow, cascade, junction]\n  - css: flow-branch\n    code: 0xe791\n    from: 0x1f569\n    uid: 4bcb3aaa98736be3027bef7c76c55021\n    search: [flow, branch, junction]\n  - css: flow-tree\n    code: 0xe792\n    from: 0x1f56a\n    uid: 8a1d446e5555e76f82ddb1c8b526f579\n    search: [flow, tree, junction]\n  - css: flow-line\n    code: 0xe793\n    from: 0x1f56b\n    uid: 6cea40aa6cc50057083e4f0a5b92410c\n    search: [flow, line, junction]\n  - css: flow-parallel\n    code: 0xe794\n    from: 0x1f56c\n    uid: 5f88095dc5e638863a0c733e99c32568\n    search: [flow, parallel, junction]\n\n  - css: rocket\n    code: 0x1f680\n    uid: 9c7fd7637a41b59a358cb70893f945a5\n    search: [rocket, fly]\n\n  - css: gauge\n    code: 0xe7a2\n    from: 0x1f6c7\n    uid: 3a6f0140c3a390bdb203f56d1bfdefcb\n    search: [gauge, meter, speed, indicator]\n\n  - css: traffic-cone\n    code: 0xe7a3\n    from: 0x1f6c8\n    uid: 2bbde1076919db3d1dcc7f6b43d19bd4\n    search: []\n\n\n\n  # Creative Commons\n  #\n  - css: cc\n    code: 0xe7a5\n    from: 0x1f545\n    uid: 4a413ef43c364dafa42766e74c31bbca\n    search: [creative, cc, licence]\n\n  - css: cc-by\n    code: 0xe7a6\n    from: 0x1f546\n    uid: 72681d2825fef7fd83711278f845547b\n    search: [creative, cc, licence]\n\n  - css: cc-nc\n    code: 0xe7a7\n    from: 0x1f547\n    uid: 7540520e12e941839cdb7d76b12e82a8\n    search: [creative, cc, licence]\n\n  - css: cc-nc-eu\n    code: 0xe7a8\n    from: 0x1f548\n    uid: 2d741e29010c6afbfc3784251fbf4e8b\n    search: [creative, cc, licence]\n\n  - css: cc-nc-jp\n    code: 0xe7a9\n    from: 0x1f549\n    uid: 3138d5e10d50279c6d97ad1c99fdb584\n    search: [creative, cc, licence]\n\n  - css: cc-sa\n    code: 0xe7aa\n    uid: 900851106d63af1bc6076ae118dc543d\n    from: 0x1f54a\n    search: [creative, cc, licence]\n\n  - css: cc-nd\n    code: 0xe7ab\n    from: 0x1f54b\n    uid: b92e2a918daa2f9a042df1ce942b686f\n    search: [creative, cc, licence]\n\n  - css: cc-pd\n    code: 0xe7ac\n    from: 0x1f54c\n    uid: 49679f26492c29c7bc277f1de9249229\n    search: [creative, cc, licence]\n\n  - css: cc-zero\n    code: 0xe7ad\n    from: 0x1f54d\n    uid: 94914cbbfba692ebbc13c179d62355f7\n    search: [creative, cc, licence]\n\n  - css: cc-share\n    code: 0xe7ae\n    from: 0x1f54e\n    uid: 915c11e4e2e713cc7d65d32d66f004bf\n    search: [creative, cc, licence]\n\n  - css: cc-remix\n    code: 0xe7af\n    from: 0x1f54f\n    uid: 0cd7be54280d9ffbe0f48342c011268e\n    search: [creative, cc, licence]\n\n\n\n  # Social / logos\n  #\n\n  - css: github\n    code: 0xf300\n    uid: d94334f23acba022bfd68e49d76b31bb\n    search: [github, social, logo]\n\n  - css: github-circled\n    code: 0xf301\n    uid: 91daf8fde1042a363514ca7e42d89570\n    search: [github, social, logo]\n\n  - css: flickr\n    code: 0xf303\n    uid: 14cfd18cc1dd5fb99ba04311b888bc23\n    search: [flickr, social, logo]\n\n  - css: flickr-circled\n    code: 0xf304\n    uid: 5bbd46b2a0b972533f4d3ef243645e1d\n    search: [flickr, social, logo]\n\n  - css: vimeo\n    code: 0xf306\n    uid: 538531af0e023b15882c505ee2297cbe\n    search: [vimeo, social, logo]\n\n  - css: vimeo-circled\n    code: 0xf307\n    uid: 6569bd1801e232180221ba0f6a4b8b27\n    search: [vimeo, social, logo]\n\n  - css: twitter\n    code: 0xf309\n    uid: d090355c31f497b61d676416c1fd39fb\n    search: [twitter, social, logo]\n\n  - css: twitter-circled\n    code: 0xf30a\n    uid: 0419da6446cb4f31093e2022793571ca\n    search: [twitter, social, logo]\n\n  - css: facebook\n    code: 0xf30c\n    uid: bc50457410acf467b8b5721240768742\n    search: [facebook, social, logo]\n\n  - css: facebook-circled\n    code: 0xf30d\n    uid: ce1d525f3f31024c6a6b38f5e9a88953\n    search: [facebook, social, logo]\n\n  - css: facebook-squared\n    code: 0xf30e\n    uid: 47bd87a650e95b97f947d275ed968efe\n    search: [facebook, social, logo]\n\n  - css: gplus\n    code: 0xf30f\n    uid: b945f4ac2439565661e8e4878e35d379\n    search: [google, plus, social, logo]\n\n  - css: gplus-circled\n    code: 0xf310\n    uid: 818a6c2a76c89800632c0335e9cdafee\n    search: [google, plus, social, logo]\n\n  - css: pinterest\n    code: 0xf312\n    uid: 689febe699d74bc8862965555503e445\n    search: [pinterest, social, logo]\n\n  - css: pinterest-circled\n    code: 0xf313\n    uid: 2e9c0fdd4d59598cb122801ab80222e7\n    search: [pinterest, social, logo]\n\n  - css: tumblr\n    code: 0xf315\n    uid: d491462e64eb5b8c4f064108a2ff1780\n    search: [tumblr, social, logo]\n\n  - css: tumblr-circled\n    code: 0xf316\n    uid: 72a6237752f5cd00a107d097adac9ce3\n    search: [tumblr, social, logo]\n\n  - css: linkedin\n    code: 0xf318\n    uid: 7132e1233bc16cd1b6efe7e29d3613a5\n    search: [linkedin, social, logo]\n\n  - css: linkedin-circled\n    code: 0xf319\n    uid: 21adad41ffebf469b2370d26bcb8a3c4\n    search: [linkedin, social, logo]\n\n  - css: dribbble\n    code: 0xf31b\n    uid: e8d13cd05bd63219329b2b61835d776c\n    search: [dribbble, social, logo]\n\n  - css: dribbble-circled\n    code: 0xf31c\n    uid: ec3e0b50a56867ac26a6de47953b9831\n    search: [dribbble, social, logo]\n\n  - css: stumbleupon\n    code: 0xf31e\n    uid: ef5e2b339a93fff038cc6a28f8c91edd\n    search: [stumbleupon, social, logo]\n\n  - css: stumbleupon-circled\n    code: 0xf31f\n    uid: e3606432570e59d4d852727bad063cd1\n    search: [stumbleupon, social, logo]\n\n  - css: lastfm\n    code: 0xf321\n    uid: ae49d5a5d0c2f7253f375bde5f0da2d2\n    search: [lastfm, social, logo]\n\n  - css: lastfm-circled\n    code: 0xf322\n    uid: 9eedcbf6e07d6ba820e3e22f5ab6f734\n    search: [lastfm, social, logo]\n\n  - css: rdio\n    code: 0xf324\n    uid: 406d96226bd9d021b7d976efa1c4a061\n    search: [rdio, social, logo]\n\n  - css: rdio-circled\n    code: 0xf325\n    uid: 4d8e1f1173bab9aac8991e9eee2fa326\n    search: [rdio, social, logo]\n\n  - css: spotify\n    code: 0xf327\n    uid: 882d407598d4e60074f5c08b3372811e\n    search: [spotify, social, logo]\n\n  - css: spotify-circled\n    code: 0xf328\n    uid: 067edf3e1f6458e782d0254e63eb5eb6\n    search: [spotify, social, logo]\n\n  - css: qq\n    code: 0xf32a\n    uid: 935e2e437efbb3a69ed9a83e2d2f637e\n    search: [qq, social, logo]\n\n  - css: instagrem\n    code: 0xf32d\n    uid: 0fbfb1cd7a847c88ea4c141d0e1bbdb5\n    search: [instagrem, social, logo]\n\n  - css: dropbox\n    code: 0xf330\n    uid: b22fdf6cbaa9c54fbb0bc9abb0ed4098\n    search: [dropbox, social, logo]\n\n  - css: evernote\n    code: 0xf333\n    uid: ce291d00162e998dbf5cb81bc5edff75\n    search: [evernote, social, logo]\n\n  - css: flattr\n    code: 0xf336\n    uid: 4274fc9f6190d330fcdf61e7ad564370\n    search: [flattr, social, logo]\n\n  - css: skype\n    code: 0xf339\n    uid: 28ccaf022b8363aeaa5b86f66e1f5173\n    search: [skype, social, logo]\n\n  - css: skype-circled\n    code: 0xf33a\n    uid: 8354734770d837204e6a004885240d2e\n    search: [skype, social, logo]\n\n  - css: renren\n    code: 0xf33c\n    uid: 7fe35dea791456114c356934333b4171\n    search: [renren, social, logo]\n\n  - css: sina-weibo\n    code: 0xf33f\n    uid: d1945696d6bbbf84e388df9961f26a37\n    search: ['sina-weibo', social, logo]\n\n  - css: paypal\n    code: 0xf342\n    uid: 8d584f31a5d54de313f1f3da28708ec0\n    search: [paypal, social, logo]\n\n  - css: picasa\n    code: 0xf345\n    uid: 07269ba9c8905d091e1a01beab1f0958\n    search: [picasa, social, logo]\n\n  - css: soundcloud\n    code: 0xf348\n    uid: b86600decaba538aca184421752cd640\n    search: [soundcloud, social, logo]\n\n  - css: mixi\n    code: 0xf34b\n    uid: c510878e39f27f3fb4e6171148829962\n    search: [mixi, social, logo]\n\n  - css: behance\n    code: 0xf34e\n    uid: 84f3880057574e968053d6d6c8a7b216\n    search: [behance, social, logo]\n\n  - css: google-circles\n    code: 0xf351\n    uid: 5a24a9d2bffe3b66cea31ed2f57fb65a\n    search: [google, circles, social, logo]\n\n  - css: vkontakte\n    code: 0xf354\n    uid: c9a7eca58474311926922ff8c2c1d256\n    search: [vkontakte, social, logo]\n\n  - css: smashing\n    code: 0xf357\n    uid: 2e97984c1130787e123117d4cacc07fa\n    search: [smashing, social, logo]\n\n\n\n\n  # Specific\n\n  - css: sweden\n    code: 0xf601\n    uid: c22c5fa36d200793ad39b984fb5c8610\n    search: [sweden]\n\n  - css: db-shape\n    code: 0xf600\n    from: 0x1f5fA\n    uid: e9ede58f5f90bbc3e52bf4bf53da71c0\n    search: [entypo, daniel, bruce]\n\n  - css: logo-db\n    code: 0xf603\n    from: 0x1f5f9\n    uid: ea16996158db7b9fedf060a4f44b27ee\n    search: [daniel, bruce, megadesigner]\n\n\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/font/demo.html",
    "content": "<!DOCTYPE html><html><head><!--[if lt IE 9]><script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]--><meta charset=\"UTF-8\"><style type=\"text/css\">.clearfix {\n  *zoom: 1;\n}\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.clearfix:after {\n  clear: both;\n}\n.hide-text {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.input-block-level {\n  display: block;\n  width: 100%;\n  min-height: 30px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nnav,\nsection {\n  display: block;\n}\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n  *display: inline;\n  *zoom: 1;\n}\naudio:not([controls]) {\n  display: none;\n}\nhtml {\n  font-size: 100%;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n}\na:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\na:hover,\na:active {\n  outline: 0;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n/* Responsive images (ensure images don't scale beyond their parents) */\n  max-width: 100%;\n/* Part 1: Set a maxium relative to the parent */\n  width: auto 9;\n/* IE7-8 need help adjusting responsive images */\n  height: auto;\n/* Part 2: Scale the height according to the width, otherwise you get stretching */\n  vertical-align: middle;\n  border: 0;\n  -ms-interpolation-mode: bicubic;\n}\n#map_canvas img,\n.google-maps img {\n  max-width: none;\n}\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  font-size: 100%;\n  vertical-align: middle;\n}\nbutton,\ninput {\n  *overflow: visible;\n  line-height: normal;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\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}\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n  -webkit-appearance: none;\n}\ntextarea {\n  overflow: auto;\n  vertical-align: top;\n}\nbody {\n  margin: 0;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 20px;\n  color: #333;\n  background-color: #fff;\n}\na {\n  color: #08c;\n  text-decoration: none;\n}\na:hover {\n  color: #005580;\n  text-decoration: underline;\n}\n.img-rounded {\n  -webkit-border-radius: 6px;\n  -moz-border-radius: 6px;\n  border-radius: 6px;\n}\n.img-polaroid {\n  padding: 4px;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0,0,0,0.2);\n  -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n  -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n  box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n.img-circle {\n  -webkit-border-radius: 500px;\n  -moz-border-radius: 500px;\n  border-radius: 500px;\n}\n.row {\n  margin-left: -20px;\n  *zoom: 1;\n}\n.row:before,\n.row:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.row:after {\n  clear: both;\n}\n[class*=\"span\"] {\n  float: left;\n  min-height: 1px;\n  margin-left: 20px;\n}\n.container,\n.navbar-static-top .container,\n.navbar-fixed-top .container,\n.navbar-fixed-bottom .container {\n  width: 940px;\n}\n.span12 {\n  width: 940px;\n}\n.span11 {\n  width: 860px;\n}\n.span10 {\n  width: 780px;\n}\n.span9 {\n  width: 700px;\n}\n.span8 {\n  width: 620px;\n}\n.span7 {\n  width: 540px;\n}\n.span6 {\n  width: 460px;\n}\n.span5 {\n  width: 380px;\n}\n.span4 {\n  width: 300px;\n}\n.span3 {\n  width: 220px;\n}\n.span2 {\n  width: 140px;\n}\n.span1 {\n  width: 60px;\n}\n.offset12 {\n  margin-left: 980px;\n}\n.offset11 {\n  margin-left: 900px;\n}\n.offset10 {\n  margin-left: 820px;\n}\n.offset9 {\n  margin-left: 740px;\n}\n.offset8 {\n  margin-left: 660px;\n}\n.offset7 {\n  margin-left: 580px;\n}\n.offset6 {\n  margin-left: 500px;\n}\n.offset5 {\n  margin-left: 420px;\n}\n.offset4 {\n  margin-left: 340px;\n}\n.offset3 {\n  margin-left: 260px;\n}\n.offset2 {\n  margin-left: 180px;\n}\n.offset1 {\n  margin-left: 100px;\n}\n.row-fluid {\n  width: 100%;\n  *zoom: 1;\n}\n.row-fluid:before,\n.row-fluid:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.row-fluid:after {\n  clear: both;\n}\n.row-fluid [class*=\"span\"] {\n  display: block;\n  width: 100%;\n  min-height: 30px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  float: left;\n  margin-left: 2.127659574468085%;\n  *margin-left: 2.074468085106383%;\n}\n.row-fluid [class*=\"span\"]:first-child {\n  margin-left: 0;\n}\n.row-fluid .controls-row [class*=\"span\"] + [class*=\"span\"] {\n  margin-left: 2.127659574468085%;\n}\n.row-fluid .span12 {\n  width: 100%;\n  *width: 99.94680851063829%;\n}\n.row-fluid .span11 {\n  width: 91.48936170212765%;\n  *width: 91.43617021276594%;\n}\n.row-fluid .span10 {\n  width: 82.97872340425532%;\n  *width: 82.92553191489361%;\n}\n.row-fluid .span9 {\n  width: 74.46808510638297%;\n  *width: 74.41489361702126%;\n}\n.row-fluid .span8 {\n  width: 65.95744680851064%;\n  *width: 65.90425531914893%;\n}\n.row-fluid .span7 {\n  width: 57.44680851063829%;\n  *width: 57.39361702127659%;\n}\n.row-fluid .span6 {\n  width: 48.93617021276595%;\n  *width: 48.88297872340425%;\n}\n.row-fluid .span5 {\n  width: 40.42553191489362%;\n  *width: 40.37234042553192%;\n}\n.row-fluid .span4 {\n  width: 31.914893617021278%;\n  *width: 31.861702127659576%;\n}\n.row-fluid .span3 {\n  width: 23.404255319148934%;\n  *width: 23.351063829787233%;\n}\n.row-fluid .span2 {\n  width: 14.893617021276595%;\n  *width: 14.840425531914894%;\n}\n.row-fluid .span1 {\n  width: 6.382978723404255%;\n  *width: 6.329787234042553%;\n}\n.row-fluid .offset12 {\n  margin-left: 104.25531914893617%;\n  *margin-left: 104.14893617021275%;\n}\n.row-fluid .offset12:first-child {\n  margin-left: 102.12765957446808%;\n  *margin-left: 102.02127659574467%;\n}\n.row-fluid .offset11 {\n  margin-left: 95.74468085106382%;\n  *margin-left: 95.6382978723404%;\n}\n.row-fluid .offset11:first-child {\n  margin-left: 93.61702127659574%;\n  *margin-left: 93.51063829787232%;\n}\n.row-fluid .offset10 {\n  margin-left: 87.23404255319149%;\n  *margin-left: 87.12765957446807%;\n}\n.row-fluid .offset10:first-child {\n  margin-left: 85.1063829787234%;\n  *margin-left: 84.99999999999999%;\n}\n.row-fluid .offset9 {\n  margin-left: 78.72340425531914%;\n  *margin-left: 78.61702127659572%;\n}\n.row-fluid .offset9:first-child {\n  margin-left: 76.59574468085106%;\n  *margin-left: 76.48936170212764%;\n}\n.row-fluid .offset8 {\n  margin-left: 70.2127659574468%;\n  *margin-left: 70.10638297872339%;\n}\n.row-fluid .offset8:first-child {\n  margin-left: 68.08510638297872%;\n  *margin-left: 67.9787234042553%;\n}\n.row-fluid .offset7 {\n  margin-left: 61.70212765957446%;\n  *margin-left: 61.59574468085106%;\n}\n.row-fluid .offset7:first-child {\n  margin-left: 59.574468085106375%;\n  *margin-left: 59.46808510638297%;\n}\n.row-fluid .offset6 {\n  margin-left: 53.191489361702125%;\n  *margin-left: 53.085106382978715%;\n}\n.row-fluid .offset6:first-child {\n  margin-left: 51.063829787234035%;\n  *margin-left: 50.95744680851063%;\n}\n.row-fluid .offset5 {\n  margin-left: 44.68085106382979%;\n  *margin-left: 44.57446808510638%;\n}\n.row-fluid .offset5:first-child {\n  margin-left: 42.5531914893617%;\n  *margin-left: 42.4468085106383%;\n}\n.row-fluid .offset4 {\n  margin-left: 36.170212765957444%;\n  *margin-left: 36.06382978723405%;\n}\n.row-fluid .offset4:first-child {\n  margin-left: 34.04255319148936%;\n  *margin-left: 33.93617021276596%;\n}\n.row-fluid .offset3 {\n  margin-left: 27.659574468085104%;\n  *margin-left: 27.5531914893617%;\n}\n.row-fluid .offset3:first-child {\n  margin-left: 25.53191489361702%;\n  *margin-left: 25.425531914893618%;\n}\n.row-fluid .offset2 {\n  margin-left: 19.148936170212764%;\n  *margin-left: 19.04255319148936%;\n}\n.row-fluid .offset2:first-child {\n  margin-left: 17.02127659574468%;\n  *margin-left: 16.914893617021278%;\n}\n.row-fluid .offset1 {\n  margin-left: 10.638297872340425%;\n  *margin-left: 10.53191489361702%;\n}\n.row-fluid .offset1:first-child {\n  margin-left: 8.51063829787234%;\n  *margin-left: 8.404255319148938%;\n}\n[class*=\"span\"].hide,\n.row-fluid [class*=\"span\"].hide {\n  display: none;\n}\n[class*=\"span\"].pull-right,\n.row-fluid [class*=\"span\"].pull-right {\n  float: right;\n}\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  *zoom: 1;\n}\n.container:before,\n.container:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.container:after {\n  clear: both;\n}\n.container-fluid {\n  padding-right: 20px;\n  padding-left: 20px;\n  *zoom: 1;\n}\n.container-fluid:before,\n.container-fluid:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.container-fluid:after {\n  clear: both;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 21px;\n  font-weight: 200;\n  line-height: 30px;\n}\nsmall {\n  font-size: 85%;\n}\nstrong {\n  font-weight: bold;\n}\nem {\n  font-style: italic;\n}\ncite {\n  font-style: normal;\n}\n.muted {\n  color: #999;\n}\n.text-warning {\n  color: #c09853;\n}\na.text-warning:hover {\n  color: #a47e3c;\n}\n.text-error {\n  color: #b94a48;\n}\na.text-error:hover {\n  color: #953b39;\n}\n.text-info {\n  color: #3a87ad;\n}\na.text-info:hover {\n  color: #2d6987;\n}\n.text-success {\n  color: #468847;\n}\na.text-success:hover {\n  color: #356635;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin: 10px 0;\n  font-family: inherit;\n  font-weight: bold;\n  line-height: 20px;\n  color: inherit;\n  text-rendering: optimizelegibility;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small {\n  font-weight: normal;\n  line-height: 1;\n  color: #999;\n}\nh1,\nh2,\nh3 {\n  line-height: 40px;\n}\nh1 {\n  font-size: 38.5px;\n}\nh2 {\n  font-size: 31.5px;\n}\nh3 {\n  font-size: 24.5px;\n}\nh4 {\n  font-size: 17.5px;\n}\nh5 {\n  font-size: 14px;\n}\nh6 {\n  font-size: 11.9px;\n}\nh1 small {\n  font-size: 24.5px;\n}\nh2 small {\n  font-size: 17.5px;\n}\nh3 small {\n  font-size: 14px;\n}\nh4 small {\n  font-size: 14px;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 20px 0 30px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  padding: 0;\n  margin: 0 0 10px 25px;\n}\nul ul,\nul ol,\nol ol,\nol ul {\n  margin-bottom: 0;\n}\nli {\n  line-height: 20px;\n}\nul.unstyled,\nol.unstyled {\n  margin-left: 0;\n  list-style: none;\n}\ndl {\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 20px;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 10px;\n}\n.dl-horizontal {\n  *zoom: 1;\n}\n.dl-horizontal:before,\n.dl-horizontal:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.dl-horizontal:after {\n  clear: both;\n}\n.dl-horizontal dt {\n  float: left;\n  width: 160px;\n  clear: left;\n  text-align: right;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.dl-horizontal dd {\n  margin-left: 180px;\n}\nhr {\n  margin: 20px 0;\n  border: 0;\n  border-top: 1px solid #eee;\n  border-bottom: 1px solid #fff;\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999;\n}\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 0 0 0 15px;\n  margin: 0 0 20px;\n  border-left: 5px solid #eee;\n}\nblockquote p {\n  margin-bottom: 0;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 25px;\n}\nblockquote small {\n  display: block;\n  line-height: 20px;\n  color: #999;\n}\nblockquote small:before {\n  content: '4 \u0000A0';\n}\nblockquote.pull-right {\n  float: right;\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\nblockquote.pull-right p,\nblockquote.pull-right small {\n  text-align: right;\n}\nblockquote.pull-right small:before {\n  content: '';\n}\nblockquote.pull-right small:after {\n  content: '\u0000A0 4';\n}\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  display: block;\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 20px;\n}\nbody {\n  margin-top: 90px;\n}\n.header {\n  position: fixed;\n  top: 0;\n  left: 50%;\n  margin-left: -480px;\n  background-color: #fff;\n  border-bottom: 1px solid #ddd;\n  padding-top: 10px;\n  z-index: 10;\n}\n.the-icons li {\n  font-size: 14px;\n  line-height: 24px;\n  height: 24px;\n}\n.switch {\n  position: absolute;\n  right: 0;\n  bottom: 10px;\n  color: #888;\n}\n.switch input {\n  margin-right: 0.3em;\n}\n.codesOn .i-name {\n  display: none;\n}\n.codesOn .i-code {\n  display: inline;\n}\n.i-code {\n  display: none;\n}\n</style><style type=\"text/css\">@font-face {\n  font-family: 'entypo';\n  src: url(\"entypo.eot\");\n  src: url(\"entypo.eot?#iefix\") format('embedded-opentype'), url(\"entypo.woff\") format('woff'), url(\"entypo.ttf\") format('truetype'), url(\"entypo.svg#entypo\") format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n[class^=\"icon-\"]:before,\n[class*=\" icon-\"]:before {\n  font-family: 'entypo';\n  font-style: normal;\n  font-weight: normal;\n  speak: none;\n  display: inline-block;\n  text-decoration: inherit;\n  width: 1em;\n  margin-right: 0.2em;\n  text-align: center;\n  opacity: 0.8;\n}\n</style><style type=\"text/css\">\n.icon-note:before { content: '\\266a'; } /* '♪' */\n.icon-note-beamed:before { content: '\\266b'; } /* '♫' */\n.icon-music:before { content: '🎵'; } /* '\\1f3b5' */\n.icon-search:before { content: '🔍'; } /* '\\1f50d' */\n.icon-flashlight:before { content: '🔦'; } /* '\\1f526' */\n.icon-mail:before { content: '\\2709'; } /* '✉' */\n.icon-heart:before { content: '\\2665'; } /* '♥' */\n.icon-heart-empty:before { content: '\\2661'; } /* '♡' */\n.icon-star:before { content: '\\2605'; } /* '★' */\n.icon-star-empty:before { content: '\\2606'; } /* '☆' */\n.icon-user:before { content: '👤'; } /* '\\1f464' */\n.icon-users:before { content: '👥'; } /* '\\1f465' */\n.icon-user-add:before { content: '\\e700'; } /* '' */\n.icon-video:before { content: '🎬'; } /* '\\1f3ac' */\n.icon-picture:before { content: '🌄'; } /* '\\1f304' */\n.icon-camera:before { content: '📷'; } /* '\\1f4f7' */\n.icon-layout:before { content: '\\268f'; } /* '⚏' */\n.icon-menu:before { content: '\\2630'; } /* '☰' */\n.icon-check:before { content: '\\2713'; } /* '✓' */\n.icon-cancel:before { content: '\\2715'; } /* '✕' */\n.icon-cancel-circled:before { content: '\\2716'; } /* '✖' */\n.icon-cancel-squared:before { content: '\\274e'; } /* '❎' */\n.icon-plus:before { content: '\\2b'; } /* '+' */\n.icon-plus-circled:before { content: '\\2795'; } /* '➕' */\n.icon-plus-squared:before { content: '\\229e'; } /* '⊞' */\n.icon-minus:before { content: '\\2d'; } /* '-' */\n.icon-minus-circled:before { content: '\\2796'; } /* '➖' */\n.icon-minus-squared:before { content: '\\229f'; } /* '⊟' */\n.icon-help:before { content: '\\2753'; } /* '❓' */\n.icon-help-circled:before { content: '\\e704'; } /* '' */\n.icon-info:before { content: '\\2139'; } /* 'ℹ' */\n.icon-info-circled:before { content: '\\e705'; } /* '' */\n.icon-back:before { content: '🔙'; } /* '\\1f519' */\n.icon-home:before { content: '\\2302'; } /* '⌂' */\n.icon-link:before { content: '🔗'; } /* '\\1f517' */\n.icon-attach:before { content: '📎'; } /* '\\1f4ce' */\n.icon-lock:before { content: '🔒'; } /* '\\1f512' */\n.icon-lock-open:before { content: '🔓'; } /* '\\1f513' */\n.icon-eye:before { content: '\\e70a'; } /* '' */\n.icon-tag:before { content: '\\e70c'; } /* '' */\n.icon-bookmark:before { content: '🔖'; } /* '\\1f516' */\n.icon-bookmarks:before { content: '📑'; } /* '\\1f4d1' */\n.icon-flag:before { content: '\\2691'; } /* '⚑' */\n.icon-thumbs-up:before { content: '👍'; } /* '\\1f44d' */\n.icon-thumbs-down:before { content: '👎'; } /* '\\1f44e' */\n.icon-download:before { content: '📥'; } /* '\\1f4e5' */\n.icon-upload:before { content: '📤'; } /* '\\1f4e4' */\n.icon-upload-cloud:before { content: '\\e711'; } /* '' */\n.icon-reply:before { content: '\\e712'; } /* '' */\n.icon-reply-all:before { content: '\\e713'; } /* '' */\n.icon-forward:before { content: '\\27a6'; } /* '➦' */\n.icon-quote:before { content: '\\275e'; } /* '❞' */\n.icon-code:before { content: '\\e714'; } /* '' */\n.icon-export:before { content: '\\e715'; } /* '' */\n.icon-pencil:before { content: '\\270e'; } /* '✎' */\n.icon-feather:before { content: '\\2712'; } /* '✒' */\n.icon-print:before { content: '\\e716'; } /* '' */\n.icon-retweet:before { content: '\\e717'; } /* '' */\n.icon-keyboard:before { content: '\\2328'; } /* '⌨' */\n.icon-comment:before { content: '\\e718'; } /* '' */\n.icon-chat:before { content: '\\e720'; } /* '' */\n.icon-bell:before { content: '🔔'; } /* '\\1f514' */\n.icon-attention:before { content: '\\26a0'; } /* '⚠' */\n.icon-alert:before { content: '💥'; } /* '\\1f4a5' */\n.icon-vcard:before { content: '\\e722'; } /* '' */\n.icon-address:before { content: '\\e723'; } /* '' */\n.icon-location:before { content: '\\e724'; } /* '' */\n.icon-map:before { content: '\\e727'; } /* '' */\n.icon-direction:before { content: '\\27a2'; } /* '➢' */\n.icon-compass:before { content: '\\e728'; } /* '' */\n.icon-cup:before { content: '\\2615'; } /* '☕' */\n.icon-trash:before { content: '\\e729'; } /* '' */\n.icon-doc:before { content: '\\e730'; } /* '' */\n.icon-docs:before { content: '\\e736'; } /* '' */\n.icon-doc-landscape:before { content: '\\e737'; } /* '' */\n.icon-doc-text:before { content: '📄'; } /* '\\1f4c4' */\n.icon-doc-text-inv:before { content: '\\e731'; } /* '' */\n.icon-newspaper:before { content: '📰'; } /* '\\1f4f0' */\n.icon-book-open:before { content: '📖'; } /* '\\1f4d6' */\n.icon-book:before { content: '📕'; } /* '\\1f4d5' */\n.icon-folder:before { content: '📁'; } /* '\\1f4c1' */\n.icon-archive:before { content: '\\e738'; } /* '' */\n.icon-box:before { content: '📦'; } /* '\\1f4e6' */\n.icon-rss:before { content: '\\e73a'; } /* '' */\n.icon-phone:before { content: '📞'; } /* '\\1f4de' */\n.icon-cog:before { content: '\\2699'; } /* '⚙' */\n.icon-tools:before { content: '\\2692'; } /* '⚒' */\n.icon-share:before { content: '\\e73c'; } /* '' */\n.icon-shareable:before { content: '\\e73e'; } /* '' */\n.icon-basket:before { content: '\\e73d'; } /* '' */\n.icon-bag:before { content: '👜'; } /* '\\1f45c' */\n.icon-calendar:before { content: '📅'; } /* '\\1f4c5' */\n.icon-login:before { content: '\\e740'; } /* '' */\n.icon-logout:before { content: '\\e741'; } /* '' */\n.icon-mic:before { content: '🎤'; } /* '\\1f3a4' */\n.icon-mute:before { content: '🔇'; } /* '\\1f507' */\n.icon-sound:before { content: '🔊'; } /* '\\1f50a' */\n.icon-volume:before { content: '\\e742'; } /* '' */\n.icon-clock:before { content: '🕔'; } /* '\\1f554' */\n.icon-hourglass:before { content: '\\23f3'; } /* '⏳' */\n.icon-lamp:before { content: '💡'; } /* '\\1f4a1' */\n.icon-light-down:before { content: '🔅'; } /* '\\1f505' */\n.icon-light-up:before { content: '🔆'; } /* '\\1f506' */\n.icon-adjust:before { content: '\\25d1'; } /* '◑' */\n.icon-block:before { content: '🚫'; } /* '\\1f6ab' */\n.icon-resize-full:before { content: '\\e744'; } /* '' */\n.icon-resize-small:before { content: '\\e746'; } /* '' */\n.icon-popup:before { content: '\\e74c'; } /* '' */\n.icon-publish:before { content: '\\e74d'; } /* '' */\n.icon-window:before { content: '\\e74e'; } /* '' */\n.icon-arrow-combo:before { content: '\\e74f'; } /* '' */\n.icon-down-circled:before { content: '\\e758'; } /* '' */\n.icon-left-circled:before { content: '\\e759'; } /* '' */\n.icon-right-circled:before { content: '\\e75a'; } /* '' */\n.icon-up-circled:before { content: '\\e75b'; } /* '' */\n.icon-down-open:before { content: '\\e75c'; } /* '' */\n.icon-left-open:before { content: '\\e75d'; } /* '' */\n.icon-right-open:before { content: '\\e75e'; } /* '' */\n.icon-up-open:before { content: '\\e75f'; } /* '' */\n.icon-down-open-mini:before { content: '\\e760'; } /* '' */\n.icon-left-open-mini:before { content: '\\e761'; } /* '' */\n.icon-right-open-mini:before { content: '\\e762'; } /* '' */\n.icon-up-open-mini:before { content: '\\e763'; } /* '' */\n.icon-down-open-big:before { content: '\\e764'; } /* '' */\n.icon-left-open-big:before { content: '\\e765'; } /* '' */\n.icon-right-open-big:before { content: '\\e766'; } /* '' */\n.icon-up-open-big:before { content: '\\e767'; } /* '' */\n.icon-down:before { content: '\\2b07'; } /* '⬇' */\n.icon-left:before { content: '\\2b05'; } /* '⬅' */\n.icon-right:before { content: '\\27a1'; } /* '➡' */\n.icon-up:before { content: '\\2b06'; } /* '⬆' */\n.icon-down-dir:before { content: '\\25be'; } /* '▾' */\n.icon-left-dir:before { content: '\\25c2'; } /* '◂' */\n.icon-right-dir:before { content: '\\25b8'; } /* '▸' */\n.icon-up-dir:before { content: '\\25b4'; } /* '▴' */\n.icon-down-bold:before { content: '\\e4b0'; } /* '' */\n.icon-left-bold:before { content: '\\e4ad'; } /* '' */\n.icon-right-bold:before { content: '\\e4ae'; } /* '' */\n.icon-up-bold:before { content: '\\e4af'; } /* '' */\n.icon-down-thin:before { content: '\\2193'; } /* '↓' */\n.icon-left-thin:before { content: '\\2190'; } /* '←' */\n.icon-right-thin:before { content: '\\2192'; } /* '→' */\n.icon-up-thin:before { content: '\\2191'; } /* '↑' */\n.icon-ccw:before { content: '\\27f2'; } /* '⟲' */\n.icon-cw:before { content: '\\27f3'; } /* '⟳' */\n.icon-arrows-ccw:before { content: '🔄'; } /* '\\1f504' */\n.icon-level-down:before { content: '\\21b3'; } /* '↳' */\n.icon-level-up:before { content: '\\21b0'; } /* '↰' */\n.icon-shuffle:before { content: '🔀'; } /* '\\1f500' */\n.icon-loop:before { content: '🔁'; } /* '\\1f501' */\n.icon-switch:before { content: '\\21c6'; } /* '⇆' */\n.icon-play:before { content: '\\25b6'; } /* '▶' */\n.icon-stop:before { content: '\\25a0'; } /* '■' */\n.icon-pause:before { content: '\\2389'; } /* '⎉' */\n.icon-record:before { content: '\\26ab'; } /* '⚫' */\n.icon-to-end:before { content: '\\23ed'; } /* '⏭' */\n.icon-to-start:before { content: '\\23ee'; } /* '⏮' */\n.icon-fast-forward:before { content: '\\23e9'; } /* '⏩' */\n.icon-fast-backward:before { content: '\\23ea'; } /* '⏪' */\n.icon-progress-0:before { content: '\\e768'; } /* '' */\n.icon-progress-1:before { content: '\\e769'; } /* '' */\n.icon-progress-2:before { content: '\\e76a'; } /* '' */\n.icon-progress-3:before { content: '\\e76b'; } /* '' */\n.icon-target:before { content: '🎯'; } /* '\\1f3af' */\n.icon-palette:before { content: '🎨'; } /* '\\1f3a8' */\n.icon-list:before { content: '\\e005'; } /* '' */\n.icon-list-add:before { content: '\\e003'; } /* '' */\n.icon-signal:before { content: '📶'; } /* '\\1f4f6' */\n.icon-trophy:before { content: '🏆'; } /* '\\1f3c6' */\n.icon-battery:before { content: '🔋'; } /* '\\1f50b' */\n.icon-back-in-time:before { content: '\\e771'; } /* '' */\n.icon-monitor:before { content: '💻'; } /* '\\1f4bb' */\n.icon-mobile:before { content: '📱'; } /* '\\1f4f1' */\n.icon-network:before { content: '\\e776'; } /* '' */\n.icon-cd:before { content: '💿'; } /* '\\1f4bf' */\n.icon-inbox:before { content: '\\e777'; } /* '' */\n.icon-install:before { content: '\\e778'; } /* '' */\n.icon-globe:before { content: '🌎'; } /* '\\1f30e' */\n.icon-cloud:before { content: '\\2601'; } /* '☁' */\n.icon-cloud-thunder:before { content: '\\26c8'; } /* '⛈' */\n.icon-flash:before { content: '\\26a1'; } /* '⚡' */\n.icon-moon:before { content: '\\263d'; } /* '☽' */\n.icon-flight:before { content: '\\2708'; } /* '✈' */\n.icon-paper-plane:before { content: '\\e79b'; } /* '' */\n.icon-leaf:before { content: '🍂'; } /* '\\1f342' */\n.icon-lifebuoy:before { content: '\\e788'; } /* '' */\n.icon-mouse:before { content: '\\e789'; } /* '' */\n.icon-briefcase:before { content: '💼'; } /* '\\1f4bc' */\n.icon-suitcase:before { content: '\\e78e'; } /* '' */\n.icon-dot:before { content: '\\e78b'; } /* '' */\n.icon-dot-2:before { content: '\\e78c'; } /* '' */\n.icon-dot-3:before { content: '\\e78d'; } /* '' */\n.icon-brush:before { content: '\\e79a'; } /* '' */\n.icon-magnet:before { content: '\\e7a1'; } /* '' */\n.icon-infinity:before { content: '\\221e'; } /* '∞' */\n.icon-erase:before { content: '\\232b'; } /* '⌫' */\n.icon-chart-pie:before { content: '\\e751'; } /* '' */\n.icon-chart-line:before { content: '📈'; } /* '\\1f4c8' */\n.icon-chart-bar:before { content: '📊'; } /* '\\1f4ca' */\n.icon-chart-area:before { content: '🔾'; } /* '\\1f53e' */\n.icon-tape:before { content: '\\2707'; } /* '✇' */\n.icon-graduation-cap:before { content: '🎓'; } /* '\\1f393' */\n.icon-language:before { content: '\\e752'; } /* '' */\n.icon-ticket:before { content: '🎫'; } /* '\\1f3ab' */\n.icon-water:before { content: '💦'; } /* '\\1f4a6' */\n.icon-droplet:before { content: '💧'; } /* '\\1f4a7' */\n.icon-air:before { content: '\\e753'; } /* '' */\n.icon-credit-card:before { content: '💳'; } /* '\\1f4b3' */\n.icon-floppy:before { content: '💾'; } /* '\\1f4be' */\n.icon-clipboard:before { content: '📋'; } /* '\\1f4cb' */\n.icon-megaphone:before { content: '📣'; } /* '\\1f4e3' */\n.icon-database:before { content: '\\e754'; } /* '' */\n.icon-drive:before { content: '\\e755'; } /* '' */\n.icon-bucket:before { content: '\\e756'; } /* '' */\n.icon-thermometer:before { content: '\\e757'; } /* '' */\n.icon-key:before { content: '🔑'; } /* '\\1f511' */\n.icon-flow-cascade:before { content: '\\e790'; } /* '' */\n.icon-flow-branch:before { content: '\\e791'; } /* '' */\n.icon-flow-tree:before { content: '\\e792'; } /* '' */\n.icon-flow-line:before { content: '\\e793'; } /* '' */\n.icon-flow-parallel:before { content: '\\e794'; } /* '' */\n.icon-rocket:before { content: '🚀'; } /* '\\1f680' */\n.icon-gauge:before { content: '\\e7a2'; } /* '' */\n.icon-traffic-cone:before { content: '\\e7a3'; } /* '' */\n.icon-cc:before { content: '\\e7a5'; } /* '' */\n.icon-cc-by:before { content: '\\e7a6'; } /* '' */\n.icon-cc-nc:before { content: '\\e7a7'; } /* '' */\n.icon-cc-nc-eu:before { content: '\\e7a8'; } /* '' */\n.icon-cc-nc-jp:before { content: '\\e7a9'; } /* '' */\n.icon-cc-sa:before { content: '\\e7aa'; } /* '' */\n.icon-cc-nd:before { content: '\\e7ab'; } /* '' */\n.icon-cc-pd:before { content: '\\e7ac'; } /* '' */\n.icon-cc-zero:before { content: '\\e7ad'; } /* '' */\n.icon-cc-share:before { content: '\\e7ae'; } /* '' */\n.icon-cc-remix:before { content: '\\e7af'; } /* '' */\n.icon-github:before { content: '\\f300'; } /* '' */\n.icon-github-circled:before { content: '\\f301'; } /* '' */\n.icon-flickr:before { content: '\\f303'; } /* '' */\n.icon-flickr-circled:before { content: '\\f304'; } /* '' */\n.icon-vimeo:before { content: '\\f306'; } /* '' */\n.icon-vimeo-circled:before { content: '\\f307'; } /* '' */\n.icon-twitter:before { content: '\\f309'; } /* '' */\n.icon-twitter-circled:before { content: '\\f30a'; } /* '' */\n.icon-facebook:before { content: '\\f30c'; } /* '' */\n.icon-facebook-circled:before { content: '\\f30d'; } /* '' */\n.icon-facebook-squared:before { content: '\\f30e'; } /* '' */\n.icon-gplus:before { content: '\\f30f'; } /* '' */\n.icon-gplus-circled:before { content: '\\f310'; } /* '' */\n.icon-pinterest:before { content: '\\f312'; } /* '' */\n.icon-pinterest-circled:before { content: '\\f313'; } /* '' */\n.icon-tumblr:before { content: '\\f315'; } /* '' */\n.icon-tumblr-circled:before { content: '\\f316'; } /* '' */\n.icon-linkedin:before { content: '\\f318'; } /* '' */\n.icon-linkedin-circled:before { content: '\\f319'; } /* '' */\n.icon-dribbble:before { content: '\\f31b'; } /* '' */\n.icon-dribbble-circled:before { content: '\\f31c'; } /* '' */\n.icon-stumbleupon:before { content: '\\f31e'; } /* '' */\n.icon-stumbleupon-circled:before { content: '\\f31f'; } /* '' */\n.icon-lastfm:before { content: '\\f321'; } /* '' */\n.icon-lastfm-circled:before { content: '\\f322'; } /* '' */\n.icon-rdio:before { content: '\\f324'; } /* '' */\n.icon-rdio-circled:before { content: '\\f325'; } /* '' */\n.icon-spotify:before { content: '\\f327'; } /* '' */\n.icon-spotify-circled:before { content: '\\f328'; } /* '' */\n.icon-qq:before { content: '\\f32a'; } /* '' */\n.icon-instagrem:before { content: '\\f32d'; } /* '' */\n.icon-dropbox:before { content: '\\f330'; } /* '' */\n.icon-evernote:before { content: '\\f333'; } /* '' */\n.icon-flattr:before { content: '\\f336'; } /* '' */\n.icon-skype:before { content: '\\f339'; } /* '' */\n.icon-skype-circled:before { content: '\\f33a'; } /* '' */\n.icon-renren:before { content: '\\f33c'; } /* '' */\n.icon-sina-weibo:before { content: '\\f33f'; } /* '' */\n.icon-paypal:before { content: '\\f342'; } /* '' */\n.icon-picasa:before { content: '\\f345'; } /* '' */\n.icon-soundcloud:before { content: '\\f348'; } /* '' */\n.icon-mixi:before { content: '\\f34b'; } /* '' */\n.icon-behance:before { content: '\\f34e'; } /* '' */\n.icon-google-circles:before { content: '\\f351'; } /* '' */\n.icon-vkontakte:before { content: '\\f354'; } /* '' */\n.icon-smashing:before { content: '\\f357'; } /* '' */\n.icon-sweden:before { content: '\\f601'; } /* '' */\n.icon-db-shape:before { content: '\\f600'; } /* '' */\n.icon-logo-db:before { content: '\\f603'; } /* '' */</style><script>function toggleCodes(on) {\n  var obj = document.getElementById('icons');\n  \n  if (on) {\n    obj.className += ' ' + 'codesOn';\n  } else {\n    obj.className = obj.className.replace(' codesOn', '');\n  }\n}\n</script></head><body><div class=\"container header\"><h1>Entypo\n <small>font demo</small></h1><label class=\"switch\"><input type=\"checkbox\" onclick=\"toggleCodes(this.checked)\">show codes</label></div><div id=\"icons\" class=\"container\"><div class=\"row\"><div class=\"span3\"><ul class=\"the-icons unstyled\"><li title=\"Code: 0x266a\"><i class=\"icon-note\"></i> <span class=\"i-name\">icon-note</span><span class=\"i-code\">0x266a</span></li><li title=\"Code: 0x266b\"><i class=\"icon-note-beamed\"></i> <span class=\"i-name\">icon-note-beamed</span><span class=\"i-code\">0x266b</span></li><li title=\"Code: 0x1f3b5\"><i class=\"icon-music\"></i> <span class=\"i-name\">icon-music</span><span class=\"i-code\">0x1f3b5</span></li><li title=\"Code: 0x1f50d\"><i class=\"icon-search\"></i> <span class=\"i-name\">icon-search</span><span class=\"i-code\">0x1f50d</span></li><li title=\"Code: 0x1f526\"><i class=\"icon-flashlight\"></i> <span class=\"i-name\">icon-flashlight</span><span class=\"i-code\">0x1f526</span></li><li title=\"Code: 0x2709\"><i class=\"icon-mail\"></i> <span class=\"i-name\">icon-mail</span><span class=\"i-code\">0x2709</span></li><li title=\"Code: 0x2665\"><i class=\"icon-heart\"></i> <span class=\"i-name\">icon-heart</span><span class=\"i-code\">0x2665</span></li><li title=\"Code: 0x2661\"><i class=\"icon-heart-empty\"></i> <span class=\"i-name\">icon-heart-empty</span><span class=\"i-code\">0x2661</span></li><li title=\"Code: 0x2605\"><i class=\"icon-star\"></i> <span class=\"i-name\">icon-star</span><span class=\"i-code\">0x2605</span></li><li title=\"Code: 0x2606\"><i class=\"icon-star-empty\"></i> <span class=\"i-name\">icon-star-empty</span><span class=\"i-code\">0x2606</span></li><li title=\"Code: 0x1f464\"><i class=\"icon-user\"></i> <span class=\"i-name\">icon-user</span><span class=\"i-code\">0x1f464</span></li><li title=\"Code: 0x1f465\"><i class=\"icon-users\"></i> <span class=\"i-name\">icon-users</span><span class=\"i-code\">0x1f465</span></li><li title=\"Code: 0xe700\"><i class=\"icon-user-add\"></i> <span class=\"i-name\">icon-user-add</span><span class=\"i-code\">0xe700</span></li><li title=\"Code: 0x1f3ac\"><i class=\"icon-video\"></i> <span class=\"i-name\">icon-video</span><span class=\"i-code\">0x1f3ac</span></li><li title=\"Code: 0x1f304\"><i class=\"icon-picture\"></i> <span class=\"i-name\">icon-picture</span><span class=\"i-code\">0x1f304</span></li><li title=\"Code: 0x1f4f7\"><i class=\"icon-camera\"></i> <span class=\"i-name\">icon-camera</span><span class=\"i-code\">0x1f4f7</span></li><li title=\"Code: 0x268f\"><i class=\"icon-layout\"></i> <span class=\"i-name\">icon-layout</span><span class=\"i-code\">0x268f</span></li><li title=\"Code: 0x2630\"><i class=\"icon-menu\"></i> <span class=\"i-name\">icon-menu</span><span class=\"i-code\">0x2630</span></li><li title=\"Code: 0x2713\"><i class=\"icon-check\"></i> <span class=\"i-name\">icon-check</span><span class=\"i-code\">0x2713</span></li><li title=\"Code: 0x2715\"><i class=\"icon-cancel\"></i> <span class=\"i-name\">icon-cancel</span><span class=\"i-code\">0x2715</span></li><li title=\"Code: 0x2716\"><i class=\"icon-cancel-circled\"></i> <span class=\"i-name\">icon-cancel-circled</span><span class=\"i-code\">0x2716</span></li><li title=\"Code: 0x274e\"><i class=\"icon-cancel-squared\"></i> <span class=\"i-name\">icon-cancel-squared</span><span class=\"i-code\">0x274e</span></li><li title=\"Code: 0x2b\"><i class=\"icon-plus\"></i> <span class=\"i-name\">icon-plus</span><span class=\"i-code\">0x2b</span></li><li title=\"Code: 0x2795\"><i class=\"icon-plus-circled\"></i> <span class=\"i-name\">icon-plus-circled</span><span class=\"i-code\">0x2795</span></li><li title=\"Code: 0x229e\"><i class=\"icon-plus-squared\"></i> <span class=\"i-name\">icon-plus-squared</span><span class=\"i-code\">0x229e</span></li><li title=\"Code: 0x2d\"><i class=\"icon-minus\"></i> <span class=\"i-name\">icon-minus</span><span class=\"i-code\">0x2d</span></li><li title=\"Code: 0x2796\"><i class=\"icon-minus-circled\"></i> <span class=\"i-name\">icon-minus-circled</span><span class=\"i-code\">0x2796</span></li><li title=\"Code: 0x229f\"><i class=\"icon-minus-squared\"></i> <span class=\"i-name\">icon-minus-squared</span><span class=\"i-code\">0x229f</span></li><li title=\"Code: 0x2753\"><i class=\"icon-help\"></i> <span class=\"i-name\">icon-help</span><span class=\"i-code\">0x2753</span></li><li title=\"Code: 0xe704\"><i class=\"icon-help-circled\"></i> <span class=\"i-name\">icon-help-circled</span><span class=\"i-code\">0xe704</span></li><li title=\"Code: 0x2139\"><i class=\"icon-info\"></i> <span class=\"i-name\">icon-info</span><span class=\"i-code\">0x2139</span></li><li title=\"Code: 0xe705\"><i class=\"icon-info-circled\"></i> <span class=\"i-name\">icon-info-circled</span><span class=\"i-code\">0xe705</span></li><li title=\"Code: 0x1f519\"><i class=\"icon-back\"></i> <span class=\"i-name\">icon-back</span><span class=\"i-code\">0x1f519</span></li><li title=\"Code: 0x2302\"><i class=\"icon-home\"></i> <span class=\"i-name\">icon-home</span><span class=\"i-code\">0x2302</span></li><li title=\"Code: 0x1f517\"><i class=\"icon-link\"></i> <span class=\"i-name\">icon-link</span><span class=\"i-code\">0x1f517</span></li><li title=\"Code: 0x1f4ce\"><i class=\"icon-attach\"></i> <span class=\"i-name\">icon-attach</span><span class=\"i-code\">0x1f4ce</span></li><li title=\"Code: 0x1f512\"><i class=\"icon-lock\"></i> <span class=\"i-name\">icon-lock</span><span class=\"i-code\">0x1f512</span></li><li title=\"Code: 0x1f513\"><i class=\"icon-lock-open\"></i> <span class=\"i-name\">icon-lock-open</span><span class=\"i-code\">0x1f513</span></li><li title=\"Code: 0xe70a\"><i class=\"icon-eye\"></i> <span class=\"i-name\">icon-eye</span><span class=\"i-code\">0xe70a</span></li><li title=\"Code: 0xe70c\"><i class=\"icon-tag\"></i> <span class=\"i-name\">icon-tag</span><span class=\"i-code\">0xe70c</span></li><li title=\"Code: 0x1f516\"><i class=\"icon-bookmark\"></i> <span class=\"i-name\">icon-bookmark</span><span class=\"i-code\">0x1f516</span></li><li title=\"Code: 0x1f4d1\"><i class=\"icon-bookmarks\"></i> <span class=\"i-name\">icon-bookmarks</span><span class=\"i-code\">0x1f4d1</span></li><li title=\"Code: 0x2691\"><i class=\"icon-flag\"></i> <span class=\"i-name\">icon-flag</span><span class=\"i-code\">0x2691</span></li><li title=\"Code: 0x1f44d\"><i class=\"icon-thumbs-up\"></i> <span class=\"i-name\">icon-thumbs-up</span><span class=\"i-code\">0x1f44d</span></li><li title=\"Code: 0x1f44e\"><i class=\"icon-thumbs-down\"></i> <span class=\"i-name\">icon-thumbs-down</span><span class=\"i-code\">0x1f44e</span></li><li title=\"Code: 0x1f4e5\"><i class=\"icon-download\"></i> <span class=\"i-name\">icon-download</span><span class=\"i-code\">0x1f4e5</span></li><li title=\"Code: 0x1f4e4\"><i class=\"icon-upload\"></i> <span class=\"i-name\">icon-upload</span><span class=\"i-code\">0x1f4e4</span></li><li title=\"Code: 0xe711\"><i class=\"icon-upload-cloud\"></i> <span class=\"i-name\">icon-upload-cloud</span><span class=\"i-code\">0xe711</span></li><li title=\"Code: 0xe712\"><i class=\"icon-reply\"></i> <span class=\"i-name\">icon-reply</span><span class=\"i-code\">0xe712</span></li><li title=\"Code: 0xe713\"><i class=\"icon-reply-all\"></i> <span class=\"i-name\">icon-reply-all</span><span class=\"i-code\">0xe713</span></li><li title=\"Code: 0x27a6\"><i class=\"icon-forward\"></i> <span class=\"i-name\">icon-forward</span><span class=\"i-code\">0x27a6</span></li><li title=\"Code: 0x275e\"><i class=\"icon-quote\"></i> <span class=\"i-name\">icon-quote</span><span class=\"i-code\">0x275e</span></li><li title=\"Code: 0xe714\"><i class=\"icon-code\"></i> <span class=\"i-name\">icon-code</span><span class=\"i-code\">0xe714</span></li><li title=\"Code: 0xe715\"><i class=\"icon-export\"></i> <span class=\"i-name\">icon-export</span><span class=\"i-code\">0xe715</span></li><li title=\"Code: 0x270e\"><i class=\"icon-pencil\"></i> <span class=\"i-name\">icon-pencil</span><span class=\"i-code\">0x270e</span></li><li title=\"Code: 0x2712\"><i class=\"icon-feather\"></i> <span class=\"i-name\">icon-feather</span><span class=\"i-code\">0x2712</span></li><li title=\"Code: 0xe716\"><i class=\"icon-print\"></i> <span class=\"i-name\">icon-print</span><span class=\"i-code\">0xe716</span></li><li title=\"Code: 0xe717\"><i class=\"icon-retweet\"></i> <span class=\"i-name\">icon-retweet</span><span class=\"i-code\">0xe717</span></li><li title=\"Code: 0x2328\"><i class=\"icon-keyboard\"></i> <span class=\"i-name\">icon-keyboard</span><span class=\"i-code\">0x2328</span></li><li title=\"Code: 0xe718\"><i class=\"icon-comment\"></i> <span class=\"i-name\">icon-comment</span><span class=\"i-code\">0xe718</span></li><li title=\"Code: 0xe720\"><i class=\"icon-chat\"></i> <span class=\"i-name\">icon-chat</span><span class=\"i-code\">0xe720</span></li><li title=\"Code: 0x1f514\"><i class=\"icon-bell\"></i> <span class=\"i-name\">icon-bell</span><span class=\"i-code\">0x1f514</span></li><li title=\"Code: 0x26a0\"><i class=\"icon-attention\"></i> <span class=\"i-name\">icon-attention</span><span class=\"i-code\">0x26a0</span></li><li title=\"Code: 0x1f4a5\"><i class=\"icon-alert\"></i> <span class=\"i-name\">icon-alert</span><span class=\"i-code\">0x1f4a5</span></li><li title=\"Code: 0xe722\"><i class=\"icon-vcard\"></i> <span class=\"i-name\">icon-vcard</span><span class=\"i-code\">0xe722</span></li><li title=\"Code: 0xe723\"><i class=\"icon-address\"></i> <span class=\"i-name\">icon-address</span><span class=\"i-code\">0xe723</span></li><li title=\"Code: 0xe724\"><i class=\"icon-location\"></i> <span class=\"i-name\">icon-location</span><span class=\"i-code\">0xe724</span></li><li title=\"Code: 0xe727\"><i class=\"icon-map\"></i> <span class=\"i-name\">icon-map</span><span class=\"i-code\">0xe727</span></li><li title=\"Code: 0x27a2\"><i class=\"icon-direction\"></i> <span class=\"i-name\">icon-direction</span><span class=\"i-code\">0x27a2</span></li><li title=\"Code: 0xe728\"><i class=\"icon-compass\"></i> <span class=\"i-name\">icon-compass</span><span class=\"i-code\">0xe728</span></li><li title=\"Code: 0x2615\"><i class=\"icon-cup\"></i> <span class=\"i-name\">icon-cup</span><span class=\"i-code\">0x2615</span></li></ul></div><div class=\"span3\"><ul class=\"the-icons unstyled\"><li title=\"Code: 0xe729\"><i class=\"icon-trash\"></i> <span class=\"i-name\">icon-trash</span><span class=\"i-code\">0xe729</span></li><li title=\"Code: 0xe730\"><i class=\"icon-doc\"></i> <span class=\"i-name\">icon-doc</span><span class=\"i-code\">0xe730</span></li><li title=\"Code: 0xe736\"><i class=\"icon-docs\"></i> <span class=\"i-name\">icon-docs</span><span class=\"i-code\">0xe736</span></li><li title=\"Code: 0xe737\"><i class=\"icon-doc-landscape\"></i> <span class=\"i-name\">icon-doc-landscape</span><span class=\"i-code\">0xe737</span></li><li title=\"Code: 0x1f4c4\"><i class=\"icon-doc-text\"></i> <span class=\"i-name\">icon-doc-text</span><span class=\"i-code\">0x1f4c4</span></li><li title=\"Code: 0xe731\"><i class=\"icon-doc-text-inv\"></i> <span class=\"i-name\">icon-doc-text-inv</span><span class=\"i-code\">0xe731</span></li><li title=\"Code: 0x1f4f0\"><i class=\"icon-newspaper\"></i> <span class=\"i-name\">icon-newspaper</span><span class=\"i-code\">0x1f4f0</span></li><li title=\"Code: 0x1f4d6\"><i class=\"icon-book-open\"></i> <span class=\"i-name\">icon-book-open</span><span class=\"i-code\">0x1f4d6</span></li><li title=\"Code: 0x1f4d5\"><i class=\"icon-book\"></i> <span class=\"i-name\">icon-book</span><span class=\"i-code\">0x1f4d5</span></li><li title=\"Code: 0x1f4c1\"><i class=\"icon-folder\"></i> <span class=\"i-name\">icon-folder</span><span class=\"i-code\">0x1f4c1</span></li><li title=\"Code: 0xe738\"><i class=\"icon-archive\"></i> <span class=\"i-name\">icon-archive</span><span class=\"i-code\">0xe738</span></li><li title=\"Code: 0x1f4e6\"><i class=\"icon-box\"></i> <span class=\"i-name\">icon-box</span><span class=\"i-code\">0x1f4e6</span></li><li title=\"Code: 0xe73a\"><i class=\"icon-rss\"></i> <span class=\"i-name\">icon-rss</span><span class=\"i-code\">0xe73a</span></li><li title=\"Code: 0x1f4de\"><i class=\"icon-phone\"></i> <span class=\"i-name\">icon-phone</span><span class=\"i-code\">0x1f4de</span></li><li title=\"Code: 0x2699\"><i class=\"icon-cog\"></i> <span class=\"i-name\">icon-cog</span><span class=\"i-code\">0x2699</span></li><li title=\"Code: 0x2692\"><i class=\"icon-tools\"></i> <span class=\"i-name\">icon-tools</span><span class=\"i-code\">0x2692</span></li><li title=\"Code: 0xe73c\"><i class=\"icon-share\"></i> <span class=\"i-name\">icon-share</span><span class=\"i-code\">0xe73c</span></li><li title=\"Code: 0xe73e\"><i class=\"icon-shareable\"></i> <span class=\"i-name\">icon-shareable</span><span class=\"i-code\">0xe73e</span></li><li title=\"Code: 0xe73d\"><i class=\"icon-basket\"></i> <span class=\"i-name\">icon-basket</span><span class=\"i-code\">0xe73d</span></li><li title=\"Code: 0x1f45c\"><i class=\"icon-bag\"></i> <span class=\"i-name\">icon-bag</span><span class=\"i-code\">0x1f45c</span></li><li title=\"Code: 0x1f4c5\"><i class=\"icon-calendar\"></i> <span class=\"i-name\">icon-calendar</span><span class=\"i-code\">0x1f4c5</span></li><li title=\"Code: 0xe740\"><i class=\"icon-login\"></i> <span class=\"i-name\">icon-login</span><span class=\"i-code\">0xe740</span></li><li title=\"Code: 0xe741\"><i class=\"icon-logout\"></i> <span class=\"i-name\">icon-logout</span><span class=\"i-code\">0xe741</span></li><li title=\"Code: 0x1f3a4\"><i class=\"icon-mic\"></i> <span class=\"i-name\">icon-mic</span><span class=\"i-code\">0x1f3a4</span></li><li title=\"Code: 0x1f507\"><i class=\"icon-mute\"></i> <span class=\"i-name\">icon-mute</span><span class=\"i-code\">0x1f507</span></li><li title=\"Code: 0x1f50a\"><i class=\"icon-sound\"></i> <span class=\"i-name\">icon-sound</span><span class=\"i-code\">0x1f50a</span></li><li title=\"Code: 0xe742\"><i class=\"icon-volume\"></i> <span class=\"i-name\">icon-volume</span><span class=\"i-code\">0xe742</span></li><li title=\"Code: 0x1f554\"><i class=\"icon-clock\"></i> <span class=\"i-name\">icon-clock</span><span class=\"i-code\">0x1f554</span></li><li title=\"Code: 0x23f3\"><i class=\"icon-hourglass\"></i> <span class=\"i-name\">icon-hourglass</span><span class=\"i-code\">0x23f3</span></li><li title=\"Code: 0x1f4a1\"><i class=\"icon-lamp\"></i> <span class=\"i-name\">icon-lamp</span><span class=\"i-code\">0x1f4a1</span></li><li title=\"Code: 0x1f505\"><i class=\"icon-light-down\"></i> <span class=\"i-name\">icon-light-down</span><span class=\"i-code\">0x1f505</span></li><li title=\"Code: 0x1f506\"><i class=\"icon-light-up\"></i> <span class=\"i-name\">icon-light-up</span><span class=\"i-code\">0x1f506</span></li><li title=\"Code: 0x25d1\"><i class=\"icon-adjust\"></i> <span class=\"i-name\">icon-adjust</span><span class=\"i-code\">0x25d1</span></li><li title=\"Code: 0x1f6ab\"><i class=\"icon-block\"></i> <span class=\"i-name\">icon-block</span><span class=\"i-code\">0x1f6ab</span></li><li title=\"Code: 0xe744\"><i class=\"icon-resize-full\"></i> <span class=\"i-name\">icon-resize-full</span><span class=\"i-code\">0xe744</span></li><li title=\"Code: 0xe746\"><i class=\"icon-resize-small\"></i> <span class=\"i-name\">icon-resize-small</span><span class=\"i-code\">0xe746</span></li><li title=\"Code: 0xe74c\"><i class=\"icon-popup\"></i> <span class=\"i-name\">icon-popup</span><span class=\"i-code\">0xe74c</span></li><li title=\"Code: 0xe74d\"><i class=\"icon-publish\"></i> <span class=\"i-name\">icon-publish</span><span class=\"i-code\">0xe74d</span></li><li title=\"Code: 0xe74e\"><i class=\"icon-window\"></i> <span class=\"i-name\">icon-window</span><span class=\"i-code\">0xe74e</span></li><li title=\"Code: 0xe74f\"><i class=\"icon-arrow-combo\"></i> <span class=\"i-name\">icon-arrow-combo</span><span class=\"i-code\">0xe74f</span></li><li title=\"Code: 0xe758\"><i class=\"icon-down-circled\"></i> <span class=\"i-name\">icon-down-circled</span><span class=\"i-code\">0xe758</span></li><li title=\"Code: 0xe759\"><i class=\"icon-left-circled\"></i> <span class=\"i-name\">icon-left-circled</span><span class=\"i-code\">0xe759</span></li><li title=\"Code: 0xe75a\"><i class=\"icon-right-circled\"></i> <span class=\"i-name\">icon-right-circled</span><span class=\"i-code\">0xe75a</span></li><li title=\"Code: 0xe75b\"><i class=\"icon-up-circled\"></i> <span class=\"i-name\">icon-up-circled</span><span class=\"i-code\">0xe75b</span></li><li title=\"Code: 0xe75c\"><i class=\"icon-down-open\"></i> <span class=\"i-name\">icon-down-open</span><span class=\"i-code\">0xe75c</span></li><li title=\"Code: 0xe75d\"><i class=\"icon-left-open\"></i> <span class=\"i-name\">icon-left-open</span><span class=\"i-code\">0xe75d</span></li><li title=\"Code: 0xe75e\"><i class=\"icon-right-open\"></i> <span class=\"i-name\">icon-right-open</span><span class=\"i-code\">0xe75e</span></li><li title=\"Code: 0xe75f\"><i class=\"icon-up-open\"></i> <span class=\"i-name\">icon-up-open</span><span class=\"i-code\">0xe75f</span></li><li title=\"Code: 0xe760\"><i class=\"icon-down-open-mini\"></i> <span class=\"i-name\">icon-down-open-mini</span><span class=\"i-code\">0xe760</span></li><li title=\"Code: 0xe761\"><i class=\"icon-left-open-mini\"></i> <span class=\"i-name\">icon-left-open-mini</span><span class=\"i-code\">0xe761</span></li><li title=\"Code: 0xe762\"><i class=\"icon-right-open-mini\"></i> <span class=\"i-name\">icon-right-open-mini</span><span class=\"i-code\">0xe762</span></li><li title=\"Code: 0xe763\"><i class=\"icon-up-open-mini\"></i> <span class=\"i-name\">icon-up-open-mini</span><span class=\"i-code\">0xe763</span></li><li title=\"Code: 0xe764\"><i class=\"icon-down-open-big\"></i> <span class=\"i-name\">icon-down-open-big</span><span class=\"i-code\">0xe764</span></li><li title=\"Code: 0xe765\"><i class=\"icon-left-open-big\"></i> <span class=\"i-name\">icon-left-open-big</span><span class=\"i-code\">0xe765</span></li><li title=\"Code: 0xe766\"><i class=\"icon-right-open-big\"></i> <span class=\"i-name\">icon-right-open-big</span><span class=\"i-code\">0xe766</span></li><li title=\"Code: 0xe767\"><i class=\"icon-up-open-big\"></i> <span class=\"i-name\">icon-up-open-big</span><span class=\"i-code\">0xe767</span></li><li title=\"Code: 0x2b07\"><i class=\"icon-down\"></i> <span class=\"i-name\">icon-down</span><span class=\"i-code\">0x2b07</span></li><li title=\"Code: 0x2b05\"><i class=\"icon-left\"></i> <span class=\"i-name\">icon-left</span><span class=\"i-code\">0x2b05</span></li><li title=\"Code: 0x27a1\"><i class=\"icon-right\"></i> <span class=\"i-name\">icon-right</span><span class=\"i-code\">0x27a1</span></li><li title=\"Code: 0x2b06\"><i class=\"icon-up\"></i> <span class=\"i-name\">icon-up</span><span class=\"i-code\">0x2b06</span></li><li title=\"Code: 0x25be\"><i class=\"icon-down-dir\"></i> <span class=\"i-name\">icon-down-dir</span><span class=\"i-code\">0x25be</span></li><li title=\"Code: 0x25c2\"><i class=\"icon-left-dir\"></i> <span class=\"i-name\">icon-left-dir</span><span class=\"i-code\">0x25c2</span></li><li title=\"Code: 0x25b8\"><i class=\"icon-right-dir\"></i> <span class=\"i-name\">icon-right-dir</span><span class=\"i-code\">0x25b8</span></li><li title=\"Code: 0x25b4\"><i class=\"icon-up-dir\"></i> <span class=\"i-name\">icon-up-dir</span><span class=\"i-code\">0x25b4</span></li><li title=\"Code: 0xe4b0\"><i class=\"icon-down-bold\"></i> <span class=\"i-name\">icon-down-bold</span><span class=\"i-code\">0xe4b0</span></li><li title=\"Code: 0xe4ad\"><i class=\"icon-left-bold\"></i> <span class=\"i-name\">icon-left-bold</span><span class=\"i-code\">0xe4ad</span></li><li title=\"Code: 0xe4ae\"><i class=\"icon-right-bold\"></i> <span class=\"i-name\">icon-right-bold</span><span class=\"i-code\">0xe4ae</span></li><li title=\"Code: 0xe4af\"><i class=\"icon-up-bold\"></i> <span class=\"i-name\">icon-up-bold</span><span class=\"i-code\">0xe4af</span></li><li title=\"Code: 0x2193\"><i class=\"icon-down-thin\"></i> <span class=\"i-name\">icon-down-thin</span><span class=\"i-code\">0x2193</span></li><li title=\"Code: 0x2190\"><i class=\"icon-left-thin\"></i> <span class=\"i-name\">icon-left-thin</span><span class=\"i-code\">0x2190</span></li><li title=\"Code: 0x2192\"><i class=\"icon-right-thin\"></i> <span class=\"i-name\">icon-right-thin</span><span class=\"i-code\">0x2192</span></li></ul></div><div class=\"span3\"><ul class=\"the-icons unstyled\"><li title=\"Code: 0x2191\"><i class=\"icon-up-thin\"></i> <span class=\"i-name\">icon-up-thin</span><span class=\"i-code\">0x2191</span></li><li title=\"Code: 0x27f2\"><i class=\"icon-ccw\"></i> <span class=\"i-name\">icon-ccw</span><span class=\"i-code\">0x27f2</span></li><li title=\"Code: 0x27f3\"><i class=\"icon-cw\"></i> <span class=\"i-name\">icon-cw</span><span class=\"i-code\">0x27f3</span></li><li title=\"Code: 0x1f504\"><i class=\"icon-arrows-ccw\"></i> <span class=\"i-name\">icon-arrows-ccw</span><span class=\"i-code\">0x1f504</span></li><li title=\"Code: 0x21b3\"><i class=\"icon-level-down\"></i> <span class=\"i-name\">icon-level-down</span><span class=\"i-code\">0x21b3</span></li><li title=\"Code: 0x21b0\"><i class=\"icon-level-up\"></i> <span class=\"i-name\">icon-level-up</span><span class=\"i-code\">0x21b0</span></li><li title=\"Code: 0x1f500\"><i class=\"icon-shuffle\"></i> <span class=\"i-name\">icon-shuffle</span><span class=\"i-code\">0x1f500</span></li><li title=\"Code: 0x1f501\"><i class=\"icon-loop\"></i> <span class=\"i-name\">icon-loop</span><span class=\"i-code\">0x1f501</span></li><li title=\"Code: 0x21c6\"><i class=\"icon-switch\"></i> <span class=\"i-name\">icon-switch</span><span class=\"i-code\">0x21c6</span></li><li title=\"Code: 0x25b6\"><i class=\"icon-play\"></i> <span class=\"i-name\">icon-play</span><span class=\"i-code\">0x25b6</span></li><li title=\"Code: 0x25a0\"><i class=\"icon-stop\"></i> <span class=\"i-name\">icon-stop</span><span class=\"i-code\">0x25a0</span></li><li title=\"Code: 0x2389\"><i class=\"icon-pause\"></i> <span class=\"i-name\">icon-pause</span><span class=\"i-code\">0x2389</span></li><li title=\"Code: 0x26ab\"><i class=\"icon-record\"></i> <span class=\"i-name\">icon-record</span><span class=\"i-code\">0x26ab</span></li><li title=\"Code: 0x23ed\"><i class=\"icon-to-end\"></i> <span class=\"i-name\">icon-to-end</span><span class=\"i-code\">0x23ed</span></li><li title=\"Code: 0x23ee\"><i class=\"icon-to-start\"></i> <span class=\"i-name\">icon-to-start</span><span class=\"i-code\">0x23ee</span></li><li title=\"Code: 0x23e9\"><i class=\"icon-fast-forward\"></i> <span class=\"i-name\">icon-fast-forward</span><span class=\"i-code\">0x23e9</span></li><li title=\"Code: 0x23ea\"><i class=\"icon-fast-backward\"></i> <span class=\"i-name\">icon-fast-backward</span><span class=\"i-code\">0x23ea</span></li><li title=\"Code: 0xe768\"><i class=\"icon-progress-0\"></i> <span class=\"i-name\">icon-progress-0</span><span class=\"i-code\">0xe768</span></li><li title=\"Code: 0xe769\"><i class=\"icon-progress-1\"></i> <span class=\"i-name\">icon-progress-1</span><span class=\"i-code\">0xe769</span></li><li title=\"Code: 0xe76a\"><i class=\"icon-progress-2\"></i> <span class=\"i-name\">icon-progress-2</span><span class=\"i-code\">0xe76a</span></li><li title=\"Code: 0xe76b\"><i class=\"icon-progress-3\"></i> <span class=\"i-name\">icon-progress-3</span><span class=\"i-code\">0xe76b</span></li><li title=\"Code: 0x1f3af\"><i class=\"icon-target\"></i> <span class=\"i-name\">icon-target</span><span class=\"i-code\">0x1f3af</span></li><li title=\"Code: 0x1f3a8\"><i class=\"icon-palette\"></i> <span class=\"i-name\">icon-palette</span><span class=\"i-code\">0x1f3a8</span></li><li title=\"Code: 0xe005\"><i class=\"icon-list\"></i> <span class=\"i-name\">icon-list</span><span class=\"i-code\">0xe005</span></li><li title=\"Code: 0xe003\"><i class=\"icon-list-add\"></i> <span class=\"i-name\">icon-list-add</span><span class=\"i-code\">0xe003</span></li><li title=\"Code: 0x1f4f6\"><i class=\"icon-signal\"></i> <span class=\"i-name\">icon-signal</span><span class=\"i-code\">0x1f4f6</span></li><li title=\"Code: 0x1f3c6\"><i class=\"icon-trophy\"></i> <span class=\"i-name\">icon-trophy</span><span class=\"i-code\">0x1f3c6</span></li><li title=\"Code: 0x1f50b\"><i class=\"icon-battery\"></i> <span class=\"i-name\">icon-battery</span><span class=\"i-code\">0x1f50b</span></li><li title=\"Code: 0xe771\"><i class=\"icon-back-in-time\"></i> <span class=\"i-name\">icon-back-in-time</span><span class=\"i-code\">0xe771</span></li><li title=\"Code: 0x1f4bb\"><i class=\"icon-monitor\"></i> <span class=\"i-name\">icon-monitor</span><span class=\"i-code\">0x1f4bb</span></li><li title=\"Code: 0x1f4f1\"><i class=\"icon-mobile\"></i> <span class=\"i-name\">icon-mobile</span><span class=\"i-code\">0x1f4f1</span></li><li title=\"Code: 0xe776\"><i class=\"icon-network\"></i> <span class=\"i-name\">icon-network</span><span class=\"i-code\">0xe776</span></li><li title=\"Code: 0x1f4bf\"><i class=\"icon-cd\"></i> <span class=\"i-name\">icon-cd</span><span class=\"i-code\">0x1f4bf</span></li><li title=\"Code: 0xe777\"><i class=\"icon-inbox\"></i> <span class=\"i-name\">icon-inbox</span><span class=\"i-code\">0xe777</span></li><li title=\"Code: 0xe778\"><i class=\"icon-install\"></i> <span class=\"i-name\">icon-install</span><span class=\"i-code\">0xe778</span></li><li title=\"Code: 0x1f30e\"><i class=\"icon-globe\"></i> <span class=\"i-name\">icon-globe</span><span class=\"i-code\">0x1f30e</span></li><li title=\"Code: 0x2601\"><i class=\"icon-cloud\"></i> <span class=\"i-name\">icon-cloud</span><span class=\"i-code\">0x2601</span></li><li title=\"Code: 0x26c8\"><i class=\"icon-cloud-thunder\"></i> <span class=\"i-name\">icon-cloud-thunder</span><span class=\"i-code\">0x26c8</span></li><li title=\"Code: 0x26a1\"><i class=\"icon-flash\"></i> <span class=\"i-name\">icon-flash</span><span class=\"i-code\">0x26a1</span></li><li title=\"Code: 0x263d\"><i class=\"icon-moon\"></i> <span class=\"i-name\">icon-moon</span><span class=\"i-code\">0x263d</span></li><li title=\"Code: 0x2708\"><i class=\"icon-flight\"></i> <span class=\"i-name\">icon-flight</span><span class=\"i-code\">0x2708</span></li><li title=\"Code: 0xe79b\"><i class=\"icon-paper-plane\"></i> <span class=\"i-name\">icon-paper-plane</span><span class=\"i-code\">0xe79b</span></li><li title=\"Code: 0x1f342\"><i class=\"icon-leaf\"></i> <span class=\"i-name\">icon-leaf</span><span class=\"i-code\">0x1f342</span></li><li title=\"Code: 0xe788\"><i class=\"icon-lifebuoy\"></i> <span class=\"i-name\">icon-lifebuoy</span><span class=\"i-code\">0xe788</span></li><li title=\"Code: 0xe789\"><i class=\"icon-mouse\"></i> <span class=\"i-name\">icon-mouse</span><span class=\"i-code\">0xe789</span></li><li title=\"Code: 0x1f4bc\"><i class=\"icon-briefcase\"></i> <span class=\"i-name\">icon-briefcase</span><span class=\"i-code\">0x1f4bc</span></li><li title=\"Code: 0xe78e\"><i class=\"icon-suitcase\"></i> <span class=\"i-name\">icon-suitcase</span><span class=\"i-code\">0xe78e</span></li><li title=\"Code: 0xe78b\"><i class=\"icon-dot\"></i> <span class=\"i-name\">icon-dot</span><span class=\"i-code\">0xe78b</span></li><li title=\"Code: 0xe78c\"><i class=\"icon-dot-2\"></i> <span class=\"i-name\">icon-dot-2</span><span class=\"i-code\">0xe78c</span></li><li title=\"Code: 0xe78d\"><i class=\"icon-dot-3\"></i> <span class=\"i-name\">icon-dot-3</span><span class=\"i-code\">0xe78d</span></li><li title=\"Code: 0xe79a\"><i class=\"icon-brush\"></i> <span class=\"i-name\">icon-brush</span><span class=\"i-code\">0xe79a</span></li><li title=\"Code: 0xe7a1\"><i class=\"icon-magnet\"></i> <span class=\"i-name\">icon-magnet</span><span class=\"i-code\">0xe7a1</span></li><li title=\"Code: 0x221e\"><i class=\"icon-infinity\"></i> <span class=\"i-name\">icon-infinity</span><span class=\"i-code\">0x221e</span></li><li title=\"Code: 0x232b\"><i class=\"icon-erase\"></i> <span class=\"i-name\">icon-erase</span><span class=\"i-code\">0x232b</span></li><li title=\"Code: 0xe751\"><i class=\"icon-chart-pie\"></i> <span class=\"i-name\">icon-chart-pie</span><span class=\"i-code\">0xe751</span></li><li title=\"Code: 0x1f4c8\"><i class=\"icon-chart-line\"></i> <span class=\"i-name\">icon-chart-line</span><span class=\"i-code\">0x1f4c8</span></li><li title=\"Code: 0x1f4ca\"><i class=\"icon-chart-bar\"></i> <span class=\"i-name\">icon-chart-bar</span><span class=\"i-code\">0x1f4ca</span></li><li title=\"Code: 0x1f53e\"><i class=\"icon-chart-area\"></i> <span class=\"i-name\">icon-chart-area</span><span class=\"i-code\">0x1f53e</span></li><li title=\"Code: 0x2707\"><i class=\"icon-tape\"></i> <span class=\"i-name\">icon-tape</span><span class=\"i-code\">0x2707</span></li><li title=\"Code: 0x1f393\"><i class=\"icon-graduation-cap\"></i> <span class=\"i-name\">icon-graduation-cap</span><span class=\"i-code\">0x1f393</span></li><li title=\"Code: 0xe752\"><i class=\"icon-language\"></i> <span class=\"i-name\">icon-language</span><span class=\"i-code\">0xe752</span></li><li title=\"Code: 0x1f3ab\"><i class=\"icon-ticket\"></i> <span class=\"i-name\">icon-ticket</span><span class=\"i-code\">0x1f3ab</span></li><li title=\"Code: 0x1f4a6\"><i class=\"icon-water\"></i> <span class=\"i-name\">icon-water</span><span class=\"i-code\">0x1f4a6</span></li><li title=\"Code: 0x1f4a7\"><i class=\"icon-droplet\"></i> <span class=\"i-name\">icon-droplet</span><span class=\"i-code\">0x1f4a7</span></li><li title=\"Code: 0xe753\"><i class=\"icon-air\"></i> <span class=\"i-name\">icon-air</span><span class=\"i-code\">0xe753</span></li><li title=\"Code: 0x1f4b3\"><i class=\"icon-credit-card\"></i> <span class=\"i-name\">icon-credit-card</span><span class=\"i-code\">0x1f4b3</span></li><li title=\"Code: 0x1f4be\"><i class=\"icon-floppy\"></i> <span class=\"i-name\">icon-floppy</span><span class=\"i-code\">0x1f4be</span></li><li title=\"Code: 0x1f4cb\"><i class=\"icon-clipboard\"></i> <span class=\"i-name\">icon-clipboard</span><span class=\"i-code\">0x1f4cb</span></li><li title=\"Code: 0x1f4e3\"><i class=\"icon-megaphone\"></i> <span class=\"i-name\">icon-megaphone</span><span class=\"i-code\">0x1f4e3</span></li><li title=\"Code: 0xe754\"><i class=\"icon-database\"></i> <span class=\"i-name\">icon-database</span><span class=\"i-code\">0xe754</span></li><li title=\"Code: 0xe755\"><i class=\"icon-drive\"></i> <span class=\"i-name\">icon-drive</span><span class=\"i-code\">0xe755</span></li></ul></div><div class=\"span3\"><ul class=\"the-icons unstyled\"><li title=\"Code: 0xe756\"><i class=\"icon-bucket\"></i> <span class=\"i-name\">icon-bucket</span><span class=\"i-code\">0xe756</span></li><li title=\"Code: 0xe757\"><i class=\"icon-thermometer\"></i> <span class=\"i-name\">icon-thermometer</span><span class=\"i-code\">0xe757</span></li><li title=\"Code: 0x1f511\"><i class=\"icon-key\"></i> <span class=\"i-name\">icon-key</span><span class=\"i-code\">0x1f511</span></li><li title=\"Code: 0xe790\"><i class=\"icon-flow-cascade\"></i> <span class=\"i-name\">icon-flow-cascade</span><span class=\"i-code\">0xe790</span></li><li title=\"Code: 0xe791\"><i class=\"icon-flow-branch\"></i> <span class=\"i-name\">icon-flow-branch</span><span class=\"i-code\">0xe791</span></li><li title=\"Code: 0xe792\"><i class=\"icon-flow-tree\"></i> <span class=\"i-name\">icon-flow-tree</span><span class=\"i-code\">0xe792</span></li><li title=\"Code: 0xe793\"><i class=\"icon-flow-line\"></i> <span class=\"i-name\">icon-flow-line</span><span class=\"i-code\">0xe793</span></li><li title=\"Code: 0xe794\"><i class=\"icon-flow-parallel\"></i> <span class=\"i-name\">icon-flow-parallel</span><span class=\"i-code\">0xe794</span></li><li title=\"Code: 0x1f680\"><i class=\"icon-rocket\"></i> <span class=\"i-name\">icon-rocket</span><span class=\"i-code\">0x1f680</span></li><li title=\"Code: 0xe7a2\"><i class=\"icon-gauge\"></i> <span class=\"i-name\">icon-gauge</span><span class=\"i-code\">0xe7a2</span></li><li title=\"Code: 0xe7a3\"><i class=\"icon-traffic-cone\"></i> <span class=\"i-name\">icon-traffic-cone</span><span class=\"i-code\">0xe7a3</span></li><li title=\"Code: 0xe7a5\"><i class=\"icon-cc\"></i> <span class=\"i-name\">icon-cc</span><span class=\"i-code\">0xe7a5</span></li><li title=\"Code: 0xe7a6\"><i class=\"icon-cc-by\"></i> <span class=\"i-name\">icon-cc-by</span><span class=\"i-code\">0xe7a6</span></li><li title=\"Code: 0xe7a7\"><i class=\"icon-cc-nc\"></i> <span class=\"i-name\">icon-cc-nc</span><span class=\"i-code\">0xe7a7</span></li><li title=\"Code: 0xe7a8\"><i class=\"icon-cc-nc-eu\"></i> <span class=\"i-name\">icon-cc-nc-eu</span><span class=\"i-code\">0xe7a8</span></li><li title=\"Code: 0xe7a9\"><i class=\"icon-cc-nc-jp\"></i> <span class=\"i-name\">icon-cc-nc-jp</span><span class=\"i-code\">0xe7a9</span></li><li title=\"Code: 0xe7aa\"><i class=\"icon-cc-sa\"></i> <span class=\"i-name\">icon-cc-sa</span><span class=\"i-code\">0xe7aa</span></li><li title=\"Code: 0xe7ab\"><i class=\"icon-cc-nd\"></i> <span class=\"i-name\">icon-cc-nd</span><span class=\"i-code\">0xe7ab</span></li><li title=\"Code: 0xe7ac\"><i class=\"icon-cc-pd\"></i> <span class=\"i-name\">icon-cc-pd</span><span class=\"i-code\">0xe7ac</span></li><li title=\"Code: 0xe7ad\"><i class=\"icon-cc-zero\"></i> <span class=\"i-name\">icon-cc-zero</span><span class=\"i-code\">0xe7ad</span></li><li title=\"Code: 0xe7ae\"><i class=\"icon-cc-share\"></i> <span class=\"i-name\">icon-cc-share</span><span class=\"i-code\">0xe7ae</span></li><li title=\"Code: 0xe7af\"><i class=\"icon-cc-remix\"></i> <span class=\"i-name\">icon-cc-remix</span><span class=\"i-code\">0xe7af</span></li><li title=\"Code: 0xf300\"><i class=\"icon-github\"></i> <span class=\"i-name\">icon-github</span><span class=\"i-code\">0xf300</span></li><li title=\"Code: 0xf301\"><i class=\"icon-github-circled\"></i> <span class=\"i-name\">icon-github-circled</span><span class=\"i-code\">0xf301</span></li><li title=\"Code: 0xf303\"><i class=\"icon-flickr\"></i> <span class=\"i-name\">icon-flickr</span><span class=\"i-code\">0xf303</span></li><li title=\"Code: 0xf304\"><i class=\"icon-flickr-circled\"></i> <span class=\"i-name\">icon-flickr-circled</span><span class=\"i-code\">0xf304</span></li><li title=\"Code: 0xf306\"><i class=\"icon-vimeo\"></i> <span class=\"i-name\">icon-vimeo</span><span class=\"i-code\">0xf306</span></li><li title=\"Code: 0xf307\"><i class=\"icon-vimeo-circled\"></i> <span class=\"i-name\">icon-vimeo-circled</span><span class=\"i-code\">0xf307</span></li><li title=\"Code: 0xf309\"><i class=\"icon-twitter\"></i> <span class=\"i-name\">icon-twitter</span><span class=\"i-code\">0xf309</span></li><li title=\"Code: 0xf30a\"><i class=\"icon-twitter-circled\"></i> <span class=\"i-name\">icon-twitter-circled</span><span class=\"i-code\">0xf30a</span></li><li title=\"Code: 0xf30c\"><i class=\"icon-facebook\"></i> <span class=\"i-name\">icon-facebook</span><span class=\"i-code\">0xf30c</span></li><li title=\"Code: 0xf30d\"><i class=\"icon-facebook-circled\"></i> <span class=\"i-name\">icon-facebook-circled</span><span class=\"i-code\">0xf30d</span></li><li title=\"Code: 0xf30e\"><i class=\"icon-facebook-squared\"></i> <span class=\"i-name\">icon-facebook-squared</span><span class=\"i-code\">0xf30e</span></li><li title=\"Code: 0xf30f\"><i class=\"icon-gplus\"></i> <span class=\"i-name\">icon-gplus</span><span class=\"i-code\">0xf30f</span></li><li title=\"Code: 0xf310\"><i class=\"icon-gplus-circled\"></i> <span class=\"i-name\">icon-gplus-circled</span><span class=\"i-code\">0xf310</span></li><li title=\"Code: 0xf312\"><i class=\"icon-pinterest\"></i> <span class=\"i-name\">icon-pinterest</span><span class=\"i-code\">0xf312</span></li><li title=\"Code: 0xf313\"><i class=\"icon-pinterest-circled\"></i> <span class=\"i-name\">icon-pinterest-circled</span><span class=\"i-code\">0xf313</span></li><li title=\"Code: 0xf315\"><i class=\"icon-tumblr\"></i> <span class=\"i-name\">icon-tumblr</span><span class=\"i-code\">0xf315</span></li><li title=\"Code: 0xf316\"><i class=\"icon-tumblr-circled\"></i> <span class=\"i-name\">icon-tumblr-circled</span><span class=\"i-code\">0xf316</span></li><li title=\"Code: 0xf318\"><i class=\"icon-linkedin\"></i> <span class=\"i-name\">icon-linkedin</span><span class=\"i-code\">0xf318</span></li><li title=\"Code: 0xf319\"><i class=\"icon-linkedin-circled\"></i> <span class=\"i-name\">icon-linkedin-circled</span><span class=\"i-code\">0xf319</span></li><li title=\"Code: 0xf31b\"><i class=\"icon-dribbble\"></i> <span class=\"i-name\">icon-dribbble</span><span class=\"i-code\">0xf31b</span></li><li title=\"Code: 0xf31c\"><i class=\"icon-dribbble-circled\"></i> <span class=\"i-name\">icon-dribbble-circled</span><span class=\"i-code\">0xf31c</span></li><li title=\"Code: 0xf31e\"><i class=\"icon-stumbleupon\"></i> <span class=\"i-name\">icon-stumbleupon</span><span class=\"i-code\">0xf31e</span></li><li title=\"Code: 0xf31f\"><i class=\"icon-stumbleupon-circled\"></i> <span class=\"i-name\">icon-stumbleupon-circled</span><span class=\"i-code\">0xf31f</span></li><li title=\"Code: 0xf321\"><i class=\"icon-lastfm\"></i> <span class=\"i-name\">icon-lastfm</span><span class=\"i-code\">0xf321</span></li><li title=\"Code: 0xf322\"><i class=\"icon-lastfm-circled\"></i> <span class=\"i-name\">icon-lastfm-circled</span><span class=\"i-code\">0xf322</span></li><li title=\"Code: 0xf324\"><i class=\"icon-rdio\"></i> <span class=\"i-name\">icon-rdio</span><span class=\"i-code\">0xf324</span></li><li title=\"Code: 0xf325\"><i class=\"icon-rdio-circled\"></i> <span class=\"i-name\">icon-rdio-circled</span><span class=\"i-code\">0xf325</span></li><li title=\"Code: 0xf327\"><i class=\"icon-spotify\"></i> <span class=\"i-name\">icon-spotify</span><span class=\"i-code\">0xf327</span></li><li title=\"Code: 0xf328\"><i class=\"icon-spotify-circled\"></i> <span class=\"i-name\">icon-spotify-circled</span><span class=\"i-code\">0xf328</span></li><li title=\"Code: 0xf32a\"><i class=\"icon-qq\"></i> <span class=\"i-name\">icon-qq</span><span class=\"i-code\">0xf32a</span></li><li title=\"Code: 0xf32d\"><i class=\"icon-instagrem\"></i> <span class=\"i-name\">icon-instagrem</span><span class=\"i-code\">0xf32d</span></li><li title=\"Code: 0xf330\"><i class=\"icon-dropbox\"></i> <span class=\"i-name\">icon-dropbox</span><span class=\"i-code\">0xf330</span></li><li title=\"Code: 0xf333\"><i class=\"icon-evernote\"></i> <span class=\"i-name\">icon-evernote</span><span class=\"i-code\">0xf333</span></li><li title=\"Code: 0xf336\"><i class=\"icon-flattr\"></i> <span class=\"i-name\">icon-flattr</span><span class=\"i-code\">0xf336</span></li><li title=\"Code: 0xf339\"><i class=\"icon-skype\"></i> <span class=\"i-name\">icon-skype</span><span class=\"i-code\">0xf339</span></li><li title=\"Code: 0xf33a\"><i class=\"icon-skype-circled\"></i> <span class=\"i-name\">icon-skype-circled</span><span class=\"i-code\">0xf33a</span></li><li title=\"Code: 0xf33c\"><i class=\"icon-renren\"></i> <span class=\"i-name\">icon-renren</span><span class=\"i-code\">0xf33c</span></li><li title=\"Code: 0xf33f\"><i class=\"icon-sina-weibo\"></i> <span class=\"i-name\">icon-sina-weibo</span><span class=\"i-code\">0xf33f</span></li><li title=\"Code: 0xf342\"><i class=\"icon-paypal\"></i> <span class=\"i-name\">icon-paypal</span><span class=\"i-code\">0xf342</span></li><li title=\"Code: 0xf345\"><i class=\"icon-picasa\"></i> <span class=\"i-name\">icon-picasa</span><span class=\"i-code\">0xf345</span></li><li title=\"Code: 0xf348\"><i class=\"icon-soundcloud\"></i> <span class=\"i-name\">icon-soundcloud</span><span class=\"i-code\">0xf348</span></li><li title=\"Code: 0xf34b\"><i class=\"icon-mixi\"></i> <span class=\"i-name\">icon-mixi</span><span class=\"i-code\">0xf34b</span></li><li title=\"Code: 0xf34e\"><i class=\"icon-behance\"></i> <span class=\"i-name\">icon-behance</span><span class=\"i-code\">0xf34e</span></li><li title=\"Code: 0xf351\"><i class=\"icon-google-circles\"></i> <span class=\"i-name\">icon-google-circles</span><span class=\"i-code\">0xf351</span></li><li title=\"Code: 0xf354\"><i class=\"icon-vkontakte\"></i> <span class=\"i-name\">icon-vkontakte</span><span class=\"i-code\">0xf354</span></li><li title=\"Code: 0xf357\"><i class=\"icon-smashing\"></i> <span class=\"i-name\">icon-smashing</span><span class=\"i-code\">0xf357</span></li><li title=\"Code: 0xf601\"><i class=\"icon-sweden\"></i> <span class=\"i-name\">icon-sweden</span><span class=\"i-code\">0xf601</span></li><li title=\"Code: 0xf600\"><i class=\"icon-db-shape\"></i> <span class=\"i-name\">icon-db-shape</span><span class=\"i-code\">0xf600</span></li><li title=\"Code: 0xf603\"><i class=\"icon-logo-db\"></i> <span class=\"i-name\">icon-logo-db</span><span class=\"i-code\">0xf603</span></li></ul></div></div></div></body></html>"
  },
  {
    "path": "maverix-theme/bower_components/entypo/font/entypo.css",
    "content": "@charset \"UTF-8\";\n\n@font-face {\n  font-family: 'entypo';\n  src: url('entypo.eot');\n  src: url('entypo.eot?#iefix') format('embedded-opentype'),\n       url('entypo.woff') format('woff'),\n       url('entypo.ttf') format('truetype'),\n       url('entypo.svg#entypo') format('svg');\n  font-weight: normal; font-style: normal;\n}\n\n[class^=\"icon-\"], [class*=\" icon-\"] {\n  font-family: entypo;\n  font-style: normal;\n\n  /* font-size: 14px; */\n\n  display: inline-block;\n  width: 1.1em;\n  margin-right: .1em;\n  text-align: center;\n}\n\n.the-icons li {\n  font-size: 14px;\n  line-height: 24px;\n  height: 24px;\n}\n\n.icon-note:before { content: \"\\266a\"; } /* '\\266a' */\n.icon-note-beamed:before { content: \"\\266b\"; } /* '\\266b' */\n.icon-music:before { content: \"🎵\"; } /* '\\1f3b5' */\n.icon-search:before { content: \"🔍\"; } /* '\\1f50d' */\n.icon-flashlight:before { content: \"🔦\"; } /* '\\1f526' */\n.icon-mail:before { content: \"\\2709\"; } /* '\\2709' */\n.icon-heart:before { content: \"\\2665\"; } /* '\\2665' */\n.icon-heart-empty:before { content: \"\\2661\"; } /* '\\2661' */\n.icon-star:before { content: \"\\2605\"; } /* '\\2605' */\n.icon-star-empty:before { content: \"\\2606\"; } /* '\\2606' */\n.icon-user:before { content: \"👤\"; } /* '\\1f464' */\n.icon-users:before { content: \"👥\"; } /* '\\1f465' */\n.icon-user-add:before { content: \"\\e700\"; } /* '\\e700' */\n.icon-video:before { content: \"🎬\"; } /* '\\1f3ac' */\n.icon-picture:before { content: \"🌄\"; } /* '\\1f304' */\n.icon-camera:before { content: \"📷\"; } /* '\\1f4f7' */\n.icon-layout:before { content: \"\\268f\"; } /* '\\268f' */\n.icon-menu:before { content: \"\\2630\"; } /* '\\2630' */\n.icon-check:before { content: \"\\2713\"; } /* '\\2713' */\n.icon-cancel:before { content: \"\\2715\"; } /* '\\2715' */\n.icon-cancel-circled:before { content: \"\\2716\"; } /* '\\2716' */\n.icon-cancel-squared:before { content: \"\\274e\"; } /* '\\274e' */\n.icon-plus:before { content: \"\\2b\"; } /* '\\2b' */\n.icon-plus-circled:before { content: \"\\2795\"; } /* '\\2795' */\n.icon-plus-squared:before { content: \"\\229e\"; } /* '\\229e' */\n.icon-minus:before { content: \"\\2d\"; } /* '\\2d' */\n.icon-minus-circled:before { content: \"\\2796\"; } /* '\\2796' */\n.icon-minus-squared:before { content: \"\\229f\"; } /* '\\229f' */\n.icon-help:before { content: \"\\2753\"; } /* '\\2753' */\n.icon-help-circled:before { content: \"\\e704\"; } /* '\\e704' */\n.icon-info:before { content: \"\\2139\"; } /* '\\2139' */\n.icon-info-circled:before { content: \"\\e705\"; } /* '\\e705' */\n.icon-back:before { content: \"🔙\"; } /* '\\1f519' */\n.icon-home:before { content: \"\\2302\"; } /* '\\2302' */\n.icon-link:before { content: \"🔗\"; } /* '\\1f517' */\n.icon-attach:before { content: \"📎\"; } /* '\\1f4ce' */\n.icon-lock:before { content: \"🔒\"; } /* '\\1f512' */\n.icon-lock-open:before { content: \"🔓\"; } /* '\\1f513' */\n.icon-eye:before { content: \"\\e70a\"; } /* '\\e70a' */\n.icon-tag:before { content: \"\\e70c\"; } /* '\\e70c' */\n.icon-bookmark:before { content: \"🔖\"; } /* '\\1f516' */\n.icon-bookmarks:before { content: \"📑\"; } /* '\\1f4d1' */\n.icon-flag:before { content: \"\\2691\"; } /* '\\2691' */\n.icon-thumbs-up:before { content: \"👍\"; } /* '\\1f44d' */\n.icon-thumbs-down:before { content: \"👎\"; } /* '\\1f44e' */\n.icon-download:before { content: \"📥\"; } /* '\\1f4e5' */\n.icon-upload:before { content: \"📤\"; } /* '\\1f4e4' */\n.icon-upload-cloud:before { content: \"\\e711\"; } /* '\\e711' */\n.icon-reply:before { content: \"\\e712\"; } /* '\\e712' */\n.icon-reply-all:before { content: \"\\e713\"; } /* '\\e713' */\n.icon-forward:before { content: \"\\27a6\"; } /* '\\27a6' */\n.icon-quote:before { content: \"\\275e\"; } /* '\\275e' */\n.icon-code:before { content: \"\\e714\"; } /* '\\e714' */\n.icon-export:before { content: \"\\e715\"; } /* '\\e715' */\n.icon-pencil:before { content: \"\\270e\"; } /* '\\270e' */\n.icon-feather:before { content: \"\\2712\"; } /* '\\2712' */\n.icon-print:before { content: \"\\e716\"; } /* '\\e716' */\n.icon-retweet:before { content: \"\\e717\"; } /* '\\e717' */\n.icon-keyboard:before { content: \"\\2328\"; } /* '\\2328' */\n.icon-comment:before { content: \"\\e718\"; } /* '\\e718' */\n.icon-chat:before { content: \"\\e720\"; } /* '\\e720' */\n.icon-bell:before { content: \"🔔\"; } /* '\\1f514' */\n.icon-attention:before { content: \"\\26a0\"; } /* '\\26a0' */\n.icon-alert:before { content: \"💥\"; } /* '\\1f4a5' */\n.icon-vcard:before { content: \"\\e722\"; } /* '\\e722' */\n.icon-address:before { content: \"\\e723\"; } /* '\\e723' */\n.icon-location:before { content: \"\\e724\"; } /* '\\e724' */\n.icon-map:before { content: \"\\e727\"; } /* '\\e727' */\n.icon-direction:before { content: \"\\27a2\"; } /* '\\27a2' */\n.icon-compass:before { content: \"\\e728\"; } /* '\\e728' */\n.icon-cup:before { content: \"\\2615\"; } /* '\\2615' */\n.icon-trash:before { content: \"\\e729\"; } /* '\\e729' */\n.icon-doc:before { content: \"\\e730\"; } /* '\\e730' */\n.icon-docs:before { content: \"\\e736\"; } /* '\\e736' */\n.icon-doc-landscape:before { content: \"\\e737\"; } /* '\\e737' */\n.icon-doc-text:before { content: \"📄\"; } /* '\\1f4c4' */\n.icon-doc-text-inv:before { content: \"\\e731\"; } /* '\\e731' */\n.icon-newspaper:before { content: \"📰\"; } /* '\\1f4f0' */\n.icon-book-open:before { content: \"📖\"; } /* '\\1f4d6' */\n.icon-book:before { content: \"📕\"; } /* '\\1f4d5' */\n.icon-folder:before { content: \"📁\"; } /* '\\1f4c1' */\n.icon-archive:before { content: \"\\e738\"; } /* '\\e738' */\n.icon-box:before { content: \"📦\"; } /* '\\1f4e6' */\n.icon-rss:before { content: \"\\e73a\"; } /* '\\e73a' */\n.icon-phone:before { content: \"📞\"; } /* '\\1f4de' */\n.icon-cog:before { content: \"\\2699\"; } /* '\\2699' */\n.icon-tools:before { content: \"\\2692\"; } /* '\\2692' */\n.icon-share:before { content: \"\\e73c\"; } /* '\\e73c' */\n.icon-shareable:before { content: \"\\e73e\"; } /* '\\e73e' */\n.icon-basket:before { content: \"\\e73d\"; } /* '\\e73d' */\n.icon-bag:before { content: \"👜\"; } /* '\\1f45c' */\n.icon-calendar:before { content: \"📅\"; } /* '\\1f4c5' */\n.icon-login:before { content: \"\\e740\"; } /* '\\e740' */\n.icon-logout:before { content: \"\\e741\"; } /* '\\e741' */\n.icon-mic:before { content: \"🎤\"; } /* '\\1f3a4' */\n.icon-mute:before { content: \"🔇\"; } /* '\\1f507' */\n.icon-sound:before { content: \"🔊\"; } /* '\\1f50a' */\n.icon-volume:before { content: \"\\e742\"; } /* '\\e742' */\n.icon-clock:before { content: \"🕔\"; } /* '\\1f554' */\n.icon-hourglass:before { content: \"\\23f3\"; } /* '\\23f3' */\n.icon-lamp:before { content: \"💡\"; } /* '\\1f4a1' */\n.icon-light-down:before { content: \"🔅\"; } /* '\\1f505' */\n.icon-light-up:before { content: \"🔆\"; } /* '\\1f506' */\n.icon-adjust:before { content: \"\\25d1\"; } /* '\\25d1' */\n.icon-block:before { content: \"🚫\"; } /* '\\1f6ab' */\n.icon-resize-full:before { content: \"\\e744\"; } /* '\\e744' */\n.icon-resize-small:before { content: \"\\e746\"; } /* '\\e746' */\n.icon-popup:before { content: \"\\e74c\"; } /* '\\e74c' */\n.icon-publish:before { content: \"\\e74d\"; } /* '\\e74d' */\n.icon-window:before { content: \"\\e74e\"; } /* '\\e74e' */\n.icon-arrow-combo:before { content: \"\\e74f\"; } /* '\\e74f' */\n.icon-down-circled:before { content: \"\\e758\"; } /* '\\e758' */\n.icon-left-circled:before { content: \"\\e759\"; } /* '\\e759' */\n.icon-right-circled:before { content: \"\\e75a\"; } /* '\\e75a' */\n.icon-up-circled:before { content: \"\\e75b\"; } /* '\\e75b' */\n.icon-down-open:before { content: \"\\e75c\"; } /* '\\e75c' */\n.icon-left-open:before { content: \"\\e75d\"; } /* '\\e75d' */\n.icon-right-open:before { content: \"\\e75e\"; } /* '\\e75e' */\n.icon-up-open:before { content: \"\\e75f\"; } /* '\\e75f' */\n.icon-down-open-mini:before { content: \"\\e760\"; } /* '\\e760' */\n.icon-left-open-mini:before { content: \"\\e761\"; } /* '\\e761' */\n.icon-right-open-mini:before { content: \"\\e762\"; } /* '\\e762' */\n.icon-up-open-mini:before { content: \"\\e763\"; } /* '\\e763' */\n.icon-down-open-big:before { content: \"\\e764\"; } /* '\\e764' */\n.icon-left-open-big:before { content: \"\\e765\"; } /* '\\e765' */\n.icon-right-open-big:before { content: \"\\e766\"; } /* '\\e766' */\n.icon-up-open-big:before { content: \"\\e767\"; } /* '\\e767' */\n.icon-down:before { content: \"\\2b07\"; } /* '\\2b07' */\n.icon-left:before { content: \"\\2b05\"; } /* '\\2b05' */\n.icon-right:before { content: \"\\27a1\"; } /* '\\27a1' */\n.icon-up:before { content: \"\\2b06\"; } /* '\\2b06' */\n.icon-down-dir:before { content: \"\\25be\"; } /* '\\25be' */\n.icon-left-dir:before { content: \"\\25c2\"; } /* '\\25c2' */\n.icon-right-dir:before { content: \"\\25b8\"; } /* '\\25b8' */\n.icon-up-dir:before { content: \"\\25b4\"; } /* '\\25b4' */\n.icon-down-bold:before { content: \"\\e4b0\"; } /* '\\e4b0' */\n.icon-left-bold:before { content: \"\\e4ad\"; } /* '\\e4ad' */\n.icon-right-bold:before { content: \"\\e4ae\"; } /* '\\e4ae' */\n.icon-up-bold:before { content: \"\\e4af\"; } /* '\\e4af' */\n.icon-down-thin:before { content: \"\\2193\"; } /* '\\2193' */\n.icon-left-thin:before { content: \"\\2190\"; } /* '\\2190' */\n.icon-right-thin:before { content: \"\\2192\"; } /* '\\2192' */\n.icon-up-thin:before { content: \"\\2191\"; } /* '\\2191' */\n.icon-ccw:before { content: \"\\27f2\"; } /* '\\27f2' */\n.icon-cw:before { content: \"\\27f3\"; } /* '\\27f3' */\n.icon-arrows-ccw:before { content: \"🔄\"; } /* '\\1f504' */\n.icon-level-down:before { content: \"\\21b3\"; } /* '\\21b3' */\n.icon-level-up:before { content: \"\\21b0\"; } /* '\\21b0' */\n.icon-shuffle:before { content: \"🔀\"; } /* '\\1f500' */\n.icon-loop:before { content: \"🔁\"; } /* '\\1f501' */\n.icon-switch:before { content: \"\\21c6\"; } /* '\\21c6' */\n.icon-play:before { content: \"\\25b6\"; } /* '\\25b6' */\n.icon-stop:before { content: \"\\25a0\"; } /* '\\25a0' */\n.icon-pause:before { content: \"\\2389\"; } /* '\\2389' */\n.icon-record:before { content: \"\\26ab\"; } /* '\\26ab' */\n.icon-to-end:before { content: \"\\23ed\"; } /* '\\23ed' */\n.icon-to-start:before { content: \"\\23ee\"; } /* '\\23ee' */\n.icon-fast-forward:before { content: \"\\23e9\"; } /* '\\23e9' */\n.icon-fast-backward:before { content: \"\\23ea\"; } /* '\\23ea' */\n.icon-progress-0:before { content: \"\\e768\"; } /* '\\e768' */\n.icon-progress-1:before { content: \"\\e769\"; } /* '\\e769' */\n.icon-progress-2:before { content: \"\\e76a\"; } /* '\\e76a' */\n.icon-progress-3:before { content: \"\\e76b\"; } /* '\\e76b' */\n.icon-target:before { content: \"🎯\"; } /* '\\1f3af' */\n.icon-palette:before { content: \"🎨\"; } /* '\\1f3a8' */\n.icon-list:before { content: \"\\e005\"; } /* '\\e005' */\n.icon-list-add:before { content: \"\\e003\"; } /* '\\e003' */\n.icon-signal:before { content: \"📶\"; } /* '\\1f4f6' */\n.icon-trophy:before { content: \"🏆\"; } /* '\\1f3c6' */\n.icon-battery:before { content: \"🔋\"; } /* '\\1f50b' */\n.icon-back-in-time:before { content: \"\\e771\"; } /* '\\e771' */\n.icon-monitor:before { content: \"💻\"; } /* '\\1f4bb' */\n.icon-mobile:before { content: \"📱\"; } /* '\\1f4f1' */\n.icon-network:before { content: \"\\e776\"; } /* '\\e776' */\n.icon-cd:before { content: \"💿\"; } /* '\\1f4bf' */\n.icon-inbox:before { content: \"\\e777\"; } /* '\\e777' */\n.icon-install:before { content: \"\\e778\"; } /* '\\e778' */\n.icon-globe:before { content: \"🌎\"; } /* '\\1f30e' */\n.icon-cloud:before { content: \"\\2601\"; } /* '\\2601' */\n.icon-cloud-thunder:before { content: \"\\26c8\"; } /* '\\26c8' */\n.icon-flash:before { content: \"\\26a1\"; } /* '\\26a1' */\n.icon-moon:before { content: \"\\263d\"; } /* '\\263d' */\n.icon-flight:before { content: \"\\2708\"; } /* '\\2708' */\n.icon-paper-plane:before { content: \"\\e79b\"; } /* '\\e79b' */\n.icon-leaf:before { content: \"🍂\"; } /* '\\1f342' */\n.icon-lifebuoy:before { content: \"\\e788\"; } /* '\\e788' */\n.icon-mouse:before { content: \"\\e789\"; } /* '\\e789' */\n.icon-briefcase:before { content: \"💼\"; } /* '\\1f4bc' */\n.icon-suitcase:before { content: \"\\e78e\"; } /* '\\e78e' */\n.icon-dot:before { content: \"\\e78b\"; } /* '\\e78b' */\n.icon-dot-2:before { content: \"\\e78c\"; } /* '\\e78c' */\n.icon-dot-3:before { content: \"\\e78d\"; } /* '\\e78d' */\n.icon-brush:before { content: \"\\e79a\"; } /* '\\e79a' */\n.icon-magnet:before { content: \"\\e7a1\"; } /* '\\e7a1' */\n.icon-infinity:before { content: \"\\221e\"; } /* '\\221e' */\n.icon-erase:before { content: \"\\232b\"; } /* '\\232b' */\n.icon-chart-pie:before { content: \"\\e751\"; } /* '\\e751' */\n.icon-chart-line:before { content: \"📈\"; } /* '\\1f4c8' */\n.icon-chart-bar:before { content: \"📊\"; } /* '\\1f4ca' */\n.icon-chart-area:before { content: \"🔾\"; } /* '\\1f53e' */\n.icon-tape:before { content: \"\\2707\"; } /* '\\2707' */\n.icon-graduation-cap:before { content: \"🎓\"; } /* '\\1f393' */\n.icon-language:before { content: \"\\e752\"; } /* '\\e752' */\n.icon-ticket:before { content: \"🎫\"; } /* '\\1f3ab' */\n.icon-water:before { content: \"💦\"; } /* '\\1f4a6' */\n.icon-droplet:before { content: \"💧\"; } /* '\\1f4a7' */\n.icon-air:before { content: \"\\e753\"; } /* '\\e753' */\n.icon-credit-card:before { content: \"💳\"; } /* '\\1f4b3' */\n.icon-floppy:before { content: \"💾\"; } /* '\\1f4be' */\n.icon-clipboard:before { content: \"📋\"; } /* '\\1f4cb' */\n.icon-megaphone:before { content: \"📣\"; } /* '\\1f4e3' */\n.icon-database:before { content: \"\\e754\"; } /* '\\e754' */\n.icon-drive:before { content: \"\\e755\"; } /* '\\e755' */\n.icon-bucket:before { content: \"\\e756\"; } /* '\\e756' */\n.icon-thermometer:before { content: \"\\e757\"; } /* '\\e757' */\n.icon-key:before { content: \"🔑\"; } /* '\\1f511' */\n.icon-flow-cascade:before { content: \"\\e790\"; } /* '\\e790' */\n.icon-flow-branch:before { content: \"\\e791\"; } /* '\\e791' */\n.icon-flow-tree:before { content: \"\\e792\"; } /* '\\e792' */\n.icon-flow-line:before { content: \"\\e793\"; } /* '\\e793' */\n.icon-flow-parallel:before { content: \"\\e794\"; } /* '\\e794' */\n.icon-rocket:before { content: \"🚀\"; } /* '\\1f680' */\n.icon-gauge:before { content: \"\\e7a2\"; } /* '\\e7a2' */\n.icon-traffic-cone:before { content: \"\\e7a3\"; } /* '\\e7a3' */\n.icon-cc:before { content: \"\\e7a5\"; } /* '\\e7a5' */\n.icon-cc-by:before { content: \"\\e7a6\"; } /* '\\e7a6' */\n.icon-cc-nc:before { content: \"\\e7a7\"; } /* '\\e7a7' */\n.icon-cc-nc-eu:before { content: \"\\e7a8\"; } /* '\\e7a8' */\n.icon-cc-nc-jp:before { content: \"\\e7a9\"; } /* '\\e7a9' */\n.icon-cc-sa:before { content: \"\\e7aa\"; } /* '\\e7aa' */\n.icon-cc-nd:before { content: \"\\e7ab\"; } /* '\\e7ab' */\n.icon-cc-pd:before { content: \"\\e7ac\"; } /* '\\e7ac' */\n.icon-cc-zero:before { content: \"\\e7ad\"; } /* '\\e7ad' */\n.icon-cc-share:before { content: \"\\e7ae\"; } /* '\\e7ae' */\n.icon-cc-remix:before { content: \"\\e7af\"; } /* '\\e7af' */\n.icon-github:before { content: \"\\f300\"; } /* '\\f300' */\n.icon-github-circled:before { content: \"\\f301\"; } /* '\\f301' */\n.icon-flickr:before { content: \"\\f303\"; } /* '\\f303' */\n.icon-flickr-circled:before { content: \"\\f304\"; } /* '\\f304' */\n.icon-vimeo:before { content: \"\\f306\"; } /* '\\f306' */\n.icon-vimeo-circled:before { content: \"\\f307\"; } /* '\\f307' */\n.icon-twitter:before { content: \"\\f309\"; } /* '\\f309' */\n.icon-twitter-circled:before { content: \"\\f30a\"; } /* '\\f30a' */\n.icon-facebook:before { content: \"\\f30c\"; } /* '\\f30c' */\n.icon-facebook-circled:before { content: \"\\f30d\"; } /* '\\f30d' */\n.icon-facebook-squared:before { content: \"\\f30e\"; } /* '\\f30e' */\n.icon-gplus:before { content: \"\\f30f\"; } /* '\\f30f' */\n.icon-gplus-circled:before { content: \"\\f310\"; } /* '\\f310' */\n.icon-pinterest:before { content: \"\\f312\"; } /* '\\f312' */\n.icon-pinterest-circled:before { content: \"\\f313\"; } /* '\\f313' */\n.icon-tumblr:before { content: \"\\f315\"; } /* '\\f315' */\n.icon-tumblr-circled:before { content: \"\\f316\"; } /* '\\f316' */\n.icon-linkedin:before { content: \"\\f318\"; } /* '\\f318' */\n.icon-linkedin-circled:before { content: \"\\f319\"; } /* '\\f319' */\n.icon-dribbble:before { content: \"\\f31b\"; } /* '\\f31b' */\n.icon-dribbble-circled:before { content: \"\\f31c\"; } /* '\\f31c' */\n.icon-stumbleupon:before { content: \"\\f31e\"; } /* '\\f31e' */\n.icon-stumbleupon-circled:before { content: \"\\f31f\"; } /* '\\f31f' */\n.icon-lastfm:before { content: \"\\f321\"; } /* '\\f321' */\n.icon-lastfm-circled:before { content: \"\\f322\"; } /* '\\f322' */\n.icon-rdio:before { content: \"\\f324\"; } /* '\\f324' */\n.icon-rdio-circled:before { content: \"\\f325\"; } /* '\\f325' */\n.icon-spotify:before { content: \"\\f327\"; } /* '\\f327' */\n.icon-spotify-circled:before { content: \"\\f328\"; } /* '\\f328' */\n.icon-qq:before { content: \"\\f32a\"; } /* '\\f32a' */\n.icon-instagrem:before { content: \"\\f32d\"; } /* '\\f32d' */\n.icon-dropbox:before { content: \"\\f330\"; } /* '\\f330' */\n.icon-evernote:before { content: \"\\f333\"; } /* '\\f333' */\n.icon-flattr:before { content: \"\\f336\"; } /* '\\f336' */\n.icon-skype:before { content: \"\\f339\"; } /* '\\f339' */\n.icon-skype-circled:before { content: \"\\f33a\"; } /* '\\f33a' */\n.icon-renren:before { content: \"\\f33c\"; } /* '\\f33c' */\n.icon-sina-weibo:before { content: \"\\f33f\"; } /* '\\f33f' */\n.icon-paypal:before { content: \"\\f342\"; } /* '\\f342' */\n.icon-picasa:before { content: \"\\f345\"; } /* '\\f345' */\n.icon-soundcloud:before { content: \"\\f348\"; } /* '\\f348' */\n.icon-mixi:before { content: \"\\f34b\"; } /* '\\f34b' */\n.icon-behance:before { content: \"\\f34e\"; } /* '\\f34e' */\n.icon-google-circles:before { content: \"\\f351\"; } /* '\\f351' */\n.icon-vkontakte:before { content: \"\\f354\"; } /* '\\f354' */\n.icon-smashing:before { content: \"\\f357\"; } /* '\\f357' */\n.icon-sweden:before { content: \"\\f601\"; } /* '\\f601' */\n.icon-db-shape:before { content: \"\\f600\"; } /* '\\f600' */\n.icon-logo-db:before { content: \"\\f603\"; } /* '\\f603' */\n\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/src/demo/README.md",
    "content": "Font demo page templates. Generated code is e bit dirty, but it's done\nintentionally, for easy maintenance & single file buldling\n\nBootstrap CSS generated from original customizer\nhttp://twitter.github.com/bootstrap/customize.html\nBuild options are:\n\n- __Scraffolfing__ - ALL\n- __Base CSS__ - `Headings, body, etc`\n\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/src/demo/bootstrap.styl",
    "content": "/*!\n * Bootstrap v2.2.1\n *\n * Copyright 2012 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.clearfix {\n  *zoom: 1;\n}\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.clearfix:after {\n  clear: both;\n}\n.hide-text {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.input-block-level {\n  display: block;\n  width: 100%;\n  min-height: 30px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nnav,\nsection {\n  display: block;\n}\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n  *display: inline;\n  *zoom: 1;\n}\naudio:not([controls]) {\n  display: none;\n}\nhtml {\n  font-size: 100%;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n}\na:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\na:hover,\na:active {\n  outline: 0;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  /* Responsive images (ensure images don't scale beyond their parents) */\n\n  max-width: 100%;\n  /* Part 1: Set a maxium relative to the parent */\n\n  width: auto\\9;\n  /* IE7-8 need help adjusting responsive images */\n\n  height: auto;\n  /* Part 2: Scale the height according to the width, otherwise you get stretching */\n\n  vertical-align: middle;\n  border: 0;\n  -ms-interpolation-mode: bicubic;\n}\n#map_canvas img,\n.google-maps img {\n  max-width: none;\n}\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  font-size: 100%;\n  vertical-align: middle;\n}\nbutton,\ninput {\n  *overflow: visible;\n  line-height: normal;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\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}\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n  -webkit-appearance: none;\n}\ntextarea {\n  overflow: auto;\n  vertical-align: top;\n}\nbody {\n  margin: 0;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 20px;\n  color: #333333;\n  background-color: #ffffff;\n}\na {\n  color: #0088cc;\n  text-decoration: none;\n}\na:hover {\n  color: #005580;\n  text-decoration: underline;\n}\n.img-rounded {\n  -webkit-border-radius: 6px;\n  -moz-border-radius: 6px;\n  border-radius: 6px;\n}\n.img-polaroid {\n  padding: 4px;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n.img-circle {\n  -webkit-border-radius: 500px;\n  -moz-border-radius: 500px;\n  border-radius: 500px;\n}\n.row {\n  margin-left: -20px;\n  *zoom: 1;\n}\n.row:before,\n.row:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.row:after {\n  clear: both;\n}\n[class*=\"span\"] {\n  float: left;\n  min-height: 1px;\n  margin-left: 20px;\n}\n.container,\n.navbar-static-top .container,\n.navbar-fixed-top .container,\n.navbar-fixed-bottom .container {\n  width: 940px;\n}\n.span12 {\n  width: 940px;\n}\n.span11 {\n  width: 860px;\n}\n.span10 {\n  width: 780px;\n}\n.span9 {\n  width: 700px;\n}\n.span8 {\n  width: 620px;\n}\n.span7 {\n  width: 540px;\n}\n.span6 {\n  width: 460px;\n}\n.span5 {\n  width: 380px;\n}\n.span4 {\n  width: 300px;\n}\n.span3 {\n  width: 220px;\n}\n.span2 {\n  width: 140px;\n}\n.span1 {\n  width: 60px;\n}\n.offset12 {\n  margin-left: 980px;\n}\n.offset11 {\n  margin-left: 900px;\n}\n.offset10 {\n  margin-left: 820px;\n}\n.offset9 {\n  margin-left: 740px;\n}\n.offset8 {\n  margin-left: 660px;\n}\n.offset7 {\n  margin-left: 580px;\n}\n.offset6 {\n  margin-left: 500px;\n}\n.offset5 {\n  margin-left: 420px;\n}\n.offset4 {\n  margin-left: 340px;\n}\n.offset3 {\n  margin-left: 260px;\n}\n.offset2 {\n  margin-left: 180px;\n}\n.offset1 {\n  margin-left: 100px;\n}\n.row-fluid {\n  width: 100%;\n  *zoom: 1;\n}\n.row-fluid:before,\n.row-fluid:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.row-fluid:after {\n  clear: both;\n}\n.row-fluid [class*=\"span\"] {\n  display: block;\n  width: 100%;\n  min-height: 30px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  float: left;\n  margin-left: 2.127659574468085%;\n  *margin-left: 2.074468085106383%;\n}\n.row-fluid [class*=\"span\"]:first-child {\n  margin-left: 0;\n}\n.row-fluid .controls-row [class*=\"span\"] + [class*=\"span\"] {\n  margin-left: 2.127659574468085%;\n}\n.row-fluid .span12 {\n  width: 100%;\n  *width: 99.94680851063829%;\n}\n.row-fluid .span11 {\n  width: 91.48936170212765%;\n  *width: 91.43617021276594%;\n}\n.row-fluid .span10 {\n  width: 82.97872340425532%;\n  *width: 82.92553191489361%;\n}\n.row-fluid .span9 {\n  width: 74.46808510638297%;\n  *width: 74.41489361702126%;\n}\n.row-fluid .span8 {\n  width: 65.95744680851064%;\n  *width: 65.90425531914893%;\n}\n.row-fluid .span7 {\n  width: 57.44680851063829%;\n  *width: 57.39361702127659%;\n}\n.row-fluid .span6 {\n  width: 48.93617021276595%;\n  *width: 48.88297872340425%;\n}\n.row-fluid .span5 {\n  width: 40.42553191489362%;\n  *width: 40.37234042553192%;\n}\n.row-fluid .span4 {\n  width: 31.914893617021278%;\n  *width: 31.861702127659576%;\n}\n.row-fluid .span3 {\n  width: 23.404255319148934%;\n  *width: 23.351063829787233%;\n}\n.row-fluid .span2 {\n  width: 14.893617021276595%;\n  *width: 14.840425531914894%;\n}\n.row-fluid .span1 {\n  width: 6.382978723404255%;\n  *width: 6.329787234042553%;\n}\n.row-fluid .offset12 {\n  margin-left: 104.25531914893617%;\n  *margin-left: 104.14893617021275%;\n}\n.row-fluid .offset12:first-child {\n  margin-left: 102.12765957446808%;\n  *margin-left: 102.02127659574467%;\n}\n.row-fluid .offset11 {\n  margin-left: 95.74468085106382%;\n  *margin-left: 95.6382978723404%;\n}\n.row-fluid .offset11:first-child {\n  margin-left: 93.61702127659574%;\n  *margin-left: 93.51063829787232%;\n}\n.row-fluid .offset10 {\n  margin-left: 87.23404255319149%;\n  *margin-left: 87.12765957446807%;\n}\n.row-fluid .offset10:first-child {\n  margin-left: 85.1063829787234%;\n  *margin-left: 84.99999999999999%;\n}\n.row-fluid .offset9 {\n  margin-left: 78.72340425531914%;\n  *margin-left: 78.61702127659572%;\n}\n.row-fluid .offset9:first-child {\n  margin-left: 76.59574468085106%;\n  *margin-left: 76.48936170212764%;\n}\n.row-fluid .offset8 {\n  margin-left: 70.2127659574468%;\n  *margin-left: 70.10638297872339%;\n}\n.row-fluid .offset8:first-child {\n  margin-left: 68.08510638297872%;\n  *margin-left: 67.9787234042553%;\n}\n.row-fluid .offset7 {\n  margin-left: 61.70212765957446%;\n  *margin-left: 61.59574468085106%;\n}\n.row-fluid .offset7:first-child {\n  margin-left: 59.574468085106375%;\n  *margin-left: 59.46808510638297%;\n}\n.row-fluid .offset6 {\n  margin-left: 53.191489361702125%;\n  *margin-left: 53.085106382978715%;\n}\n.row-fluid .offset6:first-child {\n  margin-left: 51.063829787234035%;\n  *margin-left: 50.95744680851063%;\n}\n.row-fluid .offset5 {\n  margin-left: 44.68085106382979%;\n  *margin-left: 44.57446808510638%;\n}\n.row-fluid .offset5:first-child {\n  margin-left: 42.5531914893617%;\n  *margin-left: 42.4468085106383%;\n}\n.row-fluid .offset4 {\n  margin-left: 36.170212765957444%;\n  *margin-left: 36.06382978723405%;\n}\n.row-fluid .offset4:first-child {\n  margin-left: 34.04255319148936%;\n  *margin-left: 33.93617021276596%;\n}\n.row-fluid .offset3 {\n  margin-left: 27.659574468085104%;\n  *margin-left: 27.5531914893617%;\n}\n.row-fluid .offset3:first-child {\n  margin-left: 25.53191489361702%;\n  *margin-left: 25.425531914893618%;\n}\n.row-fluid .offset2 {\n  margin-left: 19.148936170212764%;\n  *margin-left: 19.04255319148936%;\n}\n.row-fluid .offset2:first-child {\n  margin-left: 17.02127659574468%;\n  *margin-left: 16.914893617021278%;\n}\n.row-fluid .offset1 {\n  margin-left: 10.638297872340425%;\n  *margin-left: 10.53191489361702%;\n}\n.row-fluid .offset1:first-child {\n  margin-left: 8.51063829787234%;\n  *margin-left: 8.404255319148938%;\n}\n[class*=\"span\"].hide,\n.row-fluid [class*=\"span\"].hide {\n  display: none;\n}\n[class*=\"span\"].pull-right,\n.row-fluid [class*=\"span\"].pull-right {\n  float: right;\n}\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  *zoom: 1;\n}\n.container:before,\n.container:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.container:after {\n  clear: both;\n}\n.container-fluid {\n  padding-right: 20px;\n  padding-left: 20px;\n  *zoom: 1;\n}\n.container-fluid:before,\n.container-fluid:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.container-fluid:after {\n  clear: both;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 21px;\n  font-weight: 200;\n  line-height: 30px;\n}\nsmall {\n  font-size: 85%;\n}\nstrong {\n  font-weight: bold;\n}\nem {\n  font-style: italic;\n}\ncite {\n  font-style: normal;\n}\n.muted {\n  color: #999999;\n}\n.text-warning {\n  color: #c09853;\n}\na.text-warning:hover {\n  color: #a47e3c;\n}\n.text-error {\n  color: #b94a48;\n}\na.text-error:hover {\n  color: #953b39;\n}\n.text-info {\n  color: #3a87ad;\n}\na.text-info:hover {\n  color: #2d6987;\n}\n.text-success {\n  color: #468847;\n}\na.text-success:hover {\n  color: #356635;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin: 10px 0;\n  font-family: inherit;\n  font-weight: bold;\n  line-height: 20px;\n  color: inherit;\n  text-rendering: optimizelegibility;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small {\n  font-weight: normal;\n  line-height: 1;\n  color: #999999;\n}\nh1,\nh2,\nh3 {\n  line-height: 40px;\n}\nh1 {\n  font-size: 38.5px;\n}\nh2 {\n  font-size: 31.5px;\n}\nh3 {\n  font-size: 24.5px;\n}\nh4 {\n  font-size: 17.5px;\n}\nh5 {\n  font-size: 14px;\n}\nh6 {\n  font-size: 11.9px;\n}\nh1 small {\n  font-size: 24.5px;\n}\nh2 small {\n  font-size: 17.5px;\n}\nh3 small {\n  font-size: 14px;\n}\nh4 small {\n  font-size: 14px;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 20px 0 30px;\n  border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n  padding: 0;\n  margin: 0 0 10px 25px;\n}\nul ul,\nul ol,\nol ol,\nol ul {\n  margin-bottom: 0;\n}\nli {\n  line-height: 20px;\n}\nul.unstyled,\nol.unstyled {\n  margin-left: 0;\n  list-style: none;\n}\ndl {\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 20px;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 10px;\n}\n.dl-horizontal {\n  *zoom: 1;\n}\n.dl-horizontal:before,\n.dl-horizontal:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.dl-horizontal:after {\n  clear: both;\n}\n.dl-horizontal dt {\n  float: left;\n  width: 160px;\n  clear: left;\n  text-align: right;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.dl-horizontal dd {\n  margin-left: 180px;\n}\nhr {\n  margin: 20px 0;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n  border-bottom: 1px solid #ffffff;\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999999;\n}\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 0 0 0 15px;\n  margin: 0 0 20px;\n  border-left: 5px solid #eeeeee;\n}\nblockquote p {\n  margin-bottom: 0;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 25px;\n}\nblockquote small {\n  display: block;\n  line-height: 20px;\n  color: #999999;\n}\nblockquote small:before {\n  content: '\\2014 \\00A0';\n}\nblockquote.pull-right {\n  float: right;\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n}\nblockquote.pull-right p,\nblockquote.pull-right small {\n  text-align: right;\n}\nblockquote.pull-right small:before {\n  content: '';\n}\nblockquote.pull-right small:after {\n  content: '\\00A0 \\2014';\n}\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  display: block;\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 20px;\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/src/demo/demo.codes.jade",
    "content": ":stylus\n  @font-face {\n    font-family: '#{font.fontname}';\n    src: url('#{font.fontname}.eot');\n    src: url('#{font.fontname}.eot?#iefix') format('embedded-opentype'),\n         url('#{font.fontname}.woff') format('woff'),\n         url('#{font.fontname}.ttf') format('truetype'),\n         url('#{font.fontname}.svg##{font.fontname}') format('svg');\n    font-weight: normal;\n    font-style: normal;\n  }\n\n  [class^=\"icon-\"], [class*=\" icon-\"]\n    &:before\n      font-family '#{font.fontname}'\n      font-style normal\n      font-weight normal\n      speak none\n\n      display inline-block\n      text-decoration inherit\n      width 1em\n      margin-right .2em\n      text-align center\n\n      opacity .8\n\n| <style type=\"text/css\">\n\n- var i, g, css, hex, chr\n- for (i in glyphs)\n  - g = glyphs[i]\n  - css = meta.css_prefix + g.css\n  - hex = '\\\\' + g.code.toString(16)\n  - chr = unichr(g.code)\n  != '\\n'\n  - if (0xffff < g.code)\n    | .#{css}:before { content: '#{chr}'; } /* '#{hex}' */\n  - else\n    | .#{css}:before { content: '#{hex}'; } /* '#{chr}' */\n\n| </style>\n\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/src/demo/demo.jade",
    "content": "!!! 5\nhtml\n  head\n    //if lt IE 9\n      script(src='http://html5shim.googlecode.com/svn/trunk/html5.js')\n\n    meta(charset='UTF-8')\n\n    :stylus\n      @import \"bootstrap\"\n\n      body\n        margin-top 90px\n\n      .header\n        position fixed\n        top: 0\n        left 50%\n        margin-left -480px\n        background-color #fff\n        border-bottom 1px solid #ddd\n        padding-top 10px\n        z-index 10\n\n      .the-icons li\n        font-size 14px\n        line-height 24px\n        height 24px\n\n      .switch\n        position absolute\n        right 0\n        bottom 10px\n        color #888\n        input\n          margin-right .3em\n\n      .codesOn\n        .i-name\n          display none\n        .i-code\n          display inline\n      .i-code\n        display none\n\n    include demo.codes.jade\n\n    script\n      function toggleCodes(on) {\n        var obj = document.getElementById('icons');\n\n        if (on) {\n          obj.className += ' ' + 'codesOn';\n        } else {\n          obj.className = obj.className.replace(' codesOn', '');\n        }\n      }\n\n  body\n    .container.header\n      h1 #{font.fullname}\n        |  \n        small font demo\n      label.switch\n        input(type='checkbox', onclick='toggleCodes(this.checked)')\n        | show codes\n\n    #icons.container\n      .row\n        - var col_class = \"span\" + Math.ceil(12 / meta.columns)\n        - var chunk_size = Math.ceil(glyphs.length / meta.columns)\n        - for (var i = 0; i < meta.columns; i++)\n\n          div(class=col_class)\n            ul.the-icons.unstyled\n\n              - var offset = i * chunk_size\n              - for (var c = 0; c < chunk_size && glyphs[offset + c]; c++)\n                - var g = glyphs[offset + c]\n                - var css_class = meta.css_prefix + (g.css || g.file)\n                - var code = g.code.toString(16)\n                  li(title='Code: 0x#{code}')\n                    i(class=css_class)\n                    |  \n                    span.i-name #{css_class}\n                    span.i-code 0x#{code}\n"
  },
  {
    "path": "maverix-theme/bower_components/entypo/src/original/README.md",
    "content": "This files are taken from original entypo 2.0, with minor changes:\n\n1. TTF\n  - changed descent to 0, accent to 500, to fix scale\n  - autofixed missed points in FontForge\n2. SVG\n  - converted from TTF\n\nSources: http://www.entypo.com/\n"
  },
  {
    "path": "maverix-theme/bower_components/flot/.bower.json",
    "content": "{\n  \"name\": \"Flot\",\n  \"version\": \"0.8.3\",\n  \"main\": \"jquery.flot.js\",\n  \"dependencies\": {\n    \"jquery\": \">= 1.2.6\"\n  },\n  \"homepage\": \"https://github.com/flot/flot\",\n  \"_release\": \"0.8.3\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v0.8.3\",\n    \"commit\": \"453b017cc5acfd75e252b93e8635f57f4196d45d\"\n  },\n  \"_source\": \"git://github.com/flot/flot.git\",\n  \"_target\": \"~0.8.3\",\n  \"_originalSource\": \"flot\",\n  \"_direct\": true\n}"
  },
  {
    "path": "maverix-theme/bower_components/flot/.gitignore",
    "content": "*.min.js\n!excanvas.min.js\nnode_modules/\n"
  },
  {
    "path": "maverix-theme/bower_components/flot/.travis.yml",
    "content": "language: node_js\nnode_js:\n  - 0.8\n"
  },
  {
    "path": "maverix-theme/bower_components/flot/API.md",
    "content": "# Flot Reference #\n\n**Table of Contents**\n\n[Introduction](#introduction)\n| [Data Format](#data-format)\n| [Plot Options](#plot-options)\n| [Customizing the legend](#customizing-the-legend)\n| [Customizing the axes](#customizing-the-axes)\n| [Multiple axes](#multiple-axes)\n| [Time series data](#time-series-data)\n| [Customizing the data series](#customizing-the-data-series)\n| [Customizing the grid](#customizing-the-grid)\n| [Specifying gradients](#specifying-gradients)\n| [Plot Methods](#plot-methods)\n| [Hooks](#hooks)\n| [Plugins](#plugins)\n| [Version number](#version-number)\n\n---\n\n## Introduction ##\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 display 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```\nIn Ruby you can get it using the `#to_i` method on the\n[`Time`](http://apidock.com/ruby/Time/to_i) object. If you're using the\n`active_support` gem (default for Ruby on Rails applications) `#to_i` is also\navailable on the `DateTime` and `ActiveSupport::TimeWithZone` objects. You\nsimply need to multiply the result by 1000:\n\n```ruby\nTime.now.to_i * 1000     # => 1383582043000\n# ActiveSupport examples:\nDateTime.now.to_i * 1000 # => 1383582043000\nActiveSupport::TimeZone.new('Asia/Shanghai').now.to_i * 1000\n# => 1383582043000\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    the [PLUGINS](PLUGINS.md) document 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](PLUGINS.md) document 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": "maverix-theme/bower_components/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.  When\nreporting 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 effort.\n\n### Pull Requests ###\n\nTo make merging as easy as possible, please keep these rules in mind:\n\n 1. Submit new features or architectural changes to the *&lt;version&gt;-work*\n    branch for the next major release.  Submit bug fixes to the master branch.\n\n 2. Divide larger changes into a series of small, logical commits with\n    descriptive messages.\n\n 3. Rebase, if necessary, before submitting your pull request, to reduce the\n    work we need to do to merge it.\n\n 4. Format your code according to the style guidelines below.\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\nUse four-space indents, no tabs.  Do not add horizontal space around parameter\nlists, loop definitions, or array/object indices. For example:\n\n```js\n    for ( var i = 0; i < data.length; i++ ) {  // This block is wrong!\n        if ( data[ i ] > 1 ) {\n            data[ i ] = 2;\n        }\n    }\n\n    for (var i = 0; i < data.length; i++) {  // This block is correct!\n        if (data[i] > 1) {\n            data[i] = 2;\n        }\n    }\n```\n\n#### Comments ####\n\nUse [jsDoc](http://usejsdoc.org) comments for all file and function headers.\nUse // for all inline and block comments, regardless of length.\n\nAll // comment blocks should have an empty line above *and* below them. For\nexample:\n\n```js\n    var a = 5;\n\n    // We're going to loop here\n    // TODO: Make this loop faster, better, stronger!\n\n    for (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    if (a == 1 &&    // This block is wrong!\n        b == 2 &&\n        c == 3) {}\n\n    if (a == 1 && b == 2 && c == 3) {}  // This block is correct!\n```\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/flot/LICENSE.txt",
    "content": "Copyright (c) 2007-2014 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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/flot/NEWS.md",
    "content": "## Flot 0.8.3 ##\n\n### Changes ###\n\n- Updated example code to avoid encouraging unnecessary re-plots.\n  (patch by soenter, pull request #1221)\n\n### Bug fixes ###\n\n - Added a work-around to disable the allocation of extra space for first and\n   last axis ticks, allowing plots to span the full width of their container.\n   A proper solution for this bug will be implemented in the 0.9 release.\n   (reported by Josh Pigford and andig, issue #1212, pull request #1290)\n\n - Fixed a regression introduced in 0.8.1, where the last tick label would\n   sometimes wrap rather than extending the plot's offset to create space.\n   (reported by Elite Gamer, issue #1283)\n\n - Fixed a regression introduced in 0.8.2, where the resize plugin would use\n   unexpectedly high amounts of CPU even when idle.\n   (reported by tommie, issue #1277, pull request #1289)\n\n - Fixed the selection example to work with jQuery 1.9.x and later.\n   (reported by EGLadona and dmfalke, issue #1250, pull request #1285)\n\n - Added a detach shim to fix support for jQuery versions earlier than 1.4.x.\n   (reported by ngavard, issue #1240, pull request #1286)\n\n - Fixed a rare 'Uncaught TypeError' when using the resize plugin in IE 7/8.\n   (reported by tleish, issue #1265, pull request #1289)\n\n - Fixed zoom constraints to apply only in the direction of the zoom.\n   (patch by Neil Katin, issue #1204, pull request #1205)\n\n - Markings lines are no longer blurry when drawn on pixel boundaries.\n   (reported by btccointicker and Rouillard, issue #1210)\n\n - Don't discard original pie data-series values when combining slices.\n   (patch by Phil Tsarik, pull request #1238)\n\n - Fixed broken auto-scale behavior when using deprecated [x|y]2axis options.\n   (reported by jorese, issue #1228, pull request #1284)\n\n - Exposed the dateGenerator function on the plot object, as it used to be\n   before time-mode was moved into a separate plugin.\n   (patch by Paolo Valleri, pull request #1028)\n\n\n## Flot 0.8.2 ##\n\n### Changes ###\n\n - Added a plot.destroy method as a way to free memory when emptying the plot\n   placeholder and then re-using it for some other purpose.\n   (patch by Thodoris Greasidis, issue #1129, pull request #1130)\n\n - Added a table of contents and PLUGINS link to the API documentation.\n   (patches by Brian Peiris, pull requests #1064 and #1127)\n\n - Added Ruby code examples for time conversion.\n   (patch by Mike Połtyn, pull request #1182)\n\n - Minor improvements to API.md and README.md.\n   (patches by Patrik Ragnarsson, pull requests #1085 and #1086)\n\n - Updated inlined jQuery Resize to the latest version to fix errors.\n   (reported by Matthew Sabol and sloker, issues #997 ad #1081)\n\n### Bug fixes ###\n\n - Fixed an unexpected change in behavior that resulted in duplicate tick\n   labels when using a plugin, like flot-tickrotor, that overrode tick labels.\n   (patch by Mark Cote, pull request #1091)\n\n - Fixed a regression from 0.7 where axis labels were given the wrong width,\n   causing them to overlap at certain scales and ignore the labelWidth option.\n   (patch by Benjamin Gram, pull request #1177)\n\n - Fixed a bug where the second axis in an xaxes/yaxes array incorrectly had\n   its 'innermost' property set to false or undefined, even if it was on the\n   other side of the plot from the first axis. This resulted in the axis bar\n   being visible when it shouldn't have been, which was especially obvious\n   when the grid had a left/right border width of zero.\n   (reported by Teq1, fix researched by ryleyb, issue #1056)\n\n - Fixed an error when using a placeholder that has no font-size property.\n   (patch by Craig Oldford, pull request #1135)\n\n - Fixed a regression from 0.7 where nulls at the end of a series were ignored\n   for purposes of determing the range of the x-axis.\n   (reported by Munsifali Rashid, issue #1095)\n\n - If a font size is provided, base the default lineHeight on that size rather\n   that the font size of the plot placeholder, which may be very different.\n   (reported by Daniel Hoffmann Bernardes, issue #1131, pull request #1199)\n\n - Fix broken highlighting for right-aligned bars.\n   (reported by BeWiBu and Mihai Stanciu, issues #975 and #1093, with further\n   assistance by Eric Byers, pull request #1120)\n\n - Prevent white circles from sometimes showing up inside of pie charts.\n   (reported by Pierre Dubois and Jack Klink, issues #1128 and #1073)\n\n - Label formatting no longer breaks when a page contains multiple pie charts.\n   (reported by Brend Wanders, issue #1055)\n\n - When using multiple axes on opposite sides of the plot, the innermost axis\n   coming later in the list no longer has its bar drawn incorrectly.\n   (reported by ryleyb, issue #1056)\n\n - When removing series labels and redrawing the plot, the legend now updates\n   correctly even when using an external container.\n   (patch by Luis Silva, issue #1159, pull request #1160)\n\n - The pie plugin no longer ignores the value of the left offset option.\n   (reported by melanker, issue #1136)\n\n - Fixed a regression from 0.7, where extra padding was added unnecessarily to\n   sides of the plot where there was no last tick label.\n   (reported by sknob001, issue #1048, pull request #1200)\n\n - Fixed incorrect tooltip behavior in the interacting example.\n   (patch by cleroux, issue #686, pull request #1074)\n\n - Fixed an error in CSS color extraction with elements outside the DOM.\n   (patch by execjosh, pull request #1084)\n\n - Fixed :not selector error when using jQuery without Sizzle.\n   (patch by Anthony Ryan, pull request #1180)\n\n - Worked around a browser issue that caused bars to appear un-filled.\n   (reported by irbian, issue #915)\n\n## 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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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]: http://ftp.iana.org/time-zones\n"
  },
  {
    "path": "maverix-theme/bower_components/flot/component.json",
    "content": "{\n\t\"name\": \"Flot\",\n\t\"version\": \"0.8.3\",\n\t\"main\": \"jquery.flot.js\",\n\t\"dependencies\": {\n\t\t\"jquery\": \">= 1.2.6\"\n\t}\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n\n\n\n\n\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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\t$(\"<div id='tooltip'></div>\").css({\n\t\t\tposition: \"absolute\",\n\t\t\tdisplay: \"none\",\n\t\t\tborder: \"1px solid #fdd\",\n\t\t\tpadding: \"2px\",\n\t\t\t\"background-color\": \"#fee\",\n\t\t\topacity: 0.80\n\t\t}).appendTo(\"body\");\n\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\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$(\"#tooltip\").html(item.series.label + \" of \" + x + \" = \" + y)\n\t\t\t\t\t\t.css({top: item.pageY+5, left: item.pageX+5})\n\t\t\t\t\t\t.fadeIn(200);\n\t\t\t\t} else {\n\t\t\t\t\t$(\"#tooltip\").hide();\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\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\" checked=\"checked\"></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\" checked=\"checked\"></input>Enable tooltip</label></p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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\t// Shim allowing us to get the state of the check-box on jQuery versions\n\t\t// prior to 1.6, when prop was added.  The reason we don't just use attr\n\t\t// is because it doesn't work in jQuery versions 1.9.x and later.\n\n\t\t// TODO: Remove this once Flot's minimum supported jQuery reaches 1.6.\n\t\tif (typeof $.fn.prop != 'function') {\n\t\t    $.fn.prop = $.fn.attr;\n\t\t}\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\").prop(\"checked\");\n\n\t\t\tif (zoom) {\n\t\t\t\t$.each(plot.getXAxes(), function(_, axis) {\n\t\t\t\t\tvar opts = axis.options;\n\t\t\t\t\topts.min = ranges.xaxis.from;\n\t\t\t\t\topts.max = ranges.xaxis.to;\n\t\t\t\t});\n\t\t\t\tplot.setupGrid();\n\t\t\t\tplot.draw();\n\t\t\t\tplot.clearSelection();\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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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\t\t\t$.each(plot.getXAxes(), function(_, axis) {\n\t\t\t\tvar opts = axis.options;\n\t\t\t\topts.min = ranges.xaxis.from;\n\t\t\t\topts.max = ranges.xaxis.to;\n\t\t\t});\n\t\t\tplot.setupGrid();\n\t\t\tplot.draw();\n\t\t\tplot.clearSelection();\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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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 - 2014 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/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": "maverix-theme/bower_components/flot/flot.jquery.json",
    "content": "{\n\t\"name\": \"flot\",\n\t\"version\": \"0.8.3\",\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}\n"
  },
  {
    "path": "maverix-theme/bower_components/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\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 or root (have no parent)\n            if (c != '' && c != 'transparent')\n                break;\n            elem = elem.parent();\n        } while (elem.length && !$.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": "maverix-theme/bower_components/flot/jquery.flot.canvas.js",
    "content": "/* Flot plugin for drawing all elements of a plot on the canvas.\n\nCopyright (c) 2007-2014 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": "maverix-theme/bower_components/flot/jquery.flot.categories.js",
    "content": "/* Flot plugin for plotting textual data or categories.\n\nCopyright (c) 2007-2014 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": "maverix-theme/bower_components/flot/jquery.flot.crosshair.js",
    "content": "/* Flot plugin for showing crosshairs when the mouse hovers over the plot.\n\nCopyright (c) 2007-2014 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.5 : 0;\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.floor(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.floor(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": "maverix-theme/bower_components/flot/jquery.flot.errorbars.js",
    "content": "/* Flot plugin for plotting error bars.\n\nCopyright (c) 2007-2014 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": "maverix-theme/bower_components/flot/jquery.flot.fillbetween.js",
    "content": "/* Flot plugin for computing bottoms for filled line and bar charts.\n\nCopyright (c) 2007-2014 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": "maverix-theme/bower_components/flot/jquery.flot.image.js",
    "content": "/* Flot plugin for plotting images.\n\nCopyright (c) 2007-2014 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": "maverix-theme/bower_components/flot/jquery.flot.js",
    "content": "/* Javascript plotting library for jQuery, version 0.8.3.\n\nCopyright (c) 2007-2014 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($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return\"rgb(\"+[o.r,o.g,o.b].join(\",\")+\")\"}else{return\"rgba(\"+[o.r,o.g,o.b,o.a].join(\",\")+\")\"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=\"\"&&c!=\"transparent\")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),\"body\"));if(c==\"rgba(0, 0, 0, 0)\")c=\"transparent\";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));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))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);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))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name==\"transparent\")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={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    // A shim to provide 'detach' to jQuery versions prior to 1.4.  Using a DOM\n    // operation produces the same effect as detach, i.e. removing the element\n    // without touching its jQuery data.\n\n    // Do not merge this into Flot 0.9, since it requires jQuery 1.4.4+.\n\n    if (!$.fn.detach) {\n        $.fn.detach = function() {\n            return this.each(function() {\n                if (this.parentNode) {\n                    this.parentNode.removeChild( this );\n                }\n            });\n        };\n    }\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.destroy = function () {\n            shutdown();\n            placeholder.removeData(\"plot\").empty();\n\n            series = [];\n            options = null;\n            surface = null;\n            overlay = null;\n            eventHolder = null;\n            ctx = null;\n            octx = null;\n            xaxes = [];\n            yaxes = [];\n            hooks = null;\n            highlights = [];\n            plot = null;\n        };\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                fontSize = placeholder.css(\"font-size\"),\n                fontSizeDefault = fontSize ? +fontSize.replace(\"px\", \"\") : 13,\n                fontDefaults = {\n                    style: placeholder.css(\"font-style\"),\n                    size: Math.round(0.8 * fontSizeDefault),\n                    variant: placeholder.css(\"font-variant\"),\n                    weight: placeholder.css(\"font-weight\"),\n                    family: placeholder.css(\"font-family\")\n                };\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                    if (!axisOptions.font.lineHeight) {\n                        axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);\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                    if (!axisOptions.font.lineHeight) {\n                        axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);\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                // Override the inherit to allow the axis to auto-scale\n                if (options.x2axis.min == null) {\n                    options.xaxes[1].min = null;\n                }\n                if (options.x2axis.max == null) {\n                    options.xaxes[1].max = null;\n                }\n            }\n            if (options.y2axis) {\n                options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);\n                options.yaxes[1].position = \"right\";\n                // Override the inherit to allow the axis to auto-scale\n                if (options.y2axis.min == null) {\n                    options.yaxes[1].min = null;\n                }\n                if (options.y2axis.max == null) {\n                    options.yaxes[1].max = null;\n                }\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 !== false) {\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                        default:\n                            delta = -s.bars.barWidth / 2;\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().filter(function(){\n                    return !$(this).hasClass(\"flot-overlay\") && !$(this).hasClass('flot-base');\n                }).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                isXAxis = axis.direction === \"x\",\n                tickLength = axis.options.tickLength,\n                axisMargin = options.grid.axisMargin,\n                padding = options.grid.labelMargin,\n                innermost = true,\n                outermost = true,\n                first = true,\n                found = false;\n\n            // Determine the axis's position in its direction and on its side\n\n            $.each(isXAxis ? xaxes : yaxes, function(i, a) {\n                if (a && (a.show || a.reserveSpace)) {\n                    if (a === axis) {\n                        found = true;\n                    } else if (a.options.position === pos) {\n                        if (found) {\n                            outermost = false;\n                        } else {\n                            innermost = false;\n                        }\n                    }\n                    if (!found) {\n                        first = false;\n                    }\n                }\n            });\n\n            // The outermost axis on each side has no margin\n\n            if (outermost) {\n                axisMargin = 0;\n            }\n\n            // The ticks for the first axis in each direction stretch across\n\n            if (tickLength == null) {\n                tickLength = first ? \"full\" : 5;\n            }\n\n            if (!isNaN(+tickLength))\n                padding += +tickLength;\n\n            if (isXAxis) {\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                axis, i;\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            var margins = {\n                left: minMargin,\n                right: minMargin,\n                top: minMargin,\n                bottom: minMargin\n            };\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                if (axis.reserveSpace && axis.ticks && axis.ticks.length) {\n                    if (axis.direction === \"x\") {\n                        margins.left = Math.max(margins.left, axis.labelWidth / 2);\n                        margins.right = Math.max(margins.right, axis.labelWidth / 2);\n                    } else {\n                        margins.bottom = Math.max(margins.bottom, axis.labelHeight / 2);\n                        margins.top = Math.max(margins.top, axis.labelHeight / 2);\n                    }\n                }\n            });\n\n            plotOffset.left = Math.ceil(Math.max(margins.left, plotOffset.left));\n            plotOffset.right = Math.ceil(Math.max(margins.right, plotOffset.right));\n            plotOffset.top = Math.ceil(Math.max(margins.top, plotOffset.top));\n            plotOffset.bottom = Math.ceil(Math.max(margins.bottom, 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            $.each(axes, function (_, axis) {\n                var axisOpts = axis.options;\n                axis.show = axisOpts.show == null ? axis.used : axisOpts.show;\n                axis.reserveSpace = axisOpts.reserveSpace == null ? axis.show : axisOpts.reserveSpace;\n                setRange(axis);\n            });\n\n            if (showGrid) {\n\n                var allocatedAxes = $.grep(axes, function (axis) {\n                    return axis.show || axis.reserveSpace;\n                });\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, and since so many people use it\n            // we'll add an especially friendly reminder to make sure they included 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                    var xequal = xrange.from === xrange.to,\n                        yequal = yrange.from === yrange.to;\n\n                    if (xequal && yequal) {\n                        continue;\n                    }\n\n                    // then draw\n                    xrange.from = Math.floor(xrange.axis.p2c(xrange.from));\n                    xrange.to = Math.floor(xrange.axis.p2c(xrange.to));\n                    yrange.from = Math.floor(yrange.axis.p2c(yrange.from));\n                    yrange.to = Math.floor(yrange.axis.p2c(yrange.to));\n\n                    if (xequal || yequal) {\n                        var lineWidth = m.lineWidth || options.grid.markingsLineWidth,\n                            subPixel = lineWidth % 2 ? 0.5 : 0;\n                        ctx.beginPath();\n                        ctx.strokeStyle = m.color || options.grid.markingsColor;\n                        ctx.lineWidth = lineWidth;\n                        if (xequal) {\n                            ctx.moveTo(xrange.to + subPixel, yrange.from);\n                            ctx.lineTo(xrange.to + subPixel, yrange.to);\n                        } else {\n                            ctx.moveTo(xrange.from, yrange.to + subPixel);\n                            ctx.lineTo(xrange.to, yrange.to + subPixel);                            \n                        }\n                        ctx.stroke();\n                    } else {\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                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                // Remove text before checking for axis.show and ticks.length;\n                // otherwise plugins, like flot-tickrotor, that draw their own\n                // tick labels will end up with both theirs and the defaults.\n\n                surface.removeText(layer);\n\n                if (!axis.show || axis.ticks.length == 0)\n                    return;\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, 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.fillStyle = fillStyleCallback(bottom, top);\n                c.fillRect(left, top, right - left, bottom - top)\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);\n                if (drawLeft)\n                    c.lineTo(left, top);\n                else\n                    c.moveTo(left, top);\n                if (drawTop)\n                    c.lineTo(right, top);\n                else\n                    c.moveTo(right, top);\n                if (drawRight)\n                    c.lineTo(right, bottom);\n                else\n                    c.moveTo(right, bottom);\n                if (drawBottom)\n                    c.lineTo(left, bottom);\n                else\n                    c.moveTo(left, bottom);\n                c.stroke();\n            }\n        }\n\n        function drawSeriesBars(series) {\n            function plotBars(datapoints, barLeft, barRight, 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, 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                default:\n                    barLeft = -series.bars.barWidth / 2;\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, 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            if (options.legend.container != null) {\n                $(options.legend.container).html(\"\");\n            } else {\n                placeholder.find(\".legend\").remove();\n            }\n\n            if (!options.legend.show) {\n                return;\n            }\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\n                    var barLeft, barRight;\n\n                    switch (s.bars.align) {\n                        case \"left\":\n                            barLeft = 0;\n                            break;\n                        case \"right\":\n                            barLeft = -s.bars.barWidth;\n                            break;\n                        default:\n                            barLeft = -s.bars.barWidth / 2;\n                    }\n\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;\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                default:\n                    barLeft = -series.bars.barWidth / 2;\n            }\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                    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.3\";\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": "maverix-theme/bower_components/flot/jquery.flot.navigate.js",
    "content": "/* Flot plugin for adding the ability to pan and zoom the plot.\n\nCopyright (c) 2007-2014 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] && amount >1) ||\n                     (zr[1] != null && range > zr[1] && amount <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": "maverix-theme/bower_components/flot/jquery.flot.pie.js",
    "content": "/* Flot plugin for rendering pie charts.\n\nCopyright (c) 2007-2014 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\toptions = 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\t$.extend(data[i], {     /* extend to allow keeping all other original data values\n\t\t\t\t\t\t                           and using them e.g. in labelFormatter. */\n\t\t\t\t\t\t\tdata: [[1, value]],\n\t\t\t\t\t\t\tcolor: data[i].color,\n\t\t\t\t\t\t\tlabel: data[i].label,\n\t\t\t\t\t\t\tangle: value * Math.PI * 2 / total,\n\t\t\t\t\t\t\tpercent: value / (total / 100)\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\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\tif (centerLeft < maxRadius) {\n\t\t\t\t\tcenterLeft = maxRadius;\n\t\t\t\t} else if (centerLeft > canvasWidth - maxRadius) {\n\t\t\t\t\tcenterLeft = canvasWidth - maxRadius;\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\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": "maverix-theme/bower_components/flot/jquery.flot.resize.js",
    "content": "/* Flot plugin for automatically redrawing plots as the placeholder resizes.\n\nCopyright (c) 2007-2014 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(function($,e,t){\"$:nomunge\";var i=[],n=$.resize=$.extend($.resize,{}),a,r=false,s=\"setTimeout\",u=\"resize\",m=u+\"-special-event\",o=\"pendingDelay\",l=\"activeDelay\",f=\"throttleWindow\";n[o]=200;n[l]=20;n[f]=true;$.event.special[u]={setup:function(){if(!n[f]&&this[s]){return false}var e=$(this);i.push(this);e.data(m,{w:e.width(),h:e.height()});if(i.length===1){a=t;h()}},teardown:function(){if(!n[f]&&this[s]){return false}var e=$(this);for(var t=i.length-1;t>=0;t--){if(i[t]==this){i.splice(t,1);break}}e.removeData(m);if(!i.length){if(r){cancelAnimationFrame(a)}else{clearTimeout(a)}a=null}},add:function(e){if(!n[f]&&this[s]){return false}var i;function a(e,n,a){var r=$(this),s=r.data(m)||{};s.w=n!==t?n:r.width();s.h=a!==t?a:r.height();i.apply(this,arguments)}if($.isFunction(e)){i=e;return a}else{i=e.handler;e.handler=a}}};function h(t){if(r===true){r=t||1}for(var s=i.length-1;s>=0;s--){var l=$(i[s]);if(l[0]==e||l.is(\":visible\")){var f=l.width(),c=l.height(),d=l.data(m);if(d&&(f!==d.w||c!==d.h)){l.trigger(u,[d.w=f,d.h=c]);r=t||true}}else{d=l.data(m);d.w=0;d.h=0}}if(a!==null){if(r&&(t==null||t-r<1e3)){a=e.requestAnimationFrame(h)}else{a=setTimeout(h,n[o]);r=false}}}if(!e.requestAnimationFrame){e.requestAnimationFrame=function(){return e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t,i){return e.setTimeout(function(){t((new Date).getTime())},n[l])}}()}if(!e.cancelAnimationFrame){e.cancelAnimationFrame=function(){return e.webkitCancelRequestAnimationFrame||e.mozCancelRequestAnimationFrame||e.oCancelRequestAnimationFrame||e.msCancelRequestAnimationFrame||clearTimeout}()}})(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": "maverix-theme/bower_components/flot/jquery.flot.selection.js",
    "content": "/* Flot plugin for selecting regions of a plot.\n\nCopyright (c) 2007-2014 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": "maverix-theme/bower_components/flot/jquery.flot.stack.js",
    "content": "/* Flot plugin for stacking data sets rather than overlyaing them.\n\nCopyright (c) 2007-2014 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": "maverix-theme/bower_components/flot/jquery.flot.symbol.js",
    "content": "/* Flot plugin that adds some extra symbols for plotting points.\n\nCopyright (c) 2007-2014 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": "maverix-theme/bower_components/flot/jquery.flot.threshold.js",
    "content": "/* Flot plugin for thresholding data.\n\nCopyright (c) 2007-2014 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": "maverix-theme/bower_components/flot/jquery.flot.time.js",
    "content": "/* Pretty handling of time axes.\n\nCopyright (c) 2007-2014 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\t$.plot.dateGenerator = dateGenerator;\n\n})(jQuery);\n"
  },
  {
    "path": "maverix-theme/bower_components/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": "maverix-theme/bower_components/flot/package.json",
    "content": "{\n\t\"name\": \"Flot\",\n\t\"version\": \"0.8.3\",\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": "maverix-theme/bower_components/jquery/.bower.json",
    "content": "{\n  \"name\": \"jquery\",\n  \"version\": \"2.1.1\",\n  \"main\": \"dist/jquery.js\",\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"**/.*\",\n    \"build\",\n    \"speed\",\n    \"test\",\n    \"*.md\",\n    \"AUTHORS.txt\",\n    \"Gruntfile.js\",\n    \"package.json\"\n  ],\n  \"devDependencies\": {\n    \"sizzle\": \"1.10.19\",\n    \"requirejs\": \"2.1.10\",\n    \"qunit\": \"1.14.0\",\n    \"sinon\": \"1.8.1\"\n  },\n  \"keywords\": [\n    \"jquery\",\n    \"javascript\",\n    \"library\"\n  ],\n  \"homepage\": \"https://github.com/jquery/jquery\",\n  \"_release\": \"2.1.1\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"2.1.1\",\n    \"commit\": \"4dec426aa2a6cbabb1b064319ba7c272d594a688\"\n  },\n  \"_source\": \"git://github.com/jquery/jquery.git\",\n  \"_target\": \">= 1.2.6\",\n  \"_originalSource\": \"jquery\"\n}"
  },
  {
    "path": "maverix-theme/bower_components/jquery/MIT-LICENSE.txt",
    "content": "Copyright 2014 jQuery Foundation and other contributors\nhttp://jquery.com/\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\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 OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/bower.json",
    "content": "{\n  \"name\": \"jquery\",\n  \"version\": \"2.1.1\",\n  \"main\": \"dist/jquery.js\",\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"**/.*\",\n    \"build\",\n    \"speed\",\n    \"test\",\n    \"*.md\",\n    \"AUTHORS.txt\",\n    \"Gruntfile.js\",\n    \"package.json\"\n  ],\n  \"devDependencies\": {\n    \"sizzle\": \"1.10.19\",\n    \"requirejs\": \"2.1.10\",\n    \"qunit\": \"1.14.0\",\n    \"sinon\": \"1.8.1\"\n  },\n  \"keywords\": [\n    \"jquery\",\n    \"javascript\",\n    \"library\"\n  ]\n}\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/dist/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v2.1.1\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-05-01T17:11Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper window is present,\n\t\t// execute the factory and get jQuery\n\t\t// For environments that do not inherently posses a window with a document\n\t\t// (such as Node.js), expose a jQuery-making factory as module.exports\n\t\t// This accentuates the need for the creation of a real window\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\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//\n\nvar arr = [];\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"2.1.1\",\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\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/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\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\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 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 just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\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\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\tslice: function() {\n\t\treturn this.pushStack( 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\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: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\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\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\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 ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\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\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\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,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\treturn !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\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\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android < 4.0, iOS < 6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\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// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\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\tpush.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\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\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\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\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 new values\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.push( 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.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn 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 = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( 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\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\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 ( type === \"function\" || 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\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v1.10.19\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: 2014-04-18\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\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\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\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// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\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\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\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\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\trsibling = /[+~]/,\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<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\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 (jQuery #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 ) && testContext( 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 * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== strundefined && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\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/**\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 hasCompare,\n\t\tdoc = 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 !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t}, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t});\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 = rnative.test( doc.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 msallowclip=''><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowclip^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\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\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are 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( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + 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.matches ||\n\t\tdocElem.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\thasCompare = rnative.test( docElem.compareDocumentPosition );\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 = hasCompare || rnative.test( docElem.contains ) ?\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 = hasCompare ?\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\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\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\t\t}\n\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// Parentless nodes are either documents or disconnected\n\t\tif ( !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\tval :\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};\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\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\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\twhile ( (node = elem[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 (jQuery #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[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[6] && 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] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\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 negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\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\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\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\ntokenize = Sizzle.tokenize = function( 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 oldCache, outerCache,\n\t\t\t\tnewCache = [ 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 ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\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 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 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\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\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\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\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\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (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}\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, match /* 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 ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[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\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\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 elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\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\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\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 ( risSimple.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 ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\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\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\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\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\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\tinit = jQuery.fn.init = function( selector, context ) {\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[0] === \"<\" && selector[ 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\t// Intentionally let the error be thrown if parseHTML is not present\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// 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 typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\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// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\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.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; 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\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\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\tmatched.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( matched.length > 1 ? jQuery.unique( matched ) : matched );\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 indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\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\twhile ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}\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 elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = 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\tmatched = jQuery.filter( selector, matched );\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\tjQuery.unique( matched );\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\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n});\nvar rnotwhite = (/\\S+/g);\n\n\n\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( 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 // 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// 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};\n\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 fn = 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[ tuple[ 0 ] + \"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 = 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 ? 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});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\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// 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.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\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} else {\n\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\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\nfunction Data() {\n\t// Support: Android < 4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Math.random();\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android < 4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(key) );\n\t\t}\n\n\t\t// [*]When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\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 = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\nvar data_priv = new Data();\n\nvar data_user = new Data();\n\n\n\n/*\n\tImplementation Summary\n\n\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t2. Improve the module's maintainability by reducing the storage\n\t\tpaths to a single mechanism.\n\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n*/\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\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\t\tname = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\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\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\tdata_user.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend({\n\thasData: function( elem ) {\n\t\treturn data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.remove( elem, name );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\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\tdata_priv.set( elem, \"hasDataAttrs\", 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\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each(function() {\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tdata_user.remove( this, key );\n\t\t});\n\t}\n});\n\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 = data_priv.get( 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 = data_priv.access( 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 data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.remove( elem, [ type + \"queue\", 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\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 = data_priv.get( 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 pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\n\n(function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` need .setAttribute for WWA\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE9-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\nvar strundefined = typeof undefined;\n\n\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|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\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.get( 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 !== strundefined && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( 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 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\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\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},\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 j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.hasData( elem ) && data_priv.get( 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( 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\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = 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 = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.get( 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 && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\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// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( 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\telem[ type ]();\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, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.get( 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 i, matches, sel, handleObj,\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\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( 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\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 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\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 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, 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: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome < 28\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\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\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\tthis.focus();\n\t\t\t\t\treturn false;\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 ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\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// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\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 = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\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 ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\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\n\t\tif ( e && e.preventDefault ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\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// Create \"bubbling\" focus and blur events\n// Support: Firefox, Chrome, Safari\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = 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\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdata_priv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\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\" ) {\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});\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/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\n\t\t// Support: IE 9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE 9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? 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 = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n// Support: IE >= 9\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Support: IE >= 9\n\t\t// Fix Cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!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\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\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, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], 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\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\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\t// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\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 || fragment.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\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// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Fixes #12346\n\t\t\t\t\t// Support: Webkit, IE\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\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( fragment.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\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[ i ]) !== undefined; i++ ) {\n\t\t\tif ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\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\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each(function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t});\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\tremove: function( selector, keepData /* Internal Use Only */ ) {\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\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\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\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 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 && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\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!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\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\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 arg = arguments[ 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\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? 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 ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\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 ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!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 );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, 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\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\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!data_priv.access( 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// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.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\t\t\t}\n\t\t}\n\n\t\treturn this;\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\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\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// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optmization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction 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\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).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 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\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}\nvar rmargin = (/^margin/);\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t};\n\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\t}\n\n\tif ( computed ) {\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: iOS < 6\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due to missing dependency),\n\t\t\t\t// remove it.\n\t\t\t\t// Since there are no other hooks for marginRight, remove the whole object.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\n(function() {\n\tvar pixelPositionVal, boxSizingReliableVal,\n\t\tdocElem = document.documentElement,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\tif ( !div.style ) {\n\t\treturn;\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\tcontainer.style.cssText = \"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;\" +\n\t\t\"position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computePixelPositionAndBoxSizingReliable() {\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocElem.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div, null );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\tdocElem.removeChild( container );\n\t}\n\n\t// Support: node.js jsdom\n\t// Don't assume that getComputedStyle is a property of the global object\n\tif ( window.getComputedStyle ) {\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\t\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocElem.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );\n\n\t\t\t\tdocElem.removeChild( container );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t});\n\t}\n})();\n\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar\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\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\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[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 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.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 &&\n\t\t\t( 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\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 ] = data_priv.get( 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 ] = data_priv.access( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdata_priv.set( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"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.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\"flexGrow\": true,\n\t\t\"flexShrink\": 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\": \"cssFloat\"\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 null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== 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 specifying setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !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\t\t\t\tstyle[ name ] = value;\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 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, 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\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 rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\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.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\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\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});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\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\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: IE9\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.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.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + 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\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\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\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 defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = data_priv.get( 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 IE9-10 do 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\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdata_priv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always(function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t});\n\t}\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\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\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 = data_priv.access( 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\n\t\t\tdata_priv.remove( 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\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\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\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\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\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.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 || data_priv.get( 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 = data_priv.get( 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 = data_priv.get( 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\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\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.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\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\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\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\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\n\n(function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS 5.1, Android 4.x, Android 2.3\n\t// Check the default checkbox/radio value (\"\" on old WebKit; \"on\" elsewhere)\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Must access the parent to make an option select properly\n\t// Support: IE9, IE10\n\tsupport.optSelected = opt.selected;\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// Check if an input maintains its value after becoming a radio\n\t// Support: IE9, IE10\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n})();\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn 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\njQuery.extend({\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 === 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( 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\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\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 ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.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\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 {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n});\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t});\n\t}\n});\n\njQuery.extend({\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\treturn elem.hasAttribute( \"tabindex\" ) || rfocusable.test( elem.nodeName ) || elem.href ?\n\t\t\t\t\telem.tabIndex :\n\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Support: IE9+\n// Selectedness for an option in an optgroup can be inaccurate\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\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\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\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( 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\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\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 classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\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( 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\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\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\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( 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 === 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\tdata_priv.set( 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 ? \"\" : data_priv.get( 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\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\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\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\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\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\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\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\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// IE6-9 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( 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( option.value, 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\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 ( !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});\n\n\n\n\n// Return jQuery for attributes-only inclusion\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\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});\n\n\nvar nonce = jQuery.now();\n\nvar rquery = (/\\?/);\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\ttmp = new DOMParser();\n\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\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/* 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( 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 key, deep,\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\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\n\tvar ct, type, finalDataType, firstDataType,\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// 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\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 transport,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\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 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 (prefilters might expect it)\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, \"\" )\n\t\t\t.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( 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 += ( 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_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + 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// 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\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\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\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = 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.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\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\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0;\n};\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\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\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}\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\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\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 || !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\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new XMLHttpRequest();\n\t} catch( e ) {}\n};\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSuccessStatus = {\n\t\t// file protocol always yields status code 0, assume 200\n\t\t0: 200,\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE9\n// Open requests must be manually aborted on unload (#5280)\nif ( window.ActiveXObject ) {\n\tjQuery( window ).on( \"unload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]();\n\t\t}\n\t});\n}\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport(function( options ) {\n\tvar callback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t// file: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText === \"string\" ? {\n\t\t\t\t\t\t\t\t\t\ttext: xhr.responseText\n\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\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\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\txhr.onerror = callback(\"error\");\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = xhrCallbacks[ id ] = callback(\"abort\");\n\n\t\t\t\ttry {\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\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 crossDomain\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}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery(\"<script>\").prop({\n\t\t\t\t\tasync: true,\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t}).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\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 + \"_\" + ( 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 += ( 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});\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\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, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\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\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n\n\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\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\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf(\"auto\") > -1;\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\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\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\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\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its 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\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\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\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\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn 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 ? win[ prop ] : elem[ 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 : window.pageXOffset,\n\t\t\t\t\ttop ? val : window.pageYOffset\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\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\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 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],\n\t\t\t\t\t// whichever is greatest\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\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\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n\n\n\nvar\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\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n\n}));\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/ajax/jsonp.js",
    "content": "define([\n\t\"../core\",\n\t\"./var/nonce\",\n\t\"./var/rquery\",\n\t\"../ajax\"\n], function( jQuery, nonce, rquery ) {\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 + \"_\" + ( 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 += ( 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});\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/ajax/load.js",
    "content": "define([\n\t\"../core\",\n\t\"../core/parseHTML\",\n\t\"../ajax\",\n\t\"../traversing\",\n\t\"../manipulation\",\n\t\"../selector\",\n\t// Optional event/alias dependency\n\t\"../event/alias\"\n], function( jQuery ) {\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\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, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\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});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/ajax/parseJSON.js",
    "content": "define([\n\t\"../core\"\n], function( jQuery ) {\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\nreturn jQuery.parseJSON;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/ajax/parseXML.js",
    "content": "define([\n\t\"../core\"\n], function( jQuery ) {\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\ttmp = new DOMParser();\n\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\nreturn jQuery.parseXML;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/ajax/script.js",
    "content": "define([\n\t\"../core\",\n\t\"../ajax\"\n], function( jQuery ) {\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 crossDomain\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}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery(\"<script>\").prop({\n\t\t\t\t\tasync: true,\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t}).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/ajax/var/nonce.js",
    "content": "define([\n\t\"../../core\"\n], function( jQuery ) {\n\treturn jQuery.now();\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/ajax/var/rquery.js",
    "content": "define(function() {\n\treturn (/\\?/);\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/ajax/xhr.js",
    "content": "define([\n\t\"../core\",\n\t\"../var/support\",\n\t\"../ajax\"\n], function( jQuery, support ) {\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new XMLHttpRequest();\n\t} catch( e ) {}\n};\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSuccessStatus = {\n\t\t// file protocol always yields status code 0, assume 200\n\t\t0: 200,\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE9\n// Open requests must be manually aborted on unload (#5280)\nif ( window.ActiveXObject ) {\n\tjQuery( window ).on( \"unload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]();\n\t\t}\n\t});\n}\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport(function( options ) {\n\tvar callback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t// file: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText === \"string\" ? {\n\t\t\t\t\t\t\t\t\t\ttext: xhr.responseText\n\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\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\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\txhr.onerror = callback(\"error\");\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = xhrCallbacks[ id ] = callback(\"abort\");\n\n\t\t\t\ttry {\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/ajax.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/rnotwhite\",\n\t\"./ajax/var/nonce\",\n\t\"./ajax/var/rquery\",\n\t\"./core/init\",\n\t\"./ajax/parseJSON\",\n\t\"./ajax/parseXML\",\n\t\"./deferred\"\n], function( jQuery, rnotwhite, nonce, rquery ) {\n\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\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/* 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( 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 key, deep,\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\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\n\tvar ct, type, finalDataType, firstDataType,\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// 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\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 transport,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\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 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 (prefilters might expect it)\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, \"\" )\n\t\t\t.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( 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 += ( 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_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + 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// 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\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/attributes/attr.js",
    "content": "define([\n\t\"../core\",\n\t\"../var/rnotwhite\",\n\t\"../var/strundefined\",\n\t\"../core/access\",\n\t\"./support\",\n\t\"../selector\"\n], function( jQuery, rnotwhite, strundefined, access, support ) {\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn 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\njQuery.extend({\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 === 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( 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\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\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 ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.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\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 {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n});\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/attributes/classes.js",
    "content": "define([\n\t\"../core\",\n\t\"../var/rnotwhite\",\n\t\"../var/strundefined\",\n\t\"../data/var/data_priv\",\n\t\"../core/init\"\n], function( jQuery, rnotwhite, strundefined, data_priv ) {\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\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( 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\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\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 classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\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( 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\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\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\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( 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 === 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\tdata_priv.set( 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 ? \"\" : data_priv.get( 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\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/attributes/prop.js",
    "content": "define([\n\t\"../core\",\n\t\"../core/access\",\n\t\"./support\"\n], function( jQuery, access, support ) {\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t});\n\t}\n});\n\njQuery.extend({\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\treturn elem.hasAttribute( \"tabindex\" ) || rfocusable.test( elem.nodeName ) || elem.href ?\n\t\t\t\t\telem.tabIndex :\n\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Support: IE9+\n// Selectedness for an option in an optgroup can be inaccurate\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\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});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/attributes/support.js",
    "content": "define([\n\t\"../var/support\"\n], function( support ) {\n\n(function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS 5.1, Android 4.x, Android 2.3\n\t// Check the default checkbox/radio value (\"\" on old WebKit; \"on\" elsewhere)\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Must access the parent to make an option select properly\n\t// Support: IE9, IE10\n\tsupport.optSelected = opt.selected;\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// Check if an input maintains its value after becoming a radio\n\t// Support: IE9, IE10\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n})();\n\nreturn support;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/attributes/val.js",
    "content": "define([\n\t\"../core\",\n\t\"./support\",\n\t\"../core/init\"\n], function( jQuery, support ) {\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\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\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\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\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\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\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\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// IE6-9 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( 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( option.value, 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\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 ( !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});\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/attributes.js",
    "content": "define([\n\t\"./core\",\n\t\"./attributes/attr\",\n\t\"./attributes/prop\",\n\t\"./attributes/classes\",\n\t\"./attributes/val\"\n], function( jQuery ) {\n\n// Return jQuery for attributes-only inclusion\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/callbacks.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/rnotwhite\"\n], function( jQuery, rnotwhite ) {\n\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( 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 // 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// 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};\n\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/core/access.js",
    "content": "define([\n\t\"../core\"\n], function( jQuery ) {\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\nreturn access;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/core/init.js",
    "content": "// Initialize a jQuery object\ndefine([\n\t\"../core\",\n\t\"./var/rsingleTag\",\n\t\"../traversing/findFilter\"\n], function( jQuery, rsingleTag ) {\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\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\tinit = jQuery.fn.init = function( selector, context ) {\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[0] === \"<\" && selector[ 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\t// Intentionally let the error be thrown if parseHTML is not present\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// 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 typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\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// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\nreturn init;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/core/parseHTML.js",
    "content": "define([\n\t\"../core\",\n\t\"./var/rsingleTag\",\n\t\"../manipulation\" // buildFragment\n], function( jQuery, rsingleTag ) {\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\nreturn jQuery.parseHTML;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/core/ready.js",
    "content": "define([\n\t\"../core\",\n\t\"../core/init\",\n\t\"../deferred\"\n], function( jQuery ) {\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\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// 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.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\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} else {\n\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\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/core/var/rsingleTag.js",
    "content": "define(function() {\n\t// Match a standalone tag\n\treturn (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/core.js",
    "content": "define([\n\t\"./var/arr\",\n\t\"./var/slice\",\n\t\"./var/concat\",\n\t\"./var/push\",\n\t\"./var/indexOf\",\n\t\"./var/class2type\",\n\t\"./var/toString\",\n\t\"./var/hasOwn\",\n\t\"./var/support\"\n], function( arr, slice, concat, push, indexOf, class2type, toString, hasOwn, support ) {\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"@VERSION\",\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\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/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\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\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 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 just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\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\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\tslice: function() {\n\t\treturn this.pushStack( 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\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: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\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\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\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 ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\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\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\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,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\treturn !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\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\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android < 4.0, iOS < 6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\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// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\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\tpush.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\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\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\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\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 new values\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.push( 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.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn 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 = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( 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\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\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 ( type === \"function\" || 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\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/addGetHookIf.js",
    "content": "define(function() {\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due to missing dependency),\n\t\t\t\t// remove it.\n\t\t\t\t// Since there are no other hooks for marginRight, remove the whole object.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\nreturn addGetHookIf;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/curCSS.js",
    "content": "define([\n\t\"../core\",\n\t\"./var/rnumnonpx\",\n\t\"./var/rmargin\",\n\t\"./var/getStyles\",\n\t\"../selector\" // contains\n], function( jQuery, rnumnonpx, rmargin, getStyles ) {\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\t}\n\n\tif ( computed ) {\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: iOS < 6\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nreturn curCSS;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/defaultDisplay.js",
    "content": "define([\n\t\"../core\",\n\t\"../manipulation\" // appendTo\n], function( jQuery ) {\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optmization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction 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\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).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 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\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\nreturn defaultDisplay;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/hiddenVisibleSelectors.js",
    "content": "define([\n\t\"../core\",\n\t\"../selector\"\n], function( jQuery ) {\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0;\n};\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/support.js",
    "content": "define([\n\t\"../core\",\n\t\"../var/support\"\n], function( jQuery, support ) {\n\n(function() {\n\tvar pixelPositionVal, boxSizingReliableVal,\n\t\tdocElem = document.documentElement,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\tif ( !div.style ) {\n\t\treturn;\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\tcontainer.style.cssText = \"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;\" +\n\t\t\"position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computePixelPositionAndBoxSizingReliable() {\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocElem.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div, null );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\tdocElem.removeChild( container );\n\t}\n\n\t// Support: node.js jsdom\n\t// Don't assume that getComputedStyle is a property of the global object\n\tif ( window.getComputedStyle ) {\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\t\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocElem.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );\n\n\t\t\t\tdocElem.removeChild( container );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t});\n\t}\n})();\n\nreturn support;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/swap.js",
    "content": "define([\n\t\"../core\"\n], function( jQuery ) {\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\nreturn jQuery.swap;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/var/cssExpand.js",
    "content": "define(function() {\n\treturn [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/var/getStyles.js",
    "content": "define(function() {\n\treturn function( elem ) {\n\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t};\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/var/isHidden.js",
    "content": "define([\n\t\"../../core\",\n\t\"../../selector\"\n\t// css is assumed\n], function( jQuery ) {\n\n\treturn function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/var/rmargin.js",
    "content": "define(function() {\n\treturn (/^margin/);\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css/var/rnumnonpx.js",
    "content": "define([\n\t\"../../var/pnum\"\n], function( pnum ) {\n\treturn new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/css.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/pnum\",\n\t\"./core/access\",\n\t\"./css/var/rmargin\",\n\t\"./css/var/rnumnonpx\",\n\t\"./css/var/cssExpand\",\n\t\"./css/var/isHidden\",\n\t\"./css/var/getStyles\",\n\t\"./css/curCSS\",\n\t\"./css/defaultDisplay\",\n\t\"./css/addGetHookIf\",\n\t\"./css/support\",\n\t\"./data/var/data_priv\",\n\n\t\"./core/init\",\n\t\"./css/swap\",\n\t\"./core/ready\",\n\t\"./selector\" // contains\n], function( jQuery, pnum, access, rmargin, rnumnonpx, cssExpand, isHidden,\n\tgetStyles, curCSS, defaultDisplay, addGetHookIf, support, data_priv ) {\n\nvar\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\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\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[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 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.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 &&\n\t\t\t( 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\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 ] = data_priv.get( 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 ] = data_priv.access( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdata_priv.set( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"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.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\"flexGrow\": true,\n\t\t\"flexShrink\": 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\": \"cssFloat\"\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 null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== 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 specifying setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !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\t\t\t\tstyle[ name ] = value;\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 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, 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\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 rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\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.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\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\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});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\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\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/data/Data.js",
    "content": "define([\n\t\"../core\",\n\t\"../var/rnotwhite\",\n\t\"./accepts\"\n], function( jQuery, rnotwhite ) {\n\nfunction Data() {\n\t// Support: Android < 4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Math.random();\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android < 4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(key) );\n\t\t}\n\n\t\t// [*]When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\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 = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\n\nreturn Data;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/data/accepts.js",
    "content": "define([\n\t\"../core\"\n], function( jQuery ) {\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\nreturn jQuery.acceptData;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/data/var/data_priv.js",
    "content": "define([\n\t\"../Data\"\n], function( Data ) {\n\treturn new Data();\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/data/var/data_user.js",
    "content": "define([\n\t\"../Data\"\n], function( Data ) {\n\treturn new Data();\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/data.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/rnotwhite\",\n\t\"./core/access\",\n\t\"./data/var/data_priv\",\n\t\"./data/var/data_user\"\n], function( jQuery, rnotwhite, access, data_priv, data_user ) {\n\n/*\n\tImplementation Summary\n\n\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t2. Improve the module's maintainability by reducing the storage\n\t\tpaths to a single mechanism.\n\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n*/\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\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\t\tname = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\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\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\tdata_user.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend({\n\thasData: function( elem ) {\n\t\treturn data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.remove( elem, name );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\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\tdata_priv.set( elem, \"hasDataAttrs\", 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\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each(function() {\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tdata_user.remove( this, key );\n\t\t});\n\t}\n});\n\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/deferred.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/slice\",\n\t\"./callbacks\"\n], function( jQuery, slice ) {\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 fn = 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[ tuple[ 0 ] + \"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 = 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 ? 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});\n\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/deprecated.js",
    "content": "define([\n\t\"./core\",\n\t\"./traversing\"\n], function( jQuery ) {\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});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/dimensions.js",
    "content": "define([\n\t\"./core\",\n\t\"./core/access\",\n\t\"./css\"\n], function( jQuery, access ) {\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 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],\n\t\t\t\t\t// whichever is greatest\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\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/effects/Tween.js",
    "content": "define([\n\t\"../core\",\n\t\"../css\"\n], function( jQuery ) {\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: IE9\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.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.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/effects/animatedSelector.js",
    "content": "define([\n\t\"../core\",\n\t\"../selector\",\n\t\"../effects\"\n], function( jQuery ) {\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/effects.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/pnum\",\n\t\"./css/var/cssExpand\",\n\t\"./css/var/isHidden\",\n\t\"./css/defaultDisplay\",\n\t\"./data/var/data_priv\",\n\n\t\"./core/init\",\n\t\"./effects/Tween\",\n\t\"./queue\",\n\t\"./css\",\n\t\"./deferred\",\n\t\"./traversing\"\n], function( jQuery, pnum, cssExpand, isHidden, defaultDisplay, data_priv ) {\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + 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\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\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\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 defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = data_priv.get( 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 IE9-10 do 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\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdata_priv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always(function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t});\n\t}\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\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\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 = data_priv.access( 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\n\t\t\tdata_priv.remove( 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\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\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\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\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\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.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 || data_priv.get( 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 = data_priv.get( 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 = data_priv.get( 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\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\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.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\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\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\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\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/event/alias.js",
    "content": "define([\n\t\"../core\",\n\t\"../event\"\n], function( jQuery ) {\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});\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/event/support.js",
    "content": "define([\n\t\"../var/support\"\n], function( support ) {\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\nreturn support;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/event.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/strundefined\",\n\t\"./var/rnotwhite\",\n\t\"./var/hasOwn\",\n\t\"./var/slice\",\n\t\"./event/support\",\n\t\"./data/var/data_priv\",\n\n\t\"./core/init\",\n\t\"./data/accepts\",\n\t\"./selector\"\n], function( jQuery, strundefined, rnotwhite, hasOwn, slice, support, data_priv ) {\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|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\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.get( 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 !== strundefined && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( 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 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\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\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},\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 j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.hasData( elem ) && data_priv.get( 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( 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\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = 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 = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.get( 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 && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\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// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( 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\telem[ type ]();\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, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.get( 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 i, matches, sel, handleObj,\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\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( 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\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 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\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 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, 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: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome < 28\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\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\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\tthis.focus();\n\t\t\t\t\treturn false;\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 ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\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// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\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 = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\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 ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\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\n\t\tif ( e && e.preventDefault ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\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// Create \"bubbling\" focus and blur events\n// Support: Firefox, Chrome, Safari\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = 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\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdata_priv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\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\" ) {\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});\n\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/exports/amd.js",
    "content": "define([\n\t\"../core\"\n], function( jQuery ) {\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/exports/global.js",
    "content": "define([\n\t\"../core\",\n\t\"../var/strundefined\"\n], function( jQuery, strundefined ) {\n\nvar\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\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/intro.js",
    "content": "/*!\n * jQuery JavaScript Library v@VERSION\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: @DATE\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper window is present,\n\t\t// execute the factory and get jQuery\n\t\t// For environments that do not inherently posses a window with a document\n\t\t// (such as Node.js), expose a jQuery-making factory as module.exports\n\t\t// This accentuates the need for the creation of a real window\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\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\";\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/jquery.js",
    "content": "define([\n\t\"./core\",\n\t\"./selector\",\n\t\"./traversing\",\n\t\"./callbacks\",\n\t\"./deferred\",\n\t\"./core/ready\",\n\t\"./data\",\n\t\"./queue\",\n\t\"./queue/delay\",\n\t\"./attributes\",\n\t\"./event\",\n\t\"./event/alias\",\n\t\"./manipulation\",\n\t\"./manipulation/_evalUrl\",\n\t\"./wrap\",\n\t\"./css\",\n\t\"./css/hiddenVisibleSelectors\",\n\t\"./serialize\",\n\t\"./ajax\",\n\t\"./ajax/xhr\",\n\t\"./ajax/script\",\n\t\"./ajax/jsonp\",\n\t\"./ajax/load\",\n\t\"./effects\",\n\t\"./effects/animatedSelector\",\n\t\"./offset\",\n\t\"./dimensions\",\n\t\"./deprecated\",\n\t\"./exports/amd\",\n\t\"./exports/global\"\n], function( jQuery ) {\n\nreturn jQuery;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/manipulation/_evalUrl.js",
    "content": "define([\n\t\"../ajax\"\n], function( jQuery ) {\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\nreturn jQuery._evalUrl;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/manipulation/support.js",
    "content": "define([\n\t\"../var/support\"\n], function( support ) {\n\n(function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` need .setAttribute for WWA\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE9-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\n\nreturn support;\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/manipulation/var/rcheckableType.js",
    "content": "define(function() {\n\treturn (/^(?:checkbox|radio)$/i);\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/manipulation.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/concat\",\n\t\"./var/push\",\n\t\"./core/access\",\n\t\"./manipulation/var/rcheckableType\",\n\t\"./manipulation/support\",\n\t\"./data/var/data_priv\",\n\t\"./data/var/data_user\",\n\n\t\"./core/init\",\n\t\"./data/accepts\",\n\t\"./traversing\",\n\t\"./selector\",\n\t\"./event\"\n], function( jQuery, concat, push, access, rcheckableType, support, data_priv, data_user ) {\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/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\n\t\t// Support: IE 9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE 9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? 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 = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n// Support: IE >= 9\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Support: IE >= 9\n\t\t// Fix Cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!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\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\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, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], 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\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\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\t// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\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 || fragment.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\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// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Fixes #12346\n\t\t\t\t\t// Support: Webkit, IE\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\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( fragment.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\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[ i ]) !== undefined; i++ ) {\n\t\t\tif ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\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\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each(function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t});\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\tremove: function( selector, keepData /* Internal Use Only */ ) {\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\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\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\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 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 && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\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!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\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\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 arg = arguments[ 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\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? 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 ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\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 ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!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 );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, 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\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\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!data_priv.access( 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// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.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\t\t\t}\n\t\t}\n\n\t\treturn this;\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\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\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// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/offset.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/strundefined\",\n\t\"./core/access\",\n\t\"./css/var/rnumnonpx\",\n\t\"./css/curCSS\",\n\t\"./css/addGetHookIf\",\n\t\"./css/support\",\n\n\t\"./core/init\",\n\t\"./css\",\n\t\"./selector\" // contains\n], function( jQuery, strundefined, access, rnumnonpx, curCSS, addGetHookIf, support ) {\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\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\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf(\"auto\") > -1;\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\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\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\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\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its 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\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\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\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\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn 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 ? win[ prop ] : elem[ 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 : window.pageXOffset,\n\t\t\t\t\ttop ? val : window.pageYOffset\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\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/outro.js",
    "content": "}));\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/queue/delay.js",
    "content": "define([\n\t\"../core\",\n\t\"../queue\",\n\t\"../effects\" // Delay is optional because of this dependency\n], function( jQuery ) {\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\nreturn jQuery.fn.delay;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/queue.js",
    "content": "define([\n\t\"./core\",\n\t\"./data/var/data_priv\",\n\t\"./deferred\",\n\t\"./callbacks\"\n], function( jQuery, data_priv ) {\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 = data_priv.get( 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 = data_priv.access( 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 data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.remove( elem, [ type + \"queue\", 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\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 = data_priv.get( 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});\n\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/selector-native.js",
    "content": "define([\n\t\"./core\"\n], function( jQuery ) {\n\n/*\n * Optional (non-Sizzle) selector module for custom builds.\n *\n * Note that this DOES NOT SUPPORT many documented jQuery\n * features in exchange for its smaller size:\n *\n * Attribute not equal selector\n * Positional selectors (:first; :eq(n); :odd; etc.)\n * Type selectors (:input; :checkbox; :button; etc.)\n * State-based selectors (:animated; :visible; :hidden; etc.)\n * :has(selector)\n * :not(complex selector)\n * custom selectors via Sizzle extensions\n * Leading combinators (e.g., $collection.find(\"> *\"))\n * Reliable functionality on XML fragments\n * Requiring all parts of a selector to match elements under context\n *   (e.g., $div.find(\"div > *\") now matches children of $div)\n * Matching against non-elements\n * Reliable sorting of disconnected nodes\n * querySelectorAll bug fixes (e.g., unreliable :focus on WebKit)\n *\n * If any of these are unacceptable tradeoffs, either use Sizzle or\n * customize this stub for the project's specific needs.\n */\n\nvar docElem = window.document.documentElement,\n\tselector_hasDuplicate,\n\tmatches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector,\n\tselector_sortOrder = function( a, b ) {\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\tselector_hasDuplicate = 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\n\t\t\t\t// Choose the first element that is related to our document\n\t\t\t\tif ( a === document || jQuery.contains(document, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === document || jQuery.contains(document, 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 0;\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\njQuery.extend({\n\tfind: function( selector, context, results, seed ) {\n\t\tvar elem, nodeType,\n\t\t\ti = 0;\n\n\t\tresults = results || [];\n\t\tcontext = context || document;\n\n\t\t// Same basic safeguard as Sizzle\n\t\tif ( !selector || typeof selector !== \"string\" ) {\n\t\t\treturn results;\n\t\t}\n\n\t\t// Early return if context is not an element or document\n\t\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\twhile ( (elem = seed[i++]) ) {\n\t\t\t\tif ( jQuery.find.matchesSelector(elem, selector) ) {\n\t\t\t\t\tresults.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tjQuery.merge( results, context.querySelectorAll(selector) );\n\t\t}\n\n\t\treturn results;\n\t},\n\tunique: function( results ) {\n\t\tvar elem,\n\t\t\tduplicates = [],\n\t\t\ti = 0,\n\t\t\tj = 0;\n\n\t\tselector_hasDuplicate = false;\n\t\tresults.sort( selector_sortOrder );\n\n\t\tif ( selector_hasDuplicate ) {\n\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\t\tj = duplicates.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile ( j-- ) {\n\t\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t},\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( (node = elem[i++]) ) {\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t\t// Use textContent for elements\n\t\t\treturn elem.textContent;\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\n\t\treturn ret;\n\t},\n\tcontains: function( 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(bup) );\n\t},\n\tisXMLDoc: function( elem ) {\n\t\treturn (elem.ownerDocument || elem).documentElement.nodeName !== \"HTML\";\n\t},\n\texpr: {\n\t\tattrHandle: {},\n\t\tmatch: {\n\t\t\tbool: /^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i,\n\t\t\tneedsContext: /^[\\x20\\t\\r\\n\\f]*[>+~]/\n\t\t}\n\t}\n});\n\njQuery.extend( jQuery.find, {\n\tmatches: function( expr, elements ) {\n\t\treturn jQuery.find( expr, null, null, elements );\n\t},\n\tmatchesSelector: function( elem, expr ) {\n\t\treturn matches.call( elem, expr );\n\t},\n\tattr: function( elem, name ) {\n\t\treturn elem.getAttribute( name );\n\t}\n});\n\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/selector-sizzle.js",
    "content": "define([\n\t\"./core\",\n\t\"sizzle\"\n], function( jQuery, Sizzle ) {\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"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/selector.js",
    "content": "define([ \"./selector-sizzle\" ]);\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/serialize.js",
    "content": "define([\n\t\"./core\",\n\t\"./manipulation/var/rcheckableType\",\n\t\"./core/init\",\n\t\"./traversing\", // filter\n\t\"./attributes/prop\"\n], function( jQuery, rcheckableType ) {\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\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}\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\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\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 || !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\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/sizzle/dist/sizzle.js",
    "content": "/*!\n * Sizzle CSS Selector Engine v1.10.19\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: 2014-04-18\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\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\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\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// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\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\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\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\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\trsibling = /[+~]/,\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<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\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 (jQuery #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 ) && testContext( 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 * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== strundefined && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\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/**\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 hasCompare,\n\t\tdoc = 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 !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t}, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t});\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 = rnative.test( doc.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 msallowclip=''><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowclip^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\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\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are 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( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + 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.matches ||\n\t\tdocElem.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\thasCompare = rnative.test( docElem.compareDocumentPosition );\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 = hasCompare || rnative.test( docElem.contains ) ?\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 = hasCompare ?\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\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\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\t\t}\n\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// Parentless nodes are either documents or disconnected\n\t\tif ( !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\tval :\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};\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\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\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\twhile ( (node = elem[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 (jQuery #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[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[6] && 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] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\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 negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\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\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\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\ntokenize = Sizzle.tokenize = function( 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 oldCache, outerCache,\n\t\t\t\tnewCache = [ 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 ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\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 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 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\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\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\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\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\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (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}\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, match /* 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 ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[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\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\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 elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\n// EXPOSE\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine(function() { return Sizzle; });\n// Sizzle requires that there be a global window in Common-JS like environments\n} else if ( typeof module !== \"undefined\" && module.exports ) {\n\tmodule.exports = Sizzle;\n} else {\n\twindow.Sizzle = Sizzle;\n}\n// EXPOSE\n\n})( window );\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/traversing/findFilter.js",
    "content": "define([\n\t\"../core\",\n\t\"../var/indexOf\",\n\t\"./var/rneedsContext\",\n\t\"../selector\"\n], function( jQuery, indexOf, rneedsContext ) {\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\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 ( risSimple.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 ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\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\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\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\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/traversing/var/rneedsContext.js",
    "content": "define([\n\t\"../../core\",\n\t\"../../selector\"\n], function( jQuery ) {\n\treturn jQuery.expr.match.needsContext;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/traversing.js",
    "content": "define([\n\t\"./core\",\n\t\"./var/indexOf\",\n\t\"./traversing/var/rneedsContext\",\n\t\"./core/init\",\n\t\"./traversing/findFilter\",\n\t\"./selector\"\n], function( jQuery, indexOf, rneedsContext ) {\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\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.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; 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\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\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\tmatched.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( matched.length > 1 ? jQuery.unique( matched ) : matched );\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 indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\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\twhile ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}\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 elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = 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\tmatched = jQuery.filter( selector, matched );\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\tjQuery.unique( matched );\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\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n});\n\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/arr.js",
    "content": "define(function() {\n\treturn [];\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/class2type.js",
    "content": "define(function() {\n\t// [[Class]] -> type pairs\n\treturn {};\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/concat.js",
    "content": "define([\n\t\"./arr\"\n], function( arr ) {\n\treturn arr.concat;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/hasOwn.js",
    "content": "define([\n\t\"./class2type\"\n], function( class2type ) {\n\treturn class2type.hasOwnProperty;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/indexOf.js",
    "content": "define([\n\t\"./arr\"\n], function( arr ) {\n\treturn arr.indexOf;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/pnum.js",
    "content": "define(function() {\n\treturn (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/push.js",
    "content": "define([\n\t\"./arr\"\n], function( arr ) {\n\treturn arr.push;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/rnotwhite.js",
    "content": "define(function() {\n\treturn (/\\S+/g);\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/slice.js",
    "content": "define([\n\t\"./arr\"\n], function( arr ) {\n\treturn arr.slice;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/strundefined.js",
    "content": "define(function() {\n\treturn typeof undefined;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/support.js",
    "content": "define(function() {\n\t// All support tests are defined in their respective modules.\n\treturn {};\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/var/toString.js",
    "content": "define([\n\t\"./class2type\"\n], function( class2type ) {\n\treturn class2type.toString;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/jquery/src/wrap.js",
    "content": "define([\n\t\"./core\",\n\t\"./core/init\",\n\t\"./traversing\" // parent, contents\n], function( jQuery ) {\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\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\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = 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.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\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\nreturn jQuery;\n});\n"
  },
  {
    "path": "maverix-theme/bower_components/rangeslider.js/.bower.json",
    "content": "{\n  \"name\": \"rangeslider.js\",\n  \"version\": \"0.2.8\",\n  \"main\": \"dist/rangeslider.js\",\n  \"homepage\": \"https://github.com/andreruffert/rangeslider.js\",\n  \"author\": \"André Ruffert\",\n  \"license\": \"MIT\",\n  \"description\": \"Simple, small and fast JavaScript/jQuery polyfill for the HTML5 <input type=\\\"range\\\"> slider element\",\n  \"keywords\": [\n    \"input\",\n    \"range\",\n    \"slider\",\n    \"rangeslider\",\n    \"rangeslider.js\",\n    \"polyfill\"\n  ],\n  \"ignore\": [\n    \"**/.*\",\n    \"src\",\n    \"example\",\n    \"node_modules\",\n    \"bower_components\",\n    \"bower.json\",\n    \"Gruntfile.js\",\n    \"package.json\"\n  ],\n  \"_release\": \"0.2.8\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v0.2.8\",\n    \"commit\": \"88c82ba9007ef186a42c5f8c0954410212405bb9\"\n  },\n  \"_source\": \"git://github.com/andreruffert/rangeslider.js.git\",\n  \"_target\": \"~0.2.8\",\n  \"_originalSource\": \"rangeslider.js\",\n  \"_direct\": true\n}"
  },
  {
    "path": "maverix-theme/bower_components/rangeslider.js/LICENSE-MIT.txt",
    "content": "Copyright André Ruffert <http://andreruffert.com/>\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": "maverix-theme/bower_components/rangeslider.js/README.md",
    "content": "#rangeslider.js [![Built with Grunt](https://cdn.gruntjs.com/builtwith.png)](http://gruntjs.com/)\nSimple, small and fast JavaScript/jQuery polyfill for the HTML5 `<input type=\"range\">` slider element.            \nCheck out the [demo](http://andreruffert.github.io/rangeslider.js/). \n\n\n##Features\n* Touchscreen friendly\n* Recalculates `onresize` so suitable for use within responsive designs\n* Small and fast\n\n\n##Browser Support\n* Tested in IE8+ and all modern Browsers\n\n\n##Installation\n``bower install --save rangeslider.js``\n\n\n##Usage\nCheck out the [website's section](http://andreruffert.github.io/rangeslider.js/#usage) on how to use rangeslider.js.\n"
  },
  {
    "path": "maverix-theme/bower_components/rangeslider.js/dist/rangeslider.css",
    "content": ".rangeslider,\n.rangeslider__fill {\n    background: #e6e6e6;\n    border: none;\n    display: block;\n    height: 20px;\n    width: 100%;\n    /*-webkit-box-shadow: 0px 2px 2px rgba(255, 255, 255, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.3);\n    -moz-box-shadow: 0px 2px 2px rgba(255, 255, 255, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.3);\n    box-shadow: 0px 2px 2px rgba(255, 255, 255, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.3);*/\n    -webkit-border-radius: 10px;\n    -moz-border-radius: 10px;\n    -ms-border-radius: 10px;\n    -o-border-radius: 10px;\n    border-radius: 10px;\n}\n\n.rangeslider {\n    position: relative;\n}\n\n.rangeslider__fill {\n    background-color: #6aca54;\n    position: absolute;\n    top: 0;\n}\n\n.rangeslider__handle {\n    background: white;\n    border: 1px solid #ccc;\n    cursor: pointer;\n    display: inline-block;\n    width: 40px;\n    height: 40px;\n    position: absolute;\n    top: -10px;\n    -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.2);\n    -webkit-border-radius: 20px;\n    -moz-border-radius: 20px;\n    -ms-border-radius: 20px;\n    -o-border-radius: 20px;\n    border-radius: 20px;\n}\n\n/*\n.rangeslider__handle:after {\n  content: \"\";\n  display: block;\n  width: 18px;\n  height: 18px;\n  margin: auto;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0, 0, 0, 0.13)), color-stop(100%, rgba(255, 255, 255, 0)));\n  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.13), rgba(255, 255, 255, 0));\n  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.13), rgba(255, 255, 255, 0));\n  background-image: -o-linear-gradient(rgba(0, 0, 0, 0.13), rgba(255, 255, 255, 0));\n  background-image: linear-gradient(rgba(0, 0, 0, 0.13), rgba(255, 255, 255, 0));\n  -webkit-border-radius: 20px;\n  -moz-border-radius: 20px;\n  -ms-border-radius: 20px;\n  -o-border-radius: 20px;\n  border-radius: 20px;\n}\n*/\n"
  },
  {
    "path": "maverix-theme/bower_components/rangeslider.js/dist/rangeslider.js",
    "content": "/*! rangeslider.js - v0.2.8 | (c) 2014 @andreruffert | MIT license | https://github.com/andreruffert/rangeslider.js */\n'use strict';\n\n(function (module) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], module);\n    } else {\n        // Browser globals\n        module(jQuery);\n    }\n})(function($, undefined) {\n\n    /**\n     * Range feature detection\n     * @return {Boolean}\n     */\n    function supportsRange() {\n        var input = document.createElement('input');\n        input.setAttribute('type', 'range');\n        return input.type !== 'text';\n    }\n\n    var pluginName = 'rangeslider',\n        pluginInstances = [],\n        inputrange = supportsRange(),\n        defaults = {\n            polyfill: true,\n            rangeClass: 'rangeslider',\n            fillClass: 'rangeslider__fill',\n            handleClass: 'rangeslider__handle',\n            startEvent: ['mousedown', 'touchstart', 'pointerdown'],\n            moveEvent: ['mousemove', 'touchmove', 'pointermove'],\n            endEvent: ['mouseup', 'touchend', 'pointerup']\n        };\n\n    /**\n     * Delays a function for the given number of milliseconds, and then calls\n     * it with the arguments supplied.\n     *\n     * @param  {Function} fn   [description]\n     * @param  {Number}   wait [description]\n     * @return {Function}\n     */\n    function delay(fn, wait) {\n        var args = Array.prototype.slice.call(arguments, 2);\n        return setTimeout(function(){ return fn.apply(null, args); }, wait);\n    }\n\n    /**\n     * Returns a debounced function that will make sure the given\n     * function is not triggered too much.\n     *\n     * @param  {Function} fn Function to debounce.\n     * @param  {Number}   debounceDuration OPTIONAL. The amount of time in milliseconds for which we will debounce the function. (defaults to 100ms)\n     * @return {Function}\n     */\n    function debounce(fn, debounceDuration) {\n        debounceDuration = debounceDuration || 100;\n        return function() {\n            if (!fn.debouncing) {\n                var args = Array.prototype.slice.apply(arguments);\n                fn.lastReturnVal = fn.apply(window, args);\n                fn.debouncing = true;\n            }\n            clearTimeout(fn.debounceTimeout);\n            fn.debounceTimeout = setTimeout(function(){\n                fn.debouncing = false;\n            }, debounceDuration);\n            return fn.lastReturnVal;\n        };\n    }\n\n    /**\n     * Plugin\n     * @param {String} element\n     * @param {Object} options\n     */\n    function Plugin(element, options) {\n        this.$window    = $(window);\n        this.$document  = $(document);\n        this.$element   = $(element);\n        this.options    = $.extend( {}, defaults, options );\n        this._defaults  = defaults;\n        this._name      = pluginName;\n        this.startEvent = this.options.startEvent.join('.' + pluginName + ' ') + '.' + pluginName;\n        this.moveEvent  = this.options.moveEvent.join('.' + pluginName + ' ') + '.' + pluginName;\n        this.endEvent   = this.options.endEvent.join('.' + pluginName + ' ') + '.' + pluginName;\n        this.polyfill   = this.options.polyfill;\n        this.onInit     = this.options.onInit;\n        this.onSlide    = this.options.onSlide;\n        this.onSlideEnd = this.options.onSlideEnd;\n\n        // Plugin should only be used as a polyfill\n        if (this.polyfill) {\n            // Input range support?\n            if (inputrange) { return false; }\n        }\n\n        this.identifier = 'js-' + pluginName + '-' +(+new Date());\n        this.min        = parseFloat(this.$element[0].getAttribute('min')) || 0;\n        this.max        = parseFloat(this.$element[0].getAttribute('max')) || 100;\n        this.value      = parseFloat(this.$element[0].value) || this.min + (this.max-this.min)/2;\n        this.step       = parseFloat(this.$element[0].getAttribute('step')) || 1;\n        this.$fill      = $('<div class=\"' + this.options.fillClass + '\" />');\n        this.$handle    = $('<div class=\"' + this.options.handleClass + '\" />');\n        this.$range     = $('<div class=\"' + this.options.rangeClass + '\" id=\"' + this.identifier + '\" />').insertBefore(this.$element).prepend(this.$fill, this.$handle);\n\n        // visually hide the input\n        this.$element.css({\n            'position': 'absolute',\n            'width': '1px',\n            'height': '1px',\n            'overflow': 'hidden',\n            'visibility': 'hidden'\n        });\n\n        // Store context\n        this.handleDown = $.proxy(this.handleDown, this);\n        this.handleMove = $.proxy(this.handleMove, this);\n        this.handleEnd  = $.proxy(this.handleEnd, this);\n\n        this.init();\n\n        // Attach Events\n        var _this = this;\n        this.$window.on('resize' + '.' + pluginName, debounce(function() {\n            // Simulate resizeEnd event.\n            delay(function() { _this.update(); }, 300);\n        }, 20));\n\n        this.$document.on(this.startEvent, '#' + this.identifier, this.handleDown);\n\n        // Listen to programmatic value changes\n        this.$element.on('change' + '.' + pluginName, function(e, data) {\n            if (data && data.origin === pluginName) {\n                return;\n            }\n\n            var value = e.target.value,\n                pos = _this.getPositionFromValue(value);\n            _this.setPosition(pos);\n        });\n    }\n\n    Plugin.prototype.init = function() {\n        this.update();\n\n        if (this.onInit && typeof this.onInit === 'function') {\n            this.onInit();\n        }\n    };\n\n    Plugin.prototype.update = function() {\n        this.handleWidth    = this.$handle[0].offsetWidth;\n        this.rangeWidth     = this.$range[0].offsetWidth;\n        this.maxHandleX     = this.rangeWidth - this.handleWidth;\n        this.grabX          = this.handleWidth / 2;\n        this.position       = this.getPositionFromValue(this.value);\n\n        this.setPosition(this.position);\n    };\n\n    Plugin.prototype.handleDown = function(e) {\n        e.preventDefault();\n        this.$document.on(this.moveEvent, this.handleMove);\n        this.$document.on(this.endEvent, this.handleEnd);\n\n        // If we click on the handle don't set the new position\n        if ((' ' + e.target.className + ' ').replace(/[\\n\\t]/g, ' ').indexOf(this.options.handleClass) > -1) {\n            return;\n        }\n\n        var posX = this.getRelativePosition(this.$range[0], e),\n            handleX = this.getPositionFromNode(this.$handle[0]) - this.getPositionFromNode(this.$range[0]);\n\n        this.setPosition(posX - this.grabX);\n\n        if (posX >= handleX && posX < handleX + this.handleWidth) {\n            this.grabX = posX - handleX;\n        }\n    };\n\n    Plugin.prototype.handleMove = function(e) {\n        e.preventDefault();\n        var posX = this.getRelativePosition(this.$range[0], e);\n        this.setPosition(posX - this.grabX);\n    };\n\n    Plugin.prototype.handleEnd = function(e) {\n        e.preventDefault();\n        this.$document.off(this.moveEvent, this.handleMove);\n        this.$document.off(this.endEvent, this.handleEnd);\n\n        var posX = this.getRelativePosition(this.$range[0], e);\n        if (this.onSlideEnd && typeof this.onSlideEnd === 'function') {\n            this.onSlideEnd(posX - this.grabX, this.value);\n        }\n    };\n\n    Plugin.prototype.cap = function(pos, min, max) {\n        if (pos < min) { return min; }\n        if (pos > max) { return max; }\n        return pos;\n    };\n\n    Plugin.prototype.setPosition = function(pos) {\n        var value, left;\n\n        // Snapping steps\n        value = (this.getValueFromPosition(this.cap(pos, 0, this.maxHandleX)) / this.step) * this.step;\n        left = this.getPositionFromValue(value);\n\n        // Update ui\n        this.$fill[0].style.width = (left + this.grabX)  + 'px';\n        this.$handle[0].style.left = left + 'px';\n        this.setValue(value);\n\n        // Update globals\n        this.position = left;\n        this.value = value;\n\n        if (this.onSlide && typeof this.onSlide === 'function') {\n            this.onSlide(left, value);\n        }\n    };\n\n    Plugin.prototype.getPositionFromNode = function(node) {\n        var i = 0;\n        while (node !== null) {\n            i += node.offsetLeft;\n            node = node.offsetParent;\n        }\n        return i;\n    };\n\n    Plugin.prototype.getRelativePosition = function(node, e) {\n        return (e.pageX || e.originalEvent.clientX || e.originalEvent.touches[0].clientX || e.currentPoint.x) - this.getPositionFromNode(node);\n    };\n\n    Plugin.prototype.getPositionFromValue = function(value) {\n        var percentage, pos;\n        percentage = (value - this.min)/(this.max - this.min);\n        pos = percentage * this.maxHandleX;\n        return pos;\n    };\n\n    Plugin.prototype.getValueFromPosition = function(pos) {\n        var percentage, value;\n        percentage = (pos) / (this.maxHandleX);\n        value = this.step * Math.ceil((((percentage) * (this.max - this.min)) + this.min) / this.step);\n        return Number((value).toFixed(2));\n    };\n\n    Plugin.prototype.setValue = function(value) {\n        this.$element.val(value).trigger('change', {origin: pluginName});\n    };\n\n    Plugin.prototype.destroy = function() {\n        this.$document.off(this.startEvent, '#' + this.identifier, this.handleDown);\n        this.$element\n            .off('.' + pluginName)\n            .removeAttr('style')\n            .removeData('plugin_' + pluginName);\n\n        // Remove the generated markup\n        if (this.$range && this.$range.length) {\n            this.$range[0].parentNode.removeChild(this.$range[0]);\n        }\n\n        // Remove global events if there isn't any instance anymore.\n        pluginInstances.splice(pluginInstances.indexOf(this.$element[0]),1);\n        if (!pluginInstances.length) {\n            this.$window.off('.' + pluginName);\n        }\n    };\n\n    // A really lightweight plugin wrapper around the constructor,\n    // preventing against multiple instantiations\n    $.fn[pluginName] = function(options) {\n        return this.each(function() {\n            var $this = $(this),\n                data  = $this.data('plugin_' + pluginName);\n\n            // Create a new instance.\n            if (!data) {\n                $this.data('plugin_' + pluginName, (data = new Plugin(this, options)));\n                pluginInstances.push(this);\n            }\n\n            // Make it possible to access methods from public.\n            // e.g `$element.rangeslider('method');`\n            if (typeof options === 'string') {\n                data[options]();\n            }\n        });\n    };\n\n});\n"
  },
  {
    "path": "maverix-theme/css/maverix.css",
    "content": "@charset \"UTF-8\";@font-face{font-family:'entypo';font-style:normal;font-weight:normal;src:url('http://weloveiconfonts.com/api/fonts/entypo/entypo.eot');src:url('http://weloveiconfonts.com/api/fonts/entypo/entypo.eot?#iefix') format('eot'),url('http://weloveiconfonts.com/api/fonts/entypo/entypo.woff') format('woff'),url('http://weloveiconfonts.com/api/fonts/entypo/entypo.ttf') format('truetype'),url('http://weloveiconfonts.com/api/fonts/entypo/entypo.svg#entypo') format('svg')}.entypo-note:before{content:\"\\266a\"}.entypo-note-beamed:before{content:\"\\266b\"}.entypo-music:before{content:\"\\1f3b5\"}.entypo-search:before{content:\"\\1f50d\"}.entypo-flashlight:before{content:\"\\1f526\"}.entypo-mail:before{content:\"\\2709\"}.entypo-heart:before{content:\"\\2665\"}.entypo-heart-empty:before{content:\"\\2661\"}.entypo-star:before{content:\"\\2605\"}.entypo-star-empty:before{content:\"\\2606\"}.entypo-user:before{content:\"\\1f464\"}.entypo-users:before{content:\"\\1f465\"}.entypo-user-add:before{content:\"\\e700\"}.entypo-video:before{content:\"\\1f3ac\"}.entypo-picture:before{content:\"\\1f304\"}.entypo-camera:before{content:\"\\1f4f7\"}.entypo-layout:before{content:\"\\268f\"}.entypo-menu:before{content:\"\\2630\"}.entypo-check:before{content:\"\\2713\"}.entypo-cancel:before{content:\"\\2715\"}.entypo-cancel-circled:before{content:\"\\2716\"}.entypo-cancel-squared:before{content:\"\\274e\"}.entypo-plus:before{content:\"\\2b\"}.entypo-plus-circled:before{content:\"\\2795\"}.entypo-plus-squared:before{content:\"\\229e\"}.entypo-minus:before{content:\"\\2d\"}.entypo-minus-circled:before{content:\"\\2796\"}.entypo-minus-squared:before{content:\"\\229f\"}.entypo-help:before{content:\"\\2753\"}.entypo-help-circled:before{content:\"\\e704\"}.entypo-info:before{content:\"\\2139\"}.entypo-info-circled:before{content:\"\\e705\"}.entypo-back:before{content:\"\\1f519\"}.entypo-home:before{content:\"\\2302\"}.entypo-link:before{content:\"\\1f517\"}.entypo-attach:before{content:\"\\1f4ce\"}.entypo-lock:before{content:\"\\1f512\"}.entypo-lock-open:before{content:\"\\1f513\"}.entypo-eye:before{content:\"\\e70a\"}.entypo-tag:before{content:\"\\e70c\"}.entypo-bookmark:before{content:\"\\1f516\"}.entypo-bookmarks:before{content:\"\\1f4d1\"}.entypo-flag:before{content:\"\\2691\"}.entypo-thumbs-up:before{content:\"\\1f44d\"}.entypo-thumbs-down:before{content:\"\\1f44e\"}.entypo-download:before{content:\"\\1f4e5\"}.entypo-upload:before{content:\"\\1f4e4\"}.entypo-upload-cloud:before{content:\"\\e711\"}.entypo-reply:before{content:\"\\e712\"}.entypo-reply-all:before{content:\"\\e713\"}.entypo-forward:before{content:\"\\27a6\"}.entypo-quote:before{content:\"\\275e\"}.entypo-code:before{content:\"\\e714\"}.entypo-export:before{content:\"\\e715\"}.entypo-pencil:before{content:\"\\270e\"}.entypo-feather:before{content:\"\\2712\"}.entypo-print:before{content:\"\\e716\"}.entypo-retweet:before{content:\"\\e717\"}.entypo-keyboard:before{content:\"\\2328\"}.entypo-comment:before{content:\"\\e718\"}.entypo-chat:before{content:\"\\e720\"}.entypo-bell:before{content:\"\\1f514\"}.entypo-attention:before{content:\"\\26a0\"}.entypo-alert:before{content:\"\\1f4a5'\"}.entypo-vcard:before{content:\"\\e722\"}.entypo-address:before{content:\"\\e723\"}.entypo-location:before{content:\"\\e724\"}.entypo-map:before{content:\"\\e727\"}.entypo-direction:before{content:\"\\27a2\"}.entypo-compass:before{content:\"\\e728\"}.entypo-cup:before{content:\"\\2615\"}.entypo-trash:before{content:\"\\e729\"}.entypo-doc:before{content:\"\\e730\"}.entypo-docs:before{content:\"\\e736\"}.entypo-doc-landscape:before{content:\"\\e737\"}.entypo-doc-text:before{content:\"\\1f4c4\"}.entypo-doc-text-inv:before{content:\"\\e731\"}.entypo-newspaper:before{content:\"\\1f4f0\"}.entypo-book-open:before{content:\"\\1f4d6\"}.entypo-book:before{content:\"\\1f4d5\"}.entypo-folder:before{content:\"\\1f4c1\"}.entypo-archive:before{content:\"\\e738\"}.entypo-box:before{content:\"\\1f4e6\"}.entypo-rss:before{content:\"\\e73a\"}.entypo-phone:before{content:\"\\1f4dE\"}.entypo-cog:before{content:\"\\2699\"}.entypo-tools:before{content:\"\\2692\"}.entypo-share:before{content:\"\\e73c\"}.entypo-shareable:before{content:\"\\e73e\"}.entypo-basket:before{content:\"\\e73d\"}.entypo-bag:before{content:\"\\1f45c'\"}.entypo-calendar:before{content:\"\\1f4c5\"}.entypo-login:before{content:\"\\e740\"}.entypo-logout:before{content:\"\\e741\"}.entypo-mic:before{content:\"\\1f3a4\"}.entypo-mute:before{content:\"\\1f507\"}.entypo-sound:before{content:\"\\1f50a\"}.entypo-volume:before{content:\"\\e742\"}.entypo-clock:before{content:\"\\1f554\"}.entypo-hourglass:before{content:\"\\23f3\"}.entypo-lamp:before{content:\"\\1f4a1\"}.entypo-light-down:before{content:\"\\1f505\"}.entypo-light-up:before{content:\"\\1f506\"}.entypo-adjust:before{content:\"\\25d1\"}.entypo-block:before{content:\"\\1f6ab\"}.entypo-resize-full:before{content:\"\\e744\"}.entypo-resize-small:before{content:\"\\e746\"}.entypo-popup:before{content:\"\\e74c\"}.entypo-publish:before{content:\"\\e74d\"}.entypo-window:before{content:\"\\e74e\"}.entypo-arrow-combo:before{content:\"\\e74f\"}.entypo-down-circled:before{content:\"\\e758\"}.entypo-left-circled:before{content:\"\\e759\"}.entypo-right-circled:before{content:\"\\e75a\"}.entypo-up-circled:before{content:\"\\e75b\"}.entypo-down-open:before{content:\"\\e75c\"}.entypo-left-open:before{content:\"\\e75d\"}.entypo-right-open:before{content:\"\\e75e\"}.entypo-up-open:before{content:\"\\e75f\"}.entypo-down-open-mini:before{content:\"\\e760\"}.entypo-left-open-mini:before{content:\"\\e761\"}.entypo-right-open-mini:before{content:\"\\e762\"}.entypo-up-open-mini:before{content:\"\\e763\"}.entypo-down-open-big:before{content:\"\\e764\"}.entypo-left-open-big:before{content:\"\\e765\"}.entypo-right-open-big:before{content:\"\\e766\"}.entypo-up-open-big:before{content:\"\\e767\"}.entypo-down:before{content:\"\\2b07\"}.entypo-left:before{content:\"\\2b05\"}.entypo-right:before{content:\"\\27a1\"}.entypo-up:before{content:\"\\2b06\"}.entypo-down-dir:before{content:\"\\25be\"}.entypo-left-dir:before{content:\"\\25c2\"}.entypo-right-dir:before{content:\"\\25b8\"}.entypo-up-dir:before{content:\"\\25b4\"}.entypo-down-bold:before{content:\"\\e4b0\"}.entypo-left-bold:before{content:\"\\e4ad\"}.entypo-right-bold:before{content:\"\\e4ae\"}.entypo-up-bold:before{content:\"\\e4af\"}.entypo-down-thin:before{content:\"\\2193\"}.entypo-left-thin:before{content:\"\\2190\"}.entypo-right-thin:before{content:\"\\2192\"}.entypo-up-thin:before{content:\"\\2191\"}.entypo-ccw:before{content:\"\\27f2\"}.entypo-cw:before{content:\"\\27f3\"}.entypo-arrows-ccw:before{content:\"\\1f504\"}.entypo-level-down:before{content:\"\\21b3\"}.entypo-level-up:before{content:\"\\21b0\"}.entypo-shuffle:before{content:\"\\1f500\"}.entypo-loop:before{content:\"\\1f501\"}.entypo-switch:before{content:\"\\21c6\"}.entypo-play:before{content:\"\\25b6\"}.entypo-stop:before{content:\"\\25a0\"}.entypo-pause:before{content:\"\\2389\"}.entypo-record:before{content:\"\\26ab\"}.entypo-to-end:before{content:\"\\23ed\"}.entypo-to-start:before{content:\"\\23ee\"}.entypo-fast-forward:before{content:\"\\23e9\"}.entypo-fast-backward:before{content:\"\\23ea\"}.entypo-progress-0:before{content:\"\\e768\"}.entypo-progress-1:before{content:\"\\e769\"}.entypo-progress-2:before{content:\"\\e76a\"}.entypo-progress-3:before{content:\"\\e76b\"}.entypo-target:before{content:\"\\1f3af\"}.entypo-palette:before{content:\"\\1f3a8\"}.entypo-list:before{content:\"\\e005\"}.entypo-list-add:before{content:\"\\e003\"}.entypo-signal:before{content:\"\\1f4f6\"}.entypo-trophy:before{content:\"\\1f3c6\"}.entypo-battery:before{content:\"\\1f50b\"}.entypo-back-in-time:before{content:\"\\e771\"}.entypo-monitor:before{content:\"\\1f4bb\"}.entypo-mobile:before{content:\"\\1f4f1\"}.entypo-network:before{content:\"\\e776\"}.entypo-cd:before{content:\"\\1f4bf\"}.entypo-inbox:before{content:\"\\e777\"}.entypo-install:before{content:\"\\e778\"}.entypo-globe:before{content:\"\\1f30e\"}.entypo-cloud:before{content:\"\\2601\"}.entypo-cloud-thunder:before{content:\"\\26c8\"}.entypo-flash:before{content:\"\\26a1\"}.entypo-moon:before{content:\"\\263d\"}.entypo-flight:before{content:\"\\2708\"}.entypo-paper-plane:before{content:\"\\e79b\"}.entypo-leaf:before{content:\"\\1f342\"}.entypo-lifebuoy:before{content:\"\\e788\"}.entypo-mouse:before{content:\"\\e789\"}.entypo-briefcase:before{content:\"\\1f4bc\"}.entypo-suitcase:before{content:\"\\e78e\"}.entypo-dot:before{content:\"\\e78b\"}.entypo-dot-2:before{content:\"\\e78c\"}.entypo-dot-3:before{content:\"\\e78d\"}.entypo-brush:before{content:\"\\e79a\"}.entypo-magnet:before{content:\"\\e7a1\"}.entypo-infinity:before{content:\"\\221e\"}.entypo-erase:before{content:\"\\232b\"}.entypo-chart-pie:before{content:\"\\e751\"}.entypo-chart-line:before{content:\"\\1f4c8\"}.entypo-chart-bar:before{content:\"\\1f4ca\"}.entypo-chart-area:before{content:\"\\1f53e\"}.entypo-tape:before{content:\"\\2707\"}.entypo-graduation-cap:before{content:\"\\1f393\"}.entypo-language:before{content:\"\\e752\"}.entypo-ticket:before{content:\"\\1f3ab\"}.entypo-water:before{content:\"\\1f4a6\"}.entypo-droplet:before{content:\"\\1f4a7\"}.entypo-air:before{content:\"\\e753\"}.entypo-credit-card:before{content:\"\\1f4b3\"}.entypo-floppy:before{content:\"\\1f4be\"}.entypo-clipboard:before{content:\"\\1f4cb\"}.entypo-megaphone:before{content:\"\\1f4e3\"}.entypo-database:before{content:\"\\e754\"}.entypo-drive:before{content:\"\\e755\"}.entypo-bucket:before{content:\"\\e756\"}.entypo-thermometer:before{content:\"\\e757\"}.entypo-key:before{content:\"\\1f511\"}.entypo-flow-cascade:before{content:\"\\e790\"}.entypo-flow-branch:before{content:\"\\e791\"}.entypo-flow-tree:before{content:\"\\e792\"}.entypo-flow-line:before{content:\"\\e793\"}.entypo-flow-parallel:before{content:\"\\e794\"}.entypo-rocket:before{content:\"\\1f680\"}.entypo-gauge:before{content:\"\\e7a2\"}.entypo-traffic-cone:before{content:\"\\e7a3\"}.entypo-cc:before{content:\"\\e7a5\"}.entypo-cc-by:before{content:\"\\e7a6\"}.entypo-cc-nc:before{content:\"\\e7a7\"}.entypo-cc-nc-eu:before{content:\"\\e7a8\"}.entypo-cc-nc-jp:before{content:\"\\e7a9\"}.entypo-cc-sa:before{content:\"\\e7aa\"}.entypo-cc-nd:before{content:\"\\e7ab\"}.entypo-cc-pd:before{content:\"\\e7ac\"}.entypo-cc-zero:before{content:\"\\e7ad\"}.entypo-cc-share:before{content:\"\\e7ae\"}.entypo-cc-remix:before{content:\"\\e7af\"}.entypo-github:before{content:\"\\f300\"}.entypo-github-circled:before{content:\"\\f301\"}.entypo-flickr:before{content:\"\\f303\"}.entypo-flickr-circled:before{content:\"\\f304\"}.entypo-vimeo:before{content:\"\\f306\"}.entypo-vimeo-circled:before{content:\"\\f307\"}.entypo-twitter:before{content:\"\\f309\"}.entypo-twitter-circled:before{content:\"\\f30a\"}.entypo-facebook:before{content:\"\\f30c\"}.entypo-facebook-circled:before{content:\"\\f30d\"}.entypo-facebook-squared:before{content:\"\\f30e\"}.entypo-gplus:before{content:\"\\f30f\"}.entypo-gplus-circled:before{content:\"\\f310\"}.entypo-pinterest:before{content:\"\\f312\"}.entypo-pinterest-circled:before{content:\"\\f313\"}.entypo-tumblr:before{content:\"\\f315\"}.entypo-tumblr-circled:before{content:\"\\f316\"}.entypo-linkedin:before{content:\"\\f318\"}.entypo-linkedin-circled:before{content:\"\\f319\"}.entypo-dribbble:before{content:\"\\f31b\"}.entypo-dribbble-circled:before{content:\"\\f31c\"}.entypo-stumbleupon:before{content:\"\\f31e\"}.entypo-stumbleupon-circled:before{content:\"\\f31f\"}.entypo-lastfm:before{content:\"\\f321\"}.entypo-lastfm-circled:before{content:\"\\f322\"}.entypo-rdio:before{content:\"\\f324\"}.entypo-rdio-circled:before{content:\"\\f325\"}.entypo-spotify:before{content:\"\\f327\"}.entypo-spotify-circled:before{content:\"\\f328\"}.entypo-qq:before{content:\"\\f32a\"}.entypo-instagrem:before{content:\"\\f32d\"}.entypo-dropbox:before{content:\"\\f330\"}.entypo-evernote:before{content:\"\\f333\"}.entypo-flattr:before{content:\"\\f336\"}.entypo-skype:before{content:\"\\f339\"}.entypo-skype-circled:before{content:\"\\f33a\"}.entypo-renren:before{content:\"\\f33c\"}.entypo-sina-weibo:before{content:\"\\f33f\"}.entypo-paypal:before{content:\"\\f342\"}.entypo-picasa:before{content:\"\\f345\"}.entypo-soundcloud:before{content:\"\\f348\"}.entypo-mixi:before{content:\"\\f34b\"}.entypo-behance:before{content:\"\\f34e\"}.entypo-google-circles:before{content:\"\\f351\"}.entypo-vkontakte:before{content:\"\\f354\"}.entypo-smashing:before{content:\"\\f357\"}.entypo-sweden:before{content:\"\\f601\"}.entypo-db-shape:before{content:\"\\f600\"}.entypo-logo-db:before{content:\"\\f603\"}*:focus{outline:none}body.blur .sidebar{background-image:-o-linear-gradient(-89deg, #f7f7f7 0, #ebebeb 100%);background-image:-moz-linear-gradient(-89deg, #f7f7f7 0, #ebebeb 100%);background-image:-ms-linear-gradient(-89deg, #f7f7f7 0, #ebebeb 100%);background-image:linear-gradient(-179deg, #f7f7f7 0, #ebebeb 100%)}body.blur ul.nav li.selected{background-image:-o-linear-gradient(-89deg, #bdc7dd 0, #a6b2cd 100%, #9da9c6 100%);background-image:-moz-linear-gradient(-89deg, #bdc7dd 0, #a6b2cd 100%, #9da9c6 100%);background-image:-ms-linear-gradient(-89deg, #bdc7dd 0, #a6b2cd 100%, #9da9c6 100%);background-image:linear-gradient(-179deg, #bdc7dd 0, #a6b2cd 100%, #9da9c6 100%);-moz-box-shadow:inset 0 -1px 0 0 #93a0ba,inset 0 1px 0 0 #bbc5d7,inset 0 2px 0 0 #c3cce0;box-shadow:inset 0 -1px 0 0 #93a0ba,inset 0 1px 0 0 #bbc5d7,inset 0 2px 0 0 #c3cce0}body.blur ul.nav li.selected span.sidebar-badge{color:#acb6d0 !important}body.blur table.table-maverix tr.selected{color:#000;background-color:#cbcbcb !important}body.blur table.table-maverix tr.selected select.on-white-select{background-color:#cbcbcb}body.blur table.table-maverix tr.selected .info-sub{color:#787878 !important}[class*=\"entypo-\"]:before{font-family:'entypo',sans-serif}body{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif}p{margin-bottom:20px;margin-top:5px}.sidebar{position:absolute;overflow:scroll;top:0;bottom:0;width:254px;z-index:2;background:#e5e9ee;-moz-box-shadow:1px 0 0 0 rgba(0,0,0,0.24),inset -1px 0 0 0 rgba(254,255,255,0.27);box-shadow:1px 0 0 0 rgba(0,0,0,0.24),inset -1px 0 0 0 rgba(254,255,255,0.27);background-image:-o-linear-gradient(-89deg, #e8ecf1 0, #d1d8e0 100%);background-image:-moz-linear-gradient(-89deg, #e8ecf1 0, #d1d8e0 100%);background-image:-ms-linear-gradient(-89deg, #e8ecf1 0, #d1d8e0 100%);background-image:linear-gradient(-179deg, #e8ecf1 0, #d1d8e0 100%)}.sidebar div.sidebar-navicontainer{margin-bottom:5px}.sidebar div.sidebar-headbox:hover .sidebar-toggle{opacity:1;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sidebar div.sidebar-headbox .sidebar-header{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-weight:bold;font-size:11px;color:#707e8c;line-height:13px;text-shadow:0 1px 0 rgba(255,255,255,0.46);text-transform:uppercase;display:inline-block;padding:5px 9px}.sidebar div.sidebar-headbox .sidebar-toggle{opacity:0;cursor:pointer;font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-weight:bold;font-size:11px;color:#98a5b2;line-height:13px;text-shadow:0 1px 0 rgba(255,255,255,0.6);float:right;margin-top:5px;padding-right:10px}.sidebar div.sidebar-headbox .sidebar-toggle:hover{text-decoration:none}.sidebar div.sidebar-headbox .sidebar-toggle:active{color:#5069ec}.sidebar ul.nav li{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:13px;line-height:13px;color:#000;padding:4px 28px;padding-top:3px;padding-right:10px;text-shadow:0 1px 0 #fff;margin-bottom:1px}.sidebar ul.nav li.selected{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,0.5);font-weight:bold;background-image:-o-linear-gradient(-89deg, #69b1e5 0, #3485d0 100%);background-image:-moz-linear-gradient(-89deg, #69b1e5 0, #3485d0 100%);background-image:-ms-linear-gradient(-89deg, #69b1e5 0, #3485d0 100%);background-image:linear-gradient(-179deg, #69b1e5 0, #3485d0 100%);-moz-box-shadow:0 -1px 0 0 #5ca4df,inset 0 -1px 0 0 #327ac2,inset 0 1px 0 0 #71b9ea;box-shadow:0 -1px 0 0 #5ca4df,inset 0 -1px 0 0 #327ac2,inset 0 1px 0 0 #71b9ea}.sidebar ul.nav li.selected span{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,0.1)}.sidebar ul.nav li.selected .sidebar-badge{background-color:#fff;color:#4b8fd5 !important}.sidebar ul.nav li.selected a{color:#fff !important}.sidebar ul.nav li.selected a:focus{background:none !important}.sidebar ul.nav li a{text-decoration:none;color:#000 !important;padding:0}.sidebar ul.nav li a:hover{background:none !important}.sidebar ul.nav li span{color:#818896;font-size:18px;text-shadow:0 1px 0 #fff;width:20px;display:inline-block;text-align:center}.sidebar ul.nav li .sidebar-badge{float:right;background-color:#98a5b3;border-radius:50px;font-size:11px !important;line-height:15px;color:#fff !important;font-weight:bold;text-shadow:none}.content{position:absolute;left:254px;right:0;top:88px;bottom:0;overflow-y:scroll}.content .container-fluid{padding:20px}.content .container-maverix{width:680px;margin:0 auto;font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:13px;color:#000;line-height:16px;padding-top:25px}div.heading-bar{position:absolute;top:0;left:255px;right:0;z-index:2;min-width:680px;background-image:-o-linear-gradient(-89deg, #efeef1 0, #d5d9dc 100%);background-image:-moz-linear-gradient(-89deg, #efeef1 0, #d5d9dc 100%);background-image:-ms-linear-gradient(-89deg, #efeef1 0, #d5d9dc 100%);background-image:linear-gradient(-179deg, #efeef1 0, #d5d9dc 100%);border-bottom:1px solid #c2c2c2;height:88px;padding:20px}div.heading-bar .user-bar{position:absolute;top:0;right:10px;font-size:11px;line-height:30px}div.heading-bar .heading-one{display:table-cell;vertical-align:middle;font-family:Helvetica Neue,Helvetica,Arial;font-weight:bold;font-size:24px;color:#3a3d40;line-height:29px;letter-spacing:-1px;text-shadow:0 1px 0 rgba(255,255,255,0.46) !important}div.heading-bar .heading-one img{margin-right:10px}.sub-nav{background-image:-o-linear-gradient(-89deg, #f5f5f5 0, #e5e5e5 100%);background-image:-moz-linear-gradient(-89deg, #f5f5f5 0, #e5e5e5 100%);background-image:-ms-linear-gradient(-89deg, #f5f5f5 0, #e5e5e5 100%);background-image:linear-gradient(-179deg, #f5f5f5 0, #e5e5e5 100%);border:1px solid #c2c2c2;border-left:none;border-right:none;-moz-box-shadow:inset 0 1px 0 0 #fff;box-shadow:inset 0 1px 0 0 #fff;height:25px;position:fixed;top:87px;left:255px;right:0}.sub-nav ul{position:absolute;top:-1px;left:0;right:0;padding:0;text-align:center}.sub-nav ul li{display:inline-block;margin-left:-6px;background-image:-o-linear-gradient(-89deg, #f5f5f5 0, #e5e5e5 100%);background-image:-moz-linear-gradient(-89deg, #f5f5f5 0, #e5e5e5 100%);background-image:-ms-linear-gradient(-89deg, #f5f5f5 0, #e5e5e5 100%);background-image:linear-gradient(-179deg, #f5f5f5 0, #e5e5e5 100%);border:1px solid #c2c2c2;-moz-box-shadow:inset 1px 1px 0 0 #fff;box-shadow:inset 1px 1px 0 0 #fff}.sub-nav ul li.selected{z-index:99;background-image:-o-linear-gradient(-89deg, #e1e1e1 0, #e6e6e6 100%);background-image:-moz-linear-gradient(-89deg, #e1e1e1 0, #e6e6e6 100%);background-image:-ms-linear-gradient(-89deg, #e1e1e1 0, #e6e6e6 100%);background-image:linear-gradient(-179deg, #e1e1e1 0, #e6e6e6 100%);border:1px solid #a8a8a8;-moz-box-shadow:inset -1px 0 0 0 #d3d3d3,inset 1px 0 0 0 #d4d4d4,inset 0 1px 0 0 #dfdfdf,inset 0 -1px 0 0 #e5e5e5;box-shadow:inset -1px 0 0 0 #d3d3d3,inset 1px 0 0 0 #d4d4d4,inset 0 1px 0 0 #dfdfdf,inset 0 -1px 0 0 #e5e5e5}.sub-nav ul li a{display:inline-block;padding:4px 40px;font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-weight:bold;font-size:12px;color:#686868;line-height:15px;text-shadow:1px 1px 0 rgba(255,255,255,0.6)}.sub-nav ul li a:hover{text-decoration:none !important}.sub-nav-content-container{padding-top:20px}.btn{border-radius:4px;border:1px solid #979797;padding-top:0;padding-bottom:0;height:21px;font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;color:#000;font-size:13px;line-height:19px;display:inline-block}.btn:hover{color:#000}.btn.btn-default{background-image:-o-linear-gradient(0deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);background-image:-moz-linear-gradient(0deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);background-image:-ms-linear-gradient(0deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);background-image:linear-gradient(0deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);-moz-box-shadow:0 1px 0 0 rgba(0,0,0,0.14),inset 0 0 0 1px rgba(255,255,255,0.42),inset 0 1px 0 0 rgba(255,255,255,0.53);box-shadow:0 1px 1px 0 rgba(0,0,0,0.14),inset 0 0 0 1px rgba(255,255,255,0.42),inset 0 1px 0 0 rgba(255,255,255,0.53)}.btn.btn-default:active{background-color:#ededed;background-image:none;background-image:-o-linear-gradient(0deg, #a1c5eb 0, #649fec 46%, #4191ec 53%, #94c4eb 100%);background-image:-moz-linear-gradient(0deg, #a1c5eb 0, #649fec 46%, #4191ec 53%, #94c4eb 100%);background-image:-ms-linear-gradient(0deg, #a1c5eb 0, #649fec 46%, #4191ec 53%, #94c4eb 100%);background-image:linear-gradient(0deg, #a1c5eb 0, #649fec 46%, #4191ec 53%, #94c4eb 100%);border:1px solid #557bc8}.btn.btn-primary{border-top-color:#595b71;border-bottom-color:#515268;border-left-color:#56586f;border-right-color:#56586f;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #d3f7fd), color-stop(.5, #87c5fb), color-stop(.5, #a1d1f9), color-stop(1, #d4e9fc));background-image:-moz-linear-gradient(center bottom, #d3f7fd 0, #87c5fb 50%, #a1d1f9 50%, #d4e9fc 100%);-webkit-animation-name:blinking;-webkit-animation-timing-function:ease-in-out;-webkit-animation-iteration-count:infinite;-webkit-animation-duration:1s;-moz-animation-name:blinking;-moz-animation-timing-function:ease-in-out;-moz-animation-iteration-count:infinite;-moz-animation-duration:1s;animation-name:blinking;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-duration:1s}.btn.btn-primary:active{background-color:#ededed;background-image:none;background-image:-o-linear-gradient(0deg, #a1c5eb 0, #649fec 46%, #4191ec 53%, #94c4eb 100%);background-image:-moz-linear-gradient(0deg, #a1c5eb 0, #649fec 46%, #4191ec 53%, #94c4eb 100%);background-image:-ms-linear-gradient(0deg, #a1c5eb 0, #649fec 46%, #4191ec 53%, #94c4eb 100%);background-image:linear-gradient(0deg, #a1c5eb 0, #649fec 46%, #4191ec 53%, #94c4eb 100%);border:1px solid #557bc8}.btn.disabled{background-image:-o-linear-gradient(0deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);background-image:-moz-linear-gradient(0deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);background-image:-ms-linear-gradient(0deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);background-image:linear-gradient(0deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);border:1px solid #979797;-moz-box-shadow:0 1px 0 0 rgba(0,0,0,0.14),inset 0 0 0 1px rgba(255,255,255,0.42),inset 0 1px 0 0 rgba(255,255,255,0.53);box-shadow:0 1px 0 0 rgba(0,0,0,0.14),inset 0 0 0 1px rgba(255,255,255,0.42),inset 0 1px 0 0 rgba(255,255,255,0.53)}.btn.btn-capsule{border-radius:40px;height:16px;background-image:-o-linear-gradient(-89deg, #fbfbfb 0, #dfdfdf 100%);background-image:-moz-linear-gradient(-89deg, #fbfbfb 0, #dfdfdf 100%);background-image:-ms-linear-gradient(-89deg, #fbfbfb 0, #dfdfdf 100%);background-image:linear-gradient(-179deg, #fbfbfb 0, #dfdfdf 100%);border:1px solid #979797;-moz-box-shadow:0 1px 0 0 rgba(0,0,0,0.14);box-shadow:0 1px 0 0 rgba(0,0,0,0.14);font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:11px;color:#000;line-height:14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.btn.btn-capsule:active{background-color:#dadada;background-image:none}.btn.btn-sm{border-radius:3px;background-image:-o-linear-gradient(89deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);background-image:-moz-linear-gradient(89deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);background-image:-ms-linear-gradient(89deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);background-image:linear-gradient(-1deg, #ededed 0, #f3f3f3 50%, #fafafa 50%, #fff 100%);border:1px solid #979797;-moz-box-shadow:0 1px 0 0 rgba(0,0,0,0.14),inset 0 0 0 1px rgba(255,255,255,0.42),inset 0 1px 0 0 rgba(255,255,255,0.53);box-shadow:0 1px 0 0 rgba(0,0,0,0.14),inset 0 0 0 1px rgba(255,255,255,0.42),inset 0 1px 0 0 rgba(255,255,255,0.53);font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:11px;color:#000;line-height:13px;display:inline-block;height:16px}.btn.btn-sm:active{background-color:#dadada;background-image:none}.btn.btn-lg{height:31px;line-height:31px;font-size:16px !important;padding-top:0;padding-bottom:0}.btn.btn-on-grey{background-image:-o-linear-gradient(-89deg, #fdfdfd 0, #ececec 100%);background-image:-moz-linear-gradient(-89deg, #fdfdfd 0, #ececec 100%);background-image:-ms-linear-gradient(-89deg, #fdfdfd 0, #ececec 100%);background-image:linear-gradient(-179deg, #fdfdfd 0, #ececec 100%);border:1px solid #8e8e8e;font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:13px;min-width:96px}.btn.btn-on-grey:active{background-image:-o-linear-gradient(-89deg, #e6e6e6 0, #e3e3e3 100%);background-image:-moz-linear-gradient(-89deg, #e6e6e6 0, #e3e3e3 100%);background-image:-ms-linear-gradient(-89deg, #e6e6e6 0, #e3e3e3 100%);background-image:linear-gradient(-179deg, #e6e6e6 0, #e3e3e3 100%);border:1px solid #8e8e8e;-moz-box-shadow:inset 0 1px 5px 0 rgba(0,0,0,0.4);box-shadow:inset 0 1px 5px 0 rgba(0,0,0,0.4)}.btn.btn-modern{border-radius:4px;background-color:#fff !important;background-image:none !important;-moz-box-shadow:0 1px 1px 0 rgba(255,254,255,0.59),inset 0 1px 2px 0 #fff;box-shadow:0 1px 1px 0 rgba(255,254,255,0.59),inset 0 1px 2px 0 #fff;font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:12px;list-style:12px;color:#333}.btn.btn-modern:active,.btn.btn-modern.btn-sm:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.btn-modern span[class^=\"entypo-\"],.btn.btn-modern span[class*=\" entypo-\"]{font-size:14px}.btn.btn-help{background-image:-o-linear-gradient(-89deg, #fff 0, #f3f3f3 50%, #ececec 50%, #f1f1f1 100%);background-image:-moz-linear-gradient(-89deg, #fff 0, #f3f3f3 50%, #ececec 50%, #f1f1f1 100%);background-image:-ms-linear-gradient(-89deg, #fff 0, #f3f3f3 50%, #ececec 50%, #f1f1f1 100%);background-image:linear-gradient(-179deg, #fff 0, #f3f3f3 50%, #ececec 50%, #f1f1f1 100%);border:1px solid #8d8d8d;border-radius:30px;height:21px;width:21px;display:inline-block;color:#434343;padding:0}.panel{background:rgba(239,239,239,0.99);border:1px solid rgba(0,0,0,0.49);-moz-box-shadow:0 3px 5px 0 rgba(0,0,0,0.45);box-shadow:0 3px 5px 0 rgba(0,0,0,0.45)}.panel .panel-body{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:13px;color:#000;line-height:16px}.panel .panel-heading{background-image:-o-linear-gradient(-89deg, #ededed 0, #d8d8d8 100%);background-image:-moz-linear-gradient(-89deg, #ededed 0, #d8d8d8 100%);background-image:-ms-linear-gradient(-89deg, #ededed 0, #d8d8d8 100%);background-image:linear-gradient(-179deg, #ededed 0, #d8d8d8 100%);-moz-box-shadow:0 1px 0 0 #bfbfbf;box-shadow:0 1px 0 0 #bfbfbf}.panel .panel-heading .panel-title{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:13px;color:#2f2f2f;line-height:16px;text-shadow:0 1px 0 rgba(254,255,255,0.49)}div.table-cell{height:150px;border:1px solid rgba(0,0,0,0.17);width:100%;overflow:scroll;margin-bottom:1em}table.table-maverix{width:100%}table.table-maverix tr.selected{color:#fff;background-color:#3874d7}table.table-maverix tr.selected select{background-color:#3874d7}table.table-maverix tr.selected .info-sub{color:#fff !important}table.table-maverix td{padding-top:2px !important;padding-bottom:2px !important;padding:2px}table.table-maverix p.info-main{font-weight:bold;margin:0;line-height:13px}table.table-maverix p.info-sub{font-size:11px;color:#787878;line-height:13px;margin:0}.table-maverix-small{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:11px;color:#000;line-height:13px;letter-spacing:0}.table-maverix-small td{border:none !important}.table-maverix-small td.td-icon{font-size:15px;width:20px}.table-maverix-small select.on-white-select{background-color:#fff;-webkit-appearance:none;-moz-appearance:none;width:150px;border:none}.table-maverix-small span.entypo-arrow-combo{position:relative;left:-10px}.table-maverix-large td{border-top:none !important;border-bottom:1px solid #e6e6e6 !important}.table-maverix-large td.td-icon{width:1em;font-size:20px}.table-maverix-large td div.placeholder{min-height:40px}.ui-switch{box-sizing:border-box;position:relative;width:40px;height:24px;background-color:#ddd;border-radius:12px;transition:background-color .3s;display:inline-block;top:7px}.ui-switch .toggler{position:absolute;top:1px;left:1px;width:22px;height:22px;background-color:#fff;border-radius:11px;box-shadow:0 2px 5px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.2);transition:left .3s}.ui-switch.on{background-color:#77ce65}.ui-switch.on .toggler{left:17px}.ui-label{font-family:Helvetica Neue,Helvetica,Arial;font-weight:bold;font-size:13px;color:#4a4a4a;line-height:16px;text-shadow:0 1px 0 rgba(255,255,255,0.8);display:inline-block;padding:4px}a.dropdown-toggle{color:#616161 !important}a.dropdown-toggle:hover{color:#616161 !important}#top-switch{position:fixed;top:30px;right:50px;padding-top:0}.osx-switch{padding-left:30px;padding-top:20px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.osx-switch .osx-switch-label{font-family:Helvetica Neue,Helvetica,Arial;font-weight:bold;font-size:13px;color:#4a4a4a;line-height:16px;text-shadow:0 1px 0 rgba(255,255,255,0.8)}.osx-switch .osx-switch-label-active{position:relative;left:-30px}.osx-switch .osx-switch-label-inactive{position:relative;right:-55px}.osx-switch label{position:relative;top:-20px;width:70px;height:22px;margin:0;padding:0;background-image:-o-linear-gradient(-89deg, #818181 0, #b8b8b8 100%);background-image:-moz-linear-gradient(-89deg, #818181 0, #b8b8b8 100%);background-image:-ms-linear-gradient(-89deg, #818181 0, #b8b8b8 100%);background-image:linear-gradient(-179deg, #818181 0, #b8b8b8 100%);-moz-box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.5);box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.2);border-top:1px solid #5c5c5c;border-bottom:1px solid #989898}.osx-switch label a{margin-top:-1px;height:22px;box-shadow:none;background-image:-o-linear-gradient(-89deg, #fdfdfd 0, #ececec 100%);background-image:-moz-linear-gradient(-89deg, #fdfdfd 0, #ececec 100%);background-image:-ms-linear-gradient(-89deg, #fdfdfd 0, #ececec 100%);background-image:linear-gradient(-179deg, #fdfdfd 0, #ececec 100%);border:1px solid #7d7d7d}h1{font-family:Helvetica Neue,Helvetica,Arial;font-weight:100}h2{font-family:Helvetica Neue,Helvetica,Arial;font-size:18px;font-weight:normal;color:#62676c;line-height:18px;margin-bottom:5px;margin-top:20px}h2:first-child{margin-top:0}@media screen and (-webkit-min-device-pixel-ratio:0){h2{font-weight:300}}h3{font-family:Helvetica Neue,Helvetica,Arial;font-weight:bold;font-size:14px;color:#4a4a4a;line-height:17px;text-shadow:0 1px 0 rgba(255,255,255,0.8);margin-bottom:0}progress[value]{width:100%}input[type=text],input[type=password],input[type=email]{border-radius:0 !important;padding:0 3px !important;font-size:13px !important;line-height:13px !important;color:#39090a !important;height:22px !important;background:#fff;border:1px solid #9b9b9b !important;border-top:1px solid #8e8e8e !important;border-bottom:1px solid #afafaf !important;-moz-box-shadow:inset 0 1px 3px 0 rgba(0,0,0,0.2) !important;box-shadow:inset 0 1px 3px 0 rgba(0,0,0,0.2) !important}input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder{padding-top:1px;color:#777}input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=email]:-moz-placeholder{padding-top:1px;color:#777}input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=email]::-moz-placeholder{padding-top:1px;color:#777}input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder{padding-top:1px;color:#777}input[type=text]:focus,input[type=password]:focus,input[type=email]:focus{outline:none !important;border:1px solid #6a9ecf !important;-moz-box-shadow:0 0 2px 1px #71a5d6,inset 0 0 2px 1px #71a5d6 !important;box-shadow:0 0 2px 1px #71a5d6,inset 0 0 2px 1px #71a5d6 !important;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}select.select-large{font-size:16px}textarea{padding:3px !important;font-size:13px !important;color:#39090a !important;border:1px solid #9b9b9b !important;border-top:1px solid #8e8e8e !important;border-bottom:1px solid #afafaf !important;-moz-box-shadow:inset 0 1px 3px 0 rgba(0,0,0,0.2) !important;box-shadow:inset 0 1px 3px 0 rgba(0,0,0,0.2) !important}textarea:focus{outline:none !important;border:1px solid #6a9ecf !important;-moz-box-shadow:0 0 2px 1px #71a5d6,inset 0 0 2px 1px #71a5d6 !important;box-shadow:0 0 2px 1px #71a5d6,inset 0 0 2px 1px #71a5d6 !important;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}input[type=checkbox]{font-size:20px;line-height:20px;position:relative;top:-3px}input[type=search]{-webkit-appearance:searchfield;font-size:32px}input.mvx-search{display:inline-block !important;border-radius:13px !important;border:1px solid #fff;background:#fff;-moz-box-shadow:inset 0 -1px 0 0 #c6c6c6,inset 0 1px 0 0 #a6a6a6,inset 0 1px 3px 0 rgba(0,0,0,0.5);box-shadow:inset 0 -1px 0 0 #c6c6c6,inset 0 1px 0 0 #a6a6a6,inset 0 1px 3px 0 rgba(0,0,0,0.5);padding-left:26px !important;padding-right:22px !important;height:24px !important}span.search-input span{color:#777;position:relative;left:12px;font-size:16px}span.search-input input{margin-left:-12px}ul.dropdown-menu{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:13px;color:#000;line-height:16px;border-radius:5px !important}ul.dropdown-menu a{line-height:18px;padding:0 20px;border-top:1px solid rgba(255,255,255,0);border-bottom:1px solid rgba(255,255,255,0)}ul.dropdown-menu li.disabled a:hover{border-top:1px solid rgba(255,255,255,0);border-bottom:1px solid rgba(255,255,255,0)}ul.dropdown-menu a:hover{color:#fff;background-image:-o-linear-gradient(-89deg, #6288f8 0, #2261f6 100%);background-image:-moz-linear-gradient(-89deg, #6288f8 0, #2261f6 100%);background-image:-ms-linear-gradient(-89deg, #6288f8 0, #2261f6 100%);background-image:linear-gradient(-179deg, #6288f8 0, #2261f6 100%);border-top:1px solid #587fee;border-bottom:1px solid #0d52eb}span.on-badge{display:inline-block;border-radius:5px;width:10px;height:10px;background-image:-o-linear-gradient(-89deg, #a0d071 50%, #e5fc97 100%);background-image:-moz-linear-gradient(-89deg, #a0d071 50%, #e5fc97 100%);background-image:-ms-linear-gradient(-89deg, #a0d071 50%, #e5fc97 100%);background-image:linear-gradient(-179deg, #a0d071 50%, #e5fc97 100%);-moz-box-shadow:0 1px 2px 0 rgba(0,0,0,0.4),inset 0 1px 1px 0 #426844,inset 0 3px 0 0 rgba(255,255,255,0.5);box-shadow:0 1px 2px 0 rgba(0,0,0,0.4),inset 0 1px 1px 0 #426844,inset 0 3px 0 0 rgba(255,255,255,0.5)}span.off-badge{display:inline-block;border-radius:5px;width:10px;height:10px;background-image:-o-linear-gradient(-89deg, #ff2402 0, #d61b00 49%, #fec7c6 89%);background-image:-moz-linear-gradient(-89deg, #ff2402 0, #d61b00 49%, #fec7c6 89%);background-image:-ms-linear-gradient(-89deg, #ff2402 0, #d61b00 49%, #fec7c6 89%);background-image:linear-gradient(-179deg, #ff2402 0, #d61b00 49%, #fec7c6 89%);-moz-box-shadow:0 1px 2px 0 rgba(0,0,0,0.4),inset 0 0 2px 0 #785757,inset 0 -1px 1px 0 #6a0701;box-shadow:0 1px 2px 0 rgba(0,0,0,0.4),inset 0 0 2px 0 #785757,inset 0 -1px 1px 0 #6a0701}.nfo{font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-size:11px;color:#808080;line-height:13px}table.table-content-block{width:100%}table.table-content-block td{vertical-align:top;padding:0 2px;padding-bottom:5px}table.table-content-block td.td-label{width:120px;text-align:right;padding-right:5px}table.table-content-block td.td-actions{text-align:right}span.entypo-right.maverix-circle{display:inline-block;background-color:#474747;color:#fff;border-radius:50px;font-size:8px;line-height:10px;width:10px;height:10px;text-align:center;position:relative;top:-1px}.indent{margin-left:20px}ul.list-unstyled li{line-height:22px}ul.list-unstyled select{position:relative;top:-2px}ul.list-unstyled input[type=checkbox]{position:relative;top:0}.grey-bg{background-color:#e8e8e8}.grey-bg .btn.btn-on-grey{margin:0 4px}.toolbar-button{border-radius:3px;height:22px;display:inline-block;padding:3px 12px;background-image:-o-linear-gradient(-89deg, #f5f5f5 0, #b3b3b3 100%);background-image:-moz-linear-gradient(-89deg, #f5f5f5 0, #b3b3b3 100%);background-image:-ms-linear-gradient(-89deg, #f5f5f5 0, #b3b3b3 100%);background-image:linear-gradient(-179deg, #f5f5f5 0, #b3b3b3 100%);border:1px solid #7e7e7e;-moz-box-shadow:0 1px 0 0 rgba(255,255,255,0.4);box-shadow:0 1px 0 0 rgba(255,255,255,0.4);font-family:Lucida Grande,Lucida Sans,Arial,sans-serif;font-weight:normal;color:#404040;line-height:14px;text-shadow:0 1px 0 rgba(255,255,255,0.4)}.toolbar-button:hover{text-decoration:none;color:#404040}.toolbar-button:active{color:#000;border-radius:3px;background-image:-o-linear-gradient(-89deg, #b3b3b3 0, #e8e8e8 100%);background-image:-moz-linear-gradient(-89deg, #b3b3b3 0, #e8e8e8 100%);background-image:-ms-linear-gradient(-89deg, #b3b3b3 0, #e8e8e8 100%);background-image:linear-gradient(-179deg, #b3b3b3 0, #e8e8e8 100%);border:1px solid #7e7e7e;-moz-box-shadow:inset 0 1px 5px 0 rgba(0,0,0,0.4),0 1px 0 0 rgba(255,255,255,0.4);box-shadow:inset 0 1px 5px 0 rgba(0,0,0,0.4),0 1px 0 0 rgba(255,255,255,0.4)}.toolbar{background-image:url(\"../img/grey-bg.png\");height:35px;padding:6px 10px;border-top:1px solid #5e5e5e;-moz-box-shadow:inset 0 1px 0 0 #e1e1e1;box-shadow:inset 0 1px 0 0 #e1e1e1}.toolbar-off{background-image:url(\"../img/off-grey-bg.png\");height:34px;padding:6px 10px;border-top-color:#9b9b9b;-moz-box-shadow:inset 0 1px 0 0 #f2f2f2;box-shadow:inset 0 1px 0 0 #f2f2f2}.modal-backdrop{background-color:#000}.modal-backdrop.in{filter:alpha(opacity=70);opacity:.7}.modal-header{background-color:#f5f7f9;padding:20px;border-bottom:1px solid #ada6ac;border-top-left-radius:4px;border-top-right-radius:4px}.modal-header .modal-title{font-family:Helvetica,arial,verdana,sans-serif;font-weight:bold;font-size:26px;color:#3c3c3c;line-height:31px}.modal-header .modal-subtitle{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:13px;color:#999;line-height:15px}.modal-footer{background-color:#e8e8e8;border-bottom-left-radius:4px;border-bottom-right-radius:4px;height:45px;padding:10px;border-top:1px solid #a8a8a8}@-webkit-keyframes blinking{from{-webkit-box-shadow:inset 0 19px 0 rgba(0,115,215,0),inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.09)}50%{-webkit-box-shadow:inset 0 19px 0 rgba(0,115,215,0.2),inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.09)}to{-webkit-box-shadow:inset 0 19px 0 rgba(0,115,215,0),inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.09)}}@-moz-keyframes blinking{from{-moz-box-shadow:inset 0 19px 0 rgba(0,115,215,0),inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.09)}50%{-moz-box-shadow:inset 0 19px 0 rgba(0,115,215,0.2),inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.09)}to{-moz-box-shadow:inset 0 19px 0 rgba(0,115,215,0),inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.09)}}@keyframes blinking{from{box-shadow:inset 0 19px 0 rgba(0,115,215,0),inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.09)}50%{box-shadow:inset 0 19px 0 rgba(0,115,215,0.2),inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.09)}to{box-shadow:inset 0 19px 0 rgba(0,115,215,0),inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.09)}}.content-block{margin-bottom:30px}ul.entypo-ul li{display:inline-block;font-size:20px !important;line-height:28px !important}.emoji-font{font-family:\"Apple Color Emoji\";font-size:20px !important;line-height:28px !important}"
  },
  {
    "path": "maverix-theme/css/maverix.less",
    "content": "@import url(http://weloveiconfonts.com/api/?family=entypo);\n\n*:focus { outline:none; }\n\nbody.blur {\n  .sidebar {\n    /* Rectangle 15: */\n    background-image: -o-linear-gradient(-89deg, #F7F7F7 0%, #EBEBEB 100%);\n    background-image: -moz-linear-gradient(-89deg, #F7F7F7 0%, #EBEBEB 100%);\n    background-image: -ms-linear-gradient(-89deg, #F7F7F7 0%, #EBEBEB 100%);\n    background-image: linear-gradient(-179deg, #F7F7F7 0%, #EBEBEB 100%);\n  }\n\n  ul.nav li.selected {\n    /* Rectangle 16: */\n    background-image: -o-linear-gradient(-89deg, #BDC7DD 0%, #A6B2CD 100%, #9DA9C6 100%);\n    background-image: -moz-linear-gradient(-89deg, #BDC7DD 0%, #A6B2CD 100%, #9DA9C6 100%);\n    background-image: -ms-linear-gradient(-89deg, #BDC7DD 0%, #A6B2CD 100%, #9DA9C6 100%);\n    background-image: linear-gradient(-179deg, #BDC7DD 0%, #A6B2CD 100%, #9DA9C6 100%);\n    -moz-box-shadow: inset 0px -1px 0px 0px #93A0BA, inset 0px 1px 0px 0px #BBC5D7, inset 0px 2px 0px 0px #C3CCE0;\n    box-shadow: inset 0px -1px 0px 0px #93A0BA, inset 0px 1px 0px 0px #BBC5D7, inset 0px 2px 0px 0px #C3CCE0;\n\n    span.sidebar-badge {\n      color: #acb6d0 !important;\n    }\n  }\n\n  table.table-maverix {\n\n    tr.selected {\n      color: #000000;\n      background-color: #cbcbcb !important;\n\n      select.on-white-select {\n        background-color: #cbcbcb;\n      }\n\n      .info-sub {\n        color: #787878 !important;\n      }\n\n    }\n\n  }\n\n}\n\n/* entypo */\n[class*=\"entypo-\"]:before {\n  font-family: 'entypo', sans-serif;\n}\n\nbody {\n  font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n}\n\np {\n  margin-bottom: 20px;\n  margin-top: 5px;\n}\n\n.sidebar {\n  position: absolute;\n  overflow: scroll;\n  top: 0;\n  bottom: 0;\n  width: 254px;\n  z-index: 2;\n\n  /* sidebar: */\n  background: #E5E9EE;\n  -moz-box-shadow: 1px 0px 0px 0px rgba(0, 0, 0, 0.24), inset -1px 0px 0px 0px rgba(254, 255, 255, 0.27);\n  box-shadow: 1px 0px 0px 0px rgba(0, 0, 0, 0.24), inset -1px 0px 0px 0px rgba(254, 255, 255, 0.27);\n\n  /* Rectangle 12: */\n  background-image: -o-linear-gradient(-89deg, #E8ECF1 0%, #D1D8E0 100%);\n  background-image: -moz-linear-gradient(-89deg, #E8ECF1 0%, #D1D8E0 100%);\n  background-image: -ms-linear-gradient(-89deg, #E8ECF1 0%, #D1D8E0 100%);\n  background-image: linear-gradient(-179deg, #E8ECF1 0%, #D1D8E0 100%);\n\n  div.sidebar-navicontainer {\n    margin-bottom: 5px;\n  }\n  div.sidebar-headbox {\n\n    &:hover {\n      .sidebar-toggle {\n        opacity: 1;\n\n        -webkit-touch-callout: none;\n        -webkit-user-select: none;\n        -khtml-user-select: none;\n        -moz-user-select: none;\n        -ms-user-select: none;\n        user-select: none;\n      }\n    }\n\n    .sidebar-header {\n      font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n      font-weight: bold;\n      font-size: 11px;\n      color: #707E8C;\n      line-height: 13px;\n      /* FAVORITES: */\n      text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.46);\n      text-transform: uppercase;\n\n      display: inline-block;\n      padding: 5px 9px;\n    }\n\n    .sidebar-toggle {\n      opacity: 0;\n      cursor: pointer;\n      font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n      font-weight: bold;\n      font-size: 11px;\n      color: #98A5B2;\n      line-height: 13px;\n      text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.60);\n\n      float: right;\n      margin-top: 5px;\n      padding-right: 10px;\n\n      &:hover {\n        text-decoration: none;\n      }\n\n      &:active {\n        color: #5069ec;\n      }\n    }\n  }\n\n  ul.nav {\n\n    li {\n      font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n      font-size: 13px;\n      line-height: 13px;\n      color: #000000;\n\n      padding: 4px 28px;\n      padding-top: 3px;\n      padding-right: 10px;\n      text-shadow: 0px 1px 0px #FFFFFF;\n      margin-bottom: 1px;\n\n      &.selected {\n        color: #FFFFFF;\n        text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.50);\n        font-weight: bold;\n\n        /* Rectangle 17: */\n        background-image: -o-linear-gradient(-89deg, #69B1E5 0%, #3485D0 100%);\n        background-image: -moz-linear-gradient(-89deg, #69B1E5 0%, #3485D0 100%);\n        background-image: -ms-linear-gradient(-89deg, #69B1E5 0%, #3485D0 100%);\n        background-image: linear-gradient(-179deg, #69B1E5 0%, #3485D0 100%);\n        -moz-box-shadow: 0px -1px 0px 0px #5CA4DF, inset 0px -1px 0px 0px #327AC2, inset 0px 1px 0px 0px #71B9EA;\n        box-shadow: 0px -1px 0px 0px #5CA4DF, inset 0px -1px 0px 0px #327AC2, inset 0px 1px 0px 0px #71B9EA;\n\n        span {\n          color: #FFFFFF;\n          text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.10);\n        }\n\n        .sidebar-badge {\n          background-color: #ffffff;\n          color: #4b8fd5 !important;\n        }\n\n        a {\n          color: #ffffff !important;\n          &:focus{\n              background: none !important;\n          }\n        }\n      }\n\n      a {\n        text-decoration: none;\n        color: #000000 !important;\n        padding: 0;\n\n        &:hover {\n          background: none !important;\n        }\n      }\n\n      span {\n        color: #818896;\n        font-size: 18px;\n        text-shadow: 0px 1px 0px #FFFFFF;\n        width: 20px;\n        display: inline-block;\n        text-align: center;\n\n      }\n\n      .sidebar-badge {\n        float: right;\n        background-color: #98A5B3;\n        border-radius: 50px;\n        font-size: 11px !important;\n        line-height: 15px;\n        color: #ffffff !important;\n        font-weight: bold;\n        text-shadow: none;\n      }\n\n    }\n  }\n\n}\n\n.content {\n  position: absolute;\n  left: 254px;\n  right: 0;\n  top: 88px;\n  bottom: 0;\n  overflow-y: scroll;\n\n  .container-fluid {\n    padding: 20px;\n  }\n\n  .container-maverix {\n    width: 680px;\n    margin: 0 auto;\n\n    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n    font-size: 13px;\n    color: #000000;\n    line-height: 16px;\n    /* Status:: */\n    padding-top: 25px;\n  }\n\n}\n\ndiv.heading-bar {\n\n  .user-bar {\n    position: absolute;\n    top: 0;\n    right: 10px;\n    font-size: 11px;\n    line-height: 30px;\n  }\n\n  position: absolute;\n  top: 0;\n  left: 255px;\n  right: 0;\n  z-index: 2;\n  min-width: 680px;\n\n  /* Rectangle 142: */\n  background-image: -o-linear-gradient(-89deg, #EFEEF1 0%, #D5D9DC 100%);\n  background-image: -moz-linear-gradient(-89deg, #EFEEF1 0%, #D5D9DC 100%);\n  background-image: -ms-linear-gradient(-89deg, #EFEEF1 0%, #D5D9DC 100%);\n  background-image: linear-gradient(-179deg, #EFEEF1 0%, #D5D9DC 100%);\n  border-bottom: 1px solid #C2C2C2;\n\n  height: 88px;\n  padding: 20px;\n\n  .heading-one {\n    display: table-cell;\n    vertical-align: middle;\n\n    font-family: Helvetica Neue, Helvetica, Arial;\n    font-weight: bold;\n    font-size: 24px;\n    color: #3A3D40;\n    line-height: 29px;\n    letter-spacing: -1px;\n\n    /* Dateifreigabe: */\n    text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.46) !important;\n\n    img {\n      margin-right: 10px;\n    }\n  }\n\n}\n\n.sub-nav {\n  background-image: -o-linear-gradient(-89deg, #F5F5F5 0%, #E5E5E5 100%);\n  background-image: -moz-linear-gradient(-89deg, #F5F5F5 0%, #E5E5E5 100%);\n  background-image: -ms-linear-gradient(-89deg, #F5F5F5 0%, #E5E5E5 100%);\n  background-image: linear-gradient(-179deg, #F5F5F5 0%, #E5E5E5 100%);\n  border: 1px solid #C2C2C2;\n  border-left: none;\n  border-right: none;\n  -moz-box-shadow: inset 0px 1px 0px 0px #FFFFFF;\n  box-shadow: inset 0px 1px 0px 0px #FFFFFF;\n\n  height: 25px;\n\n  position: fixed;\n  top: 87px;\n  left: 255px;\n  right: 0;\n\n  ul {\n    position: absolute;\n    top: -1px;\n    left: 0px;\n    right: 0px;\n\n    padding: 0;\n    text-align: center;\n    li {\n      display: inline-block;\n      margin-left: -6px;\n\n      /* Rectangle 14: */\n      background-image: -o-linear-gradient(-89deg, #F5F5F5 0%, #E5E5E5 100%);\n      background-image: -moz-linear-gradient(-89deg, #F5F5F5 0%, #E5E5E5 100%);\n      background-image: -ms-linear-gradient(-89deg, #F5F5F5 0%, #E5E5E5 100%);\n      background-image: linear-gradient(-179deg, #F5F5F5 0%, #E5E5E5 100%);\n      border: 1px solid #C2C2C2;\n      -moz-box-shadow: inset 1px 1px 0px 0px #FFFFFF;\n      box-shadow: inset 1px 1px 0px 0px #FFFFFF;\n\n      &.selected {\n        z-index: 99;\n        background-image: -o-linear-gradient(-89deg, #E1E1E1 0%, #E6E6E6 100%);\n        background-image: -moz-linear-gradient(-89deg, #E1E1E1 0%, #E6E6E6 100%);\n        background-image: -ms-linear-gradient(-89deg, #E1E1E1 0%, #E6E6E6 100%);\n        background-image: linear-gradient(-179deg, #E1E1E1 0%, #E6E6E6 100%);\n        border: 1px solid #A8A8A8;\n        -moz-box-shadow: inset -1px 0px 0px 0px #D3D3D3, inset 1px 0px 0px 0px #D4D4D4, inset 0px 1px 0px 0px #DFDFDF, inset 0px -1px 0px 0px #E5E5E5;\n        box-shadow: inset -1px 0px 0px 0px #D3D3D3, inset 1px 0px 0px 0px #D4D4D4, inset 0px 1px 0px 0px #DFDFDF, inset 0px -1px 0px 0px #E5E5E5;\n      }\n\n      a {\n        display: inline-block;\n        padding: 4px 40px;\n        font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n        font-weight: bold;\n        font-size: 12px;\n        color: #686868;\n        line-height: 15px;\n        text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.60);\n\n        &:hover {\n          text-decoration: none !important;\n        }\n      }\n\n    }\n  }\n}\n\n.sub-nav-content-container {\n  padding-top: 20px;\n}\n\n// Buttons\n.btn {\n  border-radius: 4px;\n  border: 1px solid #979797;\n  padding-top: 0px;\n  padding-bottom: 0px;\n  height: 21px;\n\n  font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n  color: #000000;\n  font-size: 13px;\n  line-height: 19px;\n\n  display: inline-block;\n\n  &:hover {\n    color: #000000;\n  }\n\n  &.btn-default {\n    background-image: -o-linear-gradient(0deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    background-image: -moz-linear-gradient(0deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    background-image: -ms-linear-gradient(0deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    background-image: linear-gradient(0deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n\n    -moz-box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.14), inset 0px 0px 0px 1px rgba(255, 255, 255, 0.42), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.53);\n    box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.14), inset 0px 0px 0px 1px rgba(255, 255, 255, 0.42), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.53);\n\n    &:active {\n      background-color: #EDEDED;\n      background-image: none;\n\n      /* Rectangle 20: */\n      background-image: -o-linear-gradient(0deg, #A1C5EB 0%, #649FEC 46%, #4191EC 53%, #94C4EB 100%);\n      background-image: -moz-linear-gradient(0deg, #A1C5EB 0%, #649FEC 46%, #4191EC 53%, #94C4EB 100%);\n      background-image: -ms-linear-gradient(0deg, #A1C5EB 0%, #649FEC 46%, #4191EC 53%, #94C4EB 100%);\n      background-image: linear-gradient(0deg, #A1C5EB 0%, #649FEC 46%, #4191EC 53%, #94C4EB 100%);\n      border: 1px solid #557BC8;\n    }\n  }\n\n  &.btn-primary {\n    border-top-color: #595b71;\n    border-bottom-color: #515268;\n    border-left-color: #56586f;\n    border-right-color: #56586f;\n    background-image: -webkit-gradient(\n            linear,\n            left bottom,\n            left top,\n            color-stop(0, #D3F7FD),\n            color-stop(0.5, #87C5FB),\n            color-stop(0.5, #A1D1F9),\n            color-stop(1, #D4E9FC)\n    );\n    background-image: -moz-linear-gradient(\n            center bottom,\n            #D3F7FD 0%,\n            #87C5FB 50%,\n            #A1D1F9 50%,\n            #D4E9FC 100%\n    );\n    -webkit-animation-name: blinking;\n    -webkit-animation-timing-function: ease-in-out;\n    -webkit-animation-iteration-count: infinite;\n    -webkit-animation-duration: 1s;\n    -moz-animation-name: blinking;\n    -moz-animation-timing-function: ease-in-out;\n    -moz-animation-iteration-count: infinite;\n    -moz-animation-duration: 1s;\n    animation-name: blinking;\n    animation-timing-function: ease-in-out;\n    animation-iteration-count: infinite;\n    animation-duration: 1s;\n\n    &:active {\n      background-color: #EDEDED;\n      background-image: none;\n\n      /* Rectangle 20: */\n      background-image: -o-linear-gradient(0deg, #A1C5EB 0%, #649FEC 46%, #4191EC 53%, #94C4EB 100%);\n      background-image: -moz-linear-gradient(0deg, #A1C5EB 0%, #649FEC 46%, #4191EC 53%, #94C4EB 100%);\n      background-image: -ms-linear-gradient(0deg, #A1C5EB 0%, #649FEC 46%, #4191EC 53%, #94C4EB 100%);\n      background-image: linear-gradient(0deg, #A1C5EB 0%, #649FEC 46%, #4191EC 53%, #94C4EB 100%);\n      border: 1px solid #557BC8;\n    }\n  }\n\n  &.disabled {\n    background-image: -o-linear-gradient(0deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    background-image: -moz-linear-gradient(0deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    background-image: -ms-linear-gradient(0deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    background-image: linear-gradient(0deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    border: 1px solid #979797;\n    -moz-box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.14), inset 0px 0px 0px 1px rgba(255, 255, 255, 0.42), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.53);\n    box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.14), inset 0px 0px 0px 1px rgba(255, 255, 255, 0.42), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.53);\n  }\n\n  &.btn-capsule {\n    border-radius: 40px;\n    height: 16px;\n    background-image: -o-linear-gradient(-89deg, #FBFBFB 0%, #DFDFDF 100%);\n    background-image: -moz-linear-gradient(-89deg, #FBFBFB 0%, #DFDFDF 100%);\n    background-image: -ms-linear-gradient(-89deg, #FBFBFB 0%, #DFDFDF 100%);\n    background-image: linear-gradient(-179deg, #FBFBFB 0%, #DFDFDF 100%);\n    border: 1px solid #979797;\n    -moz-box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.14);\n    box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.14);\n\n    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n    font-size: 11px;\n    color: #000000;\n    line-height: 14px;\n    text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.50);\n\n    &:active {\n      background-color: #dadada;\n      background-image: none;\n    }\n\n  }\n\n  &.btn-sm {\n    border-radius: 3px;\n    background-image: -o-linear-gradient(89deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    background-image: -moz-linear-gradient(89deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    background-image: -ms-linear-gradient(89deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    background-image: linear-gradient(-1deg, #EDEDED 0%, #F3F3F3 50%, #FAFAFA 50%, #FFFFFF 100%);\n    border: 1px solid #979797;\n    -moz-box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.14), inset 0px 0px 0px 1px rgba(255, 255, 255, 0.42), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.53);\n    box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.14), inset 0px 0px 0px 1px rgba(255, 255, 255, 0.42), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.53);\n\n    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n    font-size: 11px;\n    color: #000000;\n    line-height: 13px;\n\n    display: inline-block;\n    height: 16px;\n\n    &:active {\n      background-color: #dadada;\n      background-image: none;\n    }\n  }\n\n  &.btn-lg {\n    height: 31px;\n    line-height: 31px;\n    font-size: 16px !important;\n    padding-top: 0;\n    padding-bottom: 0;\n  }\n\n  &.btn-on-grey {\n\n    /* Rectangle 21: */\n    background-image: -o-linear-gradient(-89deg, #FDFDFD 0%, #ECECEC 100%);\n    background-image: -moz-linear-gradient(-89deg, #FDFDFD 0%, #ECECEC 100%);\n    background-image: -ms-linear-gradient(-89deg, #FDFDFD 0%, #ECECEC 100%);\n    background-image: linear-gradient(-179deg, #FDFDFD 0%, #ECECEC 100%);\n    border: 1px solid #8E8E8E;\n\n    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n    font-size: 13px;\n\n    min-width: 96px;\n\n    &:active {\n\n      /* Rectangle 21: */\n      background-image: -o-linear-gradient(-89deg, #E6E6E6 0%, #E3E3E3 100%);\n      background-image: -moz-linear-gradient(-89deg, #E6E6E6 0%, #E3E3E3 100%);\n      background-image: -ms-linear-gradient(-89deg, #E6E6E6 0%, #E3E3E3 100%);\n      background-image: linear-gradient(-179deg, #E6E6E6 0%, #E3E3E3 100%);\n      border: 1px solid #8E8E8E;\n      -moz-box-shadow: inset 0px 1px 5px 0px rgba(0, 0, 0, 0.40);\n      box-shadow: inset 0px 1px 5px 0px rgba(0, 0, 0, 0.40);\n    }\n  }\n\n  &.btn-modern {\n    border-radius: 4px;\n    /* Rectangle 9: */\n    background-color: #ffffff !important;\n    background-image: none !important;\n    /* Sketch doesnt export gradient borders at this point */\n    -moz-box-shadow: 0px 1px 1px 0px rgba(255, 254, 255, 0.59), inset 0px 1px 2px 0px #FFFFFF;\n    box-shadow: 0px 1px 1px 0px rgba(255, 254, 255, 0.59), inset 0px 1px 2px 0px #FFFFFF;\n\n    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n    font-size: 12px;\n    list-style: 12px;\n    color: #333;\n\n    &:active, &.btn-sm: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    span[class^=\"entypo-\"], span[class*=\" entypo-\"] {\n      font-size: 14px;\n    }\n  }\n\n  &.btn-help {\n    /* Oval 7: */\n    background-image: -o-linear-gradient(-89deg, #FFFFFF 0%, #F3F3F3 50%, #ECECEC 50%, #F1F1F1 100%);\n    background-image: -moz-linear-gradient(-89deg, #FFFFFF 0%, #F3F3F3 50%, #ECECEC 50%, #F1F1F1 100%);\n    background-image: -ms-linear-gradient(-89deg, #FFFFFF 0%, #F3F3F3 50%, #ECECEC 50%, #F1F1F1 100%);\n    background-image: linear-gradient(-179deg, #FFFFFF 0%, #F3F3F3 50%, #ECECEC 50%, #F1F1F1 100%);\n    border: 1px solid #8D8D8D;\n    border-radius: 30px;\n    height: 21px;\n    width: 21px;\n    display: inline-block;\n    color: #434343;\n    padding: 0;\n  }\n}\n\n// Wells\n.panel {\n  /* bg: */\n  background: rgba(239, 239, 239, 0.99);\n  border: 1px solid rgba(0, 0, 0, 0.49);\n  -moz-box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.45);\n  box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.45);\n\n  .panel-body {\n    font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n    font-size: 13px;\n    color: #000000;\n    line-height: 16px;\n    /* Before noon:: */\n  }\n  .panel-heading {\n    /* Rectangle 130: */\n    background-image: -o-linear-gradient(-89deg, #EDEDED 0%, #D8D8D8 100%);\n    background-image: -moz-linear-gradient(-89deg, #EDEDED 0%, #D8D8D8 100%);\n    background-image: -ms-linear-gradient(-89deg, #EDEDED 0%, #D8D8D8 100%);\n    background-image: linear-gradient(-179deg, #EDEDED 0%, #D8D8D8 100%);\n    -moz-box-shadow: 0px 1px 0px 0px #BFBFBF;\n    box-shadow: 0px 1px 0px 0px #BFBFBF;\n\n    .panel-title {\n      font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n      font-size: 13px;\n      color: #2F2F2F;\n      line-height: 16px;\n      /* Window title: */\n      text-shadow: 0px 1px 0px rgba(254, 255, 255, 0.49);\n    }\n  }\n}\n\n// Tables\n\ndiv.table-cell {\n  height: 150px;\n  border: 1px solid rgba(0, 0, 0, 0.17);\n  width: 100%;\n  overflow: scroll;\n  margin-bottom: 1em;\n}\n\ntable.table-maverix {\n\n  width: 100%;\n\n  tr.selected {\n    color: #ffffff;\n    background-color: #3874D7;\n\n    select {\n      background-color: #3874D7;\n    }\n\n    .info-sub {\n      color: #ffffff !important;\n    }\n\n  }\n\n  td {\n    padding-top: 2px !important;\n    padding-bottom: 2px !important;\n    padding: 2px;\n  }\n\n  p.info-main {\n    font-weight: bold;\n    margin: 0;\n    line-height: 13px;\n  }\n\n  p.info-sub {\n    font-size: 11px;\n    color: #787878;\n    line-height: 13px;\n    margin: 0;\n    /* Connected: */\n  }\n}\n\n.table-maverix-small {\n  font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n  font-size: 11px;\n  color: #000000;\n  line-height: 13px;\n  letter-spacing: 0px;\n\n  td {\n    border: none !important;\n  }\n\n  td.td-icon {\n    font-size: 15px;\n    width: 20px;\n  }\n\n  select.on-white-select {\n    background-color: #ffffff;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    width: 150px;\n    border: none;\n  }\n  span.entypo-arrow-combo {\n    position: relative;\n    left: -10px;\n  }\n}\n\n.table-maverix-large {\n  td {\n    border-top: none !important;\n    border-bottom: 1px solid #e6e6e6 !important;\n\n    &.td-icon {\n      width: 1em;\n      font-size: 20px;\n    }\n\n    div.placeholder {\n      min-height: 40px;\n    }\n  }\n}\n\n// UI Switch inspired by https://github.com/nitrous-io/ember-sf-april/blob/master/package.nw/css/style.css\n\n.ui-switch {\n  box-sizing: border-box;\n  position: relative;\n  width: 40px;\n  height: 24px;\n  background-color: #ddd;\n  border-radius: 12px;\n  transition: background-color .3s;\n\n  // Quickfix not in line with span\n  display: inline-block;\n  top: 7px;\n}\n\n/*.ui-switch .disabled-background {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  width: 38px;\n  height: 22px;\n  background-color: #fff;\n  border-radius: 11px;\n  transition: top .3s, left .3s, width .3s, height .3s;\n}*/\n\n.ui-switch .toggler {\n  position: absolute;\n  top: 1px;\n  left: 1px;\n  width: 22px;\n  height: 22px;\n  background-color: #fff;\n  border-radius: 11px;\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.2);\n  transition: left .3s;\n}\n\n.ui-switch.on {\n  background-color: #77ce65;\n}\n\n/*.ui-switch.on .disabled-background {\n  top: 11px;\n  left: 19px;\n  width: 1px;\n  height: 1px;\n}*/\n\n.ui-switch.on .toggler {\n  left: 17px;\n}\n\n.ui-label {\n  font-family: Helvetica Neue, Helvetica, Arial;\n  font-weight: bold;\n  font-size: 13px;\n  color: #4A4A4A;\n  line-height: 16px;\n  text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.80);\n\n  display: inline-block;\n  padding: 4px;\n}\n\n// Dropdown Button\na.dropdown-toggle {\n  color: #616161 !important;\n\n  &:hover {\n    color: #616161 !important;\n  }\n}\n\n// Toggle: extends http://ghinda.net/css-toggle-switch/\n\n#top-switch {\n  position: fixed;\n  top: 30px;\n  right: 50px;\n  padding-top: 0px;\n}\n\n.osx-switch {\n  padding-left: 30px;\n  padding-top: 20px;\n\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n\n  .osx-switch-label {\n    font-family: Helvetica Neue, Helvetica, Arial;\n    font-weight: bold;\n    font-size: 13px;\n    color: #4A4A4A;\n    line-height: 16px;\n    text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.80);\n  }\n\n  .osx-switch-label-active {\n    position: relative;\n    left: -30px;\n  }\n\n  .osx-switch-label-inactive {\n    position: relative;\n    right: -55px;\n  }\n\n  label {\n    position: relative;\n    top: -20px;\n    width: 70px;\n    height: 22px;\n    margin: 0;\n    padding: 0;\n\n    /* Rectangle 9: */\n    background-image: -o-linear-gradient(-89deg, #818181 0%, #B8B8B8 100%);\n    background-image: -moz-linear-gradient(-89deg, #818181 0%, #B8B8B8 100%);\n    background-image: -ms-linear-gradient(-89deg, #818181 0%, #B8B8B8 100%);\n    background-image: linear-gradient(-179deg, #818181 0%, #B8B8B8 100%);\n    -moz-box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 0.50);\n    box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 0.20);\n\n    border-top: 1px solid #5C5C5C;\n    border-bottom: 1px solid #989898;\n\n    a {\n      margin-top: -1px;\n      height: 22px;\n      box-shadow: none;\n\n      /* Rectangle 10: */\n      background-image: -o-linear-gradient(-89deg, #FDFDFD 0%, #ECECEC 100%);\n      background-image: -moz-linear-gradient(-89deg, #FDFDFD 0%, #ECECEC 100%);\n      background-image: -ms-linear-gradient(-89deg, #FDFDFD 0%, #ECECEC 100%);\n      background-image: linear-gradient(-179deg, #FDFDFD 0%, #ECECEC 100%);\n      border: 1px solid #7D7D7D;\n    }\n  }\n}\n\n// Headings\nh1 {\n  font-family: Helvetica Neue, Helvetica, Arial;\n  font-weight: 100;\n}\n\nh2 {\n  font-family: Helvetica Neue, Helvetica, Arial;\n  font-size: 18px;\n  font-weight: normal;\n  color: #62676C;\n  line-height: 18px;\n  margin-bottom: 5px;\n  margin-top: 20px;\n\n  &:first-child {\n    // needed for .sub-nav-content-container\n    margin-top: 0px;\n  }\n\n  @media screen and (-webkit-min-device-pixel-ratio: 0) {\n    /* CSS Statements that only apply on webkit-based browsers (Chrome, Safari, etc.) */\n    font-weight: 300;\n  }\n\n}\n\nh3 {\n  font-family: Helvetica Neue, Helvetica, Arial;\n  font-weight: bold;\n  font-size: 14px;\n  color: #4A4A4A;\n  line-height: 17px;\n  text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.80);\n  margin-bottom: 0;\n}\n\n// Forms\nprogress[value] {\n  width: 100%;\n}\n\ninput[type=text], input[type=password], input[type=email] {\n  border-radius: 0 !important;\n  padding: 0 3px !important;\n  font-size: 13px !important;\n  line-height: 13px !important;\n  color: #39090a !important;\n  height: 22px !important;\n\n  /* Rectangle 6: */\n  background: #FFFFFF;\n  border: 1px solid #9B9B9B !important;\n  border-top: 1px solid #8e8e8e !important;\n  border-bottom: 1px solid #afafaf !important;\n  -moz-box-shadow: inset 0px 1px 3px 0px rgba(0, 0, 0, 0.20) !important;\n  box-shadow: inset 0px 1px 3px 0px rgba(0, 0, 0, 0.20) !important;\n\n  &::-webkit-input-placeholder {\n    padding-top: 1px;\n    color: #777777;\n  }\n\n  &:-moz-placeholder {\n    /* Firefox 18- */\n    padding-top: 1px;\n    color: #777777;\n  }\n\n  &::-moz-placeholder {\n    /* Firefox 19+ */\n    padding-top: 1px;\n    color: #777777;\n  }\n\n  &:-ms-input-placeholder {\n    padding-top: 1px;\n    color: #777777;\n  }\n\n  &:focus {\n    outline: none !important;\n    border: 1px solid #6A9ECF !important;\n    -moz-box-shadow: 0px 0px 2px 1px #71A5D6, inset 0px 0px 2px 1px #71A5D6 !important;\n    box-shadow: 0px 0px 2px 1px #71A5D6, inset 0px 0px 2px 1px #71A5D6 !important;\n    -webkit-transition: none;\n    -moz-transition: none;\n    -ms-transition: none;\n    -o-transition: none;\n    transition: none;\n  }\n\n}\n\nselect.select-large {\n  font-size: 16px;\n}\n\ntextarea {\n  padding: 3px !important;\n  font-size: 13px !important;\n  color: #39090a !important;\n\n  border: 1px solid #9B9B9B !important;\n  border-top: 1px solid #8e8e8e !important;\n  border-bottom: 1px solid #afafaf !important;\n  -moz-box-shadow: inset 0px 1px 3px 0px rgba(0, 0, 0, 0.20) !important;\n  box-shadow: inset 0px 1px 3px 0px rgba(0, 0, 0, 0.20) !important;\n\n  &:focus {\n    outline: none !important;\n    border: 1px solid #6A9ECF !important;\n    -moz-box-shadow: 0px 0px 2px 1px #71A5D6, inset 0px 0px 2px 1px #71A5D6 !important;\n    box-shadow: 0px 0px 2px 1px #71A5D6, inset 0px 0px 2px 1px #71A5D6 !important;\n    -webkit-transition: none;\n    -moz-transition: none;\n    -ms-transition: none;\n    -o-transition: none;\n    transition: none;\n  }\n}\n\ninput[type=checkbox] {\n  font-size: 20px;\n  line-height: 20px;\n  position: relative;\n  top: -3px;\n}\n\ninput[type=search] {\n  -webkit-appearance: searchfield;\n\n  font-size: 32px;\n\n}\n\ninput.mvx-search {\n  display: inline-block !important;\n  border-radius: 13px !important;\n  border: 1px solid #ffffff;\n\n  /* Rectangle 11: */\n  background: #FFFFFF;\n  -moz-box-shadow: inset 0px -1px 0px 0px #C6C6C6, inset 0px 1px 0px 0px #A6A6A6, inset 0px 1px 3px 0px rgba(0, 0, 0, 0.50);\n  box-shadow: inset 0px -1px 0px 0px #C6C6C6, inset 0px 1px 0px 0px #A6A6A6, inset 0px 1px 3px 0px rgba(0, 0, 0, 0.50);\n\n  padding-left: 26px !important;\n  padding-right: 22px !important;\n\n  height: 24px !important;\n}\n\nspan.search-input {\n  span {\n    color: #777777;\n    position: relative;\n    left: 12px;\n    font-size: 16px;\n  }\n  input {\n    margin-left: -12px;\n  }\n}\n\nul.dropdown-menu {\n  font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n  font-size: 13px;\n  color: #000000;\n  line-height: 16px;\n  /* Alle löschen: */\n  border-radius: 5px !important;\n\n  a {\n    line-height: 18px;\n    padding: 0 20px;\n    border-top: 1px solid rgba(255, 255, 255, 0);\n    border-bottom: 1px solid rgba(255, 255, 255, 0);\n  }\n\n  li.disabled a:hover {\n    border-top: 1px solid rgba(255, 255, 255, 0);\n    border-bottom: 1px solid rgba(255, 255, 255, 0);\n  }\n\n  a:hover {\n    color: #ffffff;\n\n    /* Rectangle 18: */\n    background-image: -o-linear-gradient(-89deg, #6288F8 0%, #2261F6 100%);\n    background-image: -moz-linear-gradient(-89deg, #6288F8 0%, #2261F6 100%);\n    background-image: -ms-linear-gradient(-89deg, #6288F8 0%, #2261F6 100%);\n    background-image: linear-gradient(-179deg, #6288F8 0%, #2261F6 100%);\n\n    border-top: 1px solid #587FEE;\n    border-bottom: 1px solid #0D52EB;\n  }\n\n}\n\nspan.on-badge {\n  display: inline-block;\n  border-radius: 5px;\n\n  width: 10px;\n  height: 10px;\n\n  /* Oval 3: */\n  background-image: -o-linear-gradient(-89deg, #A0D071 50%, #E5FC97 100%);\n  background-image: -moz-linear-gradient(-89deg, #A0D071 50%, #E5FC97 100%);\n  background-image: -ms-linear-gradient(-89deg, #A0D071 50%, #E5FC97 100%);\n  background-image: linear-gradient(-179deg, #A0D071 50%, #E5FC97 100%);\n  -moz-box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.40), inset 0px 1px 1px 0px #426844, inset 0px 3px 0px 0px rgba(255, 255, 255, 0.50);\n  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.40), inset 0px 1px 1px 0px #426844, inset 0px 3px 0px 0px rgba(255, 255, 255, 0.50);\n\n}\n\nspan.off-badge {\n  display: inline-block;\n  border-radius: 5px;\n\n  width: 10px;\n  height: 10px;\n\n  /* Oval 6: */\n  background-image: -o-linear-gradient(-89deg, #FF2402 0%, #D61B00 49%, #FEC7C6 89%);\n  background-image: -moz-linear-gradient(-89deg, #FF2402 0%, #D61B00 49%, #FEC7C6 89%);\n  background-image: -ms-linear-gradient(-89deg, #FF2402 0%, #D61B00 49%, #FEC7C6 89%);\n  background-image: linear-gradient(-179deg, #FF2402 0%, #D61B00 49%, #FEC7C6 89%);\n  -moz-box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.40), inset 0px 0px 2px 0px #785757, inset 0px -1px 1px 0px #6A0701;\n  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.40), inset 0px 0px 2px 0px #785757, inset 0px -1px 1px 0px #6A0701;\n}\n\n.nfo {\n  font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n  font-size: 11px;\n  color: #808080;\n  line-height: 13px;\n  /* Hier finden: */\n}\n\ntable.table-content-block {\n  width: 100%;\n\n  td {\n    vertical-align: top;\n    padding: 0 2px;\n    padding-bottom: 5px;\n\n    &.td-label {\n      width: 120px;\n      text-align: right;\n      padding-right: 5px;\n    }\n\n    &.td-actions {\n      text-align: right;\n    }\n  }\n}\n\nspan.entypo-right.maverix-circle {\n  display: inline-block;\n  background-color: #474747;\n  color: #ffffff;\n  border-radius: 50px;\n  font-size: 8px;\n  line-height: 10px;\n  width: 10px;\n  height: 10px;\n  text-align: center;\n\n  position: relative;\n  top: -1px;\n}\n\n.indent {\n  margin-left: 20px;\n}\n\nul.list-unstyled {\n  li {\n    line-height: 22px;\n  }\n\n  select {\n    position: relative;\n    top: -2px;\n  }\n\n  input[type=checkbox] {\n    position: relative;\n    top: 0px;\n  }\n}\n\n.grey-bg {\n  background-color: #e8e8e8;\n\n  .btn.btn-on-grey {\n    margin: 0 4px;\n  }\n}\n\n.toolbar-button {\n  border-radius: 3px;\n  height: 22px;\n  display: inline-block;\n  padding: 3px 12px;\n  /* Rectangle 25: */\n  background-image: -o-linear-gradient(-89deg, #F5F5F5 0%, #B3B3B3 100%);\n  background-image: -moz-linear-gradient(-89deg, #F5F5F5 0%, #B3B3B3 100%);\n  background-image: -ms-linear-gradient(-89deg, #F5F5F5 0%, #B3B3B3 100%);\n  background-image: linear-gradient(-179deg, #F5F5F5 0%, #B3B3B3 100%);\n  border: 1px solid #7E7E7E;\n  -moz-box-shadow: 0px 1px 0px 0px rgba(255, 255, 255, 0.40);\n  box-shadow: 0px 1px 0px 0px rgba(255, 255, 255, 0.40);\n\n  font-family: Lucida Grande, Lucida Sans, Arial, sans-serif;\n  font-weight: normal;\n  color: #404040;\n  line-height: 14px;\n  text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.40);\n\n  &:hover {\n    text-decoration: none;\n    color: #404040;\n  }\n\n  &:active {\n    color: #000000;\n\n    border-radius: 3px;\n    /* Rectangle 26: */\n    background-image: -o-linear-gradient(-89deg, #B3B3B3 0%, #E8E8E8 100%);\n    background-image: -moz-linear-gradient(-89deg, #B3B3B3 0%, #E8E8E8 100%);\n    background-image: -ms-linear-gradient(-89deg, #B3B3B3 0%, #E8E8E8 100%);\n    background-image: linear-gradient(-179deg, #B3B3B3 0%, #E8E8E8 100%);\n    border: 1px solid #7E7E7E;\n\n    -moz-box-shadow: inset 0px 1px 5px 0px rgba(0, 0, 0, 0.40), 0px 1px 0px 0px rgba(255, 255, 255, 0.40);\n    box-shadow: inset 0px 1px 5px 0px rgba(0, 0, 0, 0.40), 0px 1px 0px 0px rgba(255, 255, 255, 0.40);\n  }\n}\n\n.toolbar {\n  background-image: url(\"../img/grey-bg.png\");\n  height: 35px;\n  padding: 6px 10px;\n\n  border-top: 1px solid #5e5e5e;\n\n  -moz-box-shadow: inset 0px 1px 0px 0px #E1E1E1;\n  box-shadow: inset 0px 1px 0px 0px #E1E1E1;\n}\n\n.toolbar-off {\n  background-image: url(\"../img/off-grey-bg.png\");\n  height: 34px;\n  padding: 6px 10px;\n\n  border-top-color: #9b9b9b;\n  -moz-box-shadow: inset 0px 1px 0px 0px #F2F2F2;\n  box-shadow: inset 0px 1px 0px 0px #F2F2F2;\n}\n\n// MODALS\n.modal {\n}\n\n.modal-backdrop {\n  background-color: #000000;\n}\n\n.modal-backdrop.in {\n  filter: alpha(opacity=70);\n  opacity: .7;\n}\n\n.modal-dialog {\n}\n\n.modal-content {\n}\n\n.modal-header {\n  background-color: #f5f7f9;\n  padding: 20px;\n  border-bottom: 1px solid #ada6ac;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n\n  .modal-title {\n    font-family: Helvetica, arial, verdana, sans-serif;\n    font-weight: bold;\n    font-size: 26px;\n    color: #3C3C3C;\n    line-height: 31px;\n  }\n\n  .modal-subtitle {\n    font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n    font-size: 13px;\n    color: #999;\n    line-height: 15px;\n  }\n\n}\n\n.modal-body {\n}\n\n.modal-footer {\n  background-color: #e8e8e8;\n  border-bottom-left-radius: 4px;\n  border-bottom-right-radius: 4px;\n  height: 45px;\n  padding: 10px;\n  border-top: 1px solid #a8a8a8;\n}\n\n// Button Animation Keyframes\n@-webkit-keyframes blinking {\n  from {\n    -webkit-box-shadow: inset 0 19px 0 rgba(0, 115, 215, 0),\n    inset 0 1px 0 rgba(255, 255, 255, 1),\n    0 1px 0 rgba(0, 0, 0, 0.09);\n  }\n  50% {\n    -webkit-box-shadow: inset 0 19px 0 rgba(0, 115, 215, 0.2),\n    inset 0 1px 0 rgba(255, 255, 255, 1),\n    0 1px 0 rgba(0, 0, 0, 0.09);\n  }\n  to {\n    -webkit-box-shadow: inset 0 19px 0 rgba(0, 115, 215, 0),\n    inset 0 1px 0 rgba(255, 255, 255, 1),\n    0 1px 0 rgba(0, 0, 0, 0.09);\n  }\n}\n\n@-moz-keyframes blinking {\n  from {\n    -moz-box-shadow: inset 0 19px 0 rgba(0, 115, 215, 0),\n    inset 0 1px 0 rgba(255, 255, 255, 1),\n    0 1px 0 rgba(0, 0, 0, 0.09);\n  }\n  50% {\n    -moz-box-shadow: inset 0 19px 0 rgba(0, 115, 215, 0.2),\n    inset 0 1px 0 rgba(255, 255, 255, 1),\n    0 1px 0 rgba(0, 0, 0, 0.09);\n  }\n  to {\n    -moz-box-shadow: inset 0 19px 0 rgba(0, 115, 215, 0),\n    inset 0 1px 0 rgba(255, 255, 255, 1),\n    0 1px 0 rgba(0, 0, 0, 0.09);\n  }\n}\n\n@keyframes blinking {\n  from {\n    box-shadow: inset 0 19px 0 rgba(0, 115, 215, 0),\n    inset 0 1px 0 rgba(255, 255, 255, 1),\n    0 1px 0 rgba(0, 0, 0, 0.09);\n  }\n  50% {\n    box-shadow: inset 0 19px 0 rgba(0, 115, 215, 0.2),\n    inset 0 1px 0 rgba(255, 255, 255, 1),\n    0 1px 0 rgba(0, 0, 0, 0.09);\n  }\n  to {\n    box-shadow: inset 0 19px 0 rgba(0, 115, 215, 0),\n    inset 0 1px 0 rgba(255, 255, 255, 1),\n    0 1px 0 rgba(0, 0, 0, 0.09);\n  }\n}\n\n// HACKY STYLES\n.content-block {\n  margin-bottom: 30px;\n}\n\nul.entypo-ul {\n  li {\n    display: inline-block;\n    font-size: 20px !important;\n    line-height: 28px !important;\n  }\n}\n\n.emoji-font {\n  font-family: \"Apple Color Emoji\";\n  font-size: 20px !important;\n  line-height: 28px !important\n}\n"
  },
  {
    "path": "maverix-theme/img/iconset-addictive-flavour-set/motivation behind the design.txt",
    "content": "Motivation behind the design\n-----------------------------\n\n\nIn january 2009 I released my first pixel-based iconset 'flavour' right here on the Smashing Magazine and a few month later in may 2009 I extended that set and released 'flavour extended'.\n\nNow, over one year later it's time to finish this set.\n'Addictive flavour' will be the last part of the flavour series. (At least for now I think it will be ^_^ )\n\nIn my last releases I asked you for your feedback on the iconset and that feedback was overwhelming. I received hundreds of emails and read even more comments here and on twitter (http://twitter.com/mywayhome).\n\nWith 'addictive flavour' I hope to give you the iconset that you wanted and that you need for your web development projects.\nThough, if there is a special icon missing in the set that you need for your project or site:\nPlease feel free to contact me at twitter (http://twitter.com/mywayhome) or via email (icons@addictedotocoffee.de) and we'll see what we can do for you!\n\nI want to thank all of you for your great support with this huge iconset. Especially I want to thank Magda, Lars, Martin LeBlanc, Bastian Allgeier, the team at Smashing Magazine and all of the beta-viewers who did a fantastic job on reviewing my work and giving me feedback, love and inspiration!\n\nPlease stay tuned for more of my releases here in Smashing Magazine or via my twitter stream (http://twitter.com/mywayhome).\n\nThanks a lot, Oliver\n\n"
  },
  {
    "path": "maverix-theme/img/iconset-addictive-flavour-set/readme.txt",
    "content": "------------------\nThe Ultimate Free Web Designers Icon Set (750 icons, 48x48px)\nDesigned by Oliver Twardowski (http://www.addictedtocoffee.de, @mywayhome on Twitter)\n\nhttp://www.smashingmagazine.com/2010/04/15/the-ultimate-free-web-designer-s-icon-set-750-icons-incl-psd-sources/\n------------------\n\nDear friends,\n\nthank you for downloading this file.\n\nThis freebie has been brought to you by SmashingMagazine.com.\nYou can freely use it for both your private and commercial projects, including software, online services, templates and themes.\nThe icons may not be resold, sublicensed, rented, transferred or otherwise made available for use. The icons may not be offered for free downloading from websites\nother than SmashingMagazine.com.\nPlease link to the article in which this freebie was released if you would like to spread the word.\n\nSmashing Magazine Team,\nwww.smashingmagazine.com\n"
  },
  {
    "path": "maverix-theme/index.html",
    "content": "<!doctype html>\n<html lang=\"en\" ng-app=\"myApp\" ng-controller=\"AppCtrl\">\n<head>\n    <meta charset=\"utf-8\">\n    <!--chrome webapp- Add to homescreen for Chrome on Android -->\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"application-name\" content=\"Maverix\">\n     <!-- Add to homescreen for Safari on iOS -->\n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n  <meta name=\"apple-mobile-web-app-title\" content=\"Maverix\">\n  \n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>Maverix Bootstrap Theme</title>\n\n    <!-- Bootstrap -->\n    <link href=\"bower_components/bootstrap/less/bootstrap.css\" rel=\"stylesheet\">\n    <link href=\"bower_components/css-toggle-switch/dist/toggle-switch.css\" rel=\"stylesheet\">\n    <link href=\"bower_components/rangeslider.js/dist/rangeslider.css\" rel=\"stylesheet\">\n    <link href=\"css/maverix.css\" rel=\"stylesheet\">\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.4.2/respond.min.js\"></script>\n    <![endif]-->\n</head>\n<body>\n\n<div class=\"sidebar\">\n    <div class=\"sidebar-navicontainer\">\n        <div class=\"sidebar-headbox\">\n            <span class=\"sidebar-header\">UI Elements</span>\n            <a class=\"sidebar-toggle\">Hide</a>\n        </div>\n        <ul class=\"nav\">\n            <li ng-class=\"{ selected: isActive('/maverix')}\"><a href=\"#/maverix\"><span class=\"entypo-window\"></span>\n                Guide</a></li>\n            <li ng-class=\"{ selected: isActive('/controls')}\"><a href=\"#/controls\"><span class=\"entypo-plus-circled\"></span>\n                Controls</a></li>\n            <li ng-class=\"{ selected: isActive('/forms')}\"><a href=\"#/forms\"><span class=\"entypo-pencil\"></span>\n                Forms</a></li>\n            <li ng-class=\"{ selected: isActive('/modals')}\"><a href=\"#/modals\"><span class=\"entypo-window\"></span>\n                Modals</a></li>\n            <li ng-class=\"{ selected: isActive('/tables')}\"><a href=\"#/tables\"><span class=\"entypo-list\"></span>\n                Tables</a></li>\n            <li ng-class=\"{ selected: isActive('/icons')}\"><a href=\"#/icons\"><span class=\"entypo-box\"></span>\n                Icons</a></li>\n            <li ng-class=\"{ selected: isActive('/type')}\"><a href=\"#/type\"><span class=\"entypo-behance\"></span>\n                Typography</a></li>\n            <li ng-class=\"{ selected: isActive('/charts')}\"><a href=\"#/charts\"><span class=\"entypo-chart-bar\"></span>\n                Charts</a></li>\n        </ul>\n    </div>\n\n    <div class=\"sidebar-navicontainer\">\n        <div class=\"sidebar-headbox\">\n            <span class=\"sidebar-header\">Example Pages</span>\n            <a class=\"sidebar-toggle\">Hide</a>\n        </div>\n        <ul class=\"nav\">\n            <li ng-class=\"{ selected: isActive('/view1')}\"><a href=\"#/view1\"><span class=\"entypo-monitor\"></span>\n                Maverix</a></li>\n            <li ng-class=\"{ selected: isActive('/view2')}\"><a href=\"#/view2\"><span class=\"entypo-attention\"></span>\n                Warnings <span class=\"sidebar-badge\">4</span>\n            </a></li>\n        </ul>\n    </div>\n\n    <div class=\"sidebar-navicontainer\">\n        <div class=\"sidebar-headbox\">\n            <span class=\"sidebar-header\">Placeholder Accounts</span>\n            <a class=\"sidebar-toggle\">Hide</a>\n        </div>\n        <ul class=\"nav\">\n            <li><span class=\"entypo-user\"></span> Users</li>\n            <li><span class=\"entypo-users\"></span> Groups</li>\n            <li><span class=\"entypo-vcard\"></span> Certificates</li>\n            <li><span class=\"entypo-doc-text\"></span> Protocols</li>\n            <li><span class=\"entypo-chart-bar\"></span> Stats</li>\n        </ul>\n    </div>\n\n    <div class=\"sidebar-navicontainer\">\n        <div class=\"sidebar-headbox\">\n            <span class=\"sidebar-header\">Placeholder Services</span>\n            <a class=\"sidebar-toggle\">Hide</a>\n        </div>\n        <ul class=\"nav\">\n            <li><a href=\"\"><span class=\"entypo-archive\"></span> Caching</a></li>\n            <li><a href=\"\"><span class=\"entypo-drive\"></span> File Sharing</a></li>\n            <li><a href=\"\"><span class=\"entypo-calendar\"></span> Calendar</a></li>\n            <li><a href=\"\"><span class=\"entypo-book\"></span> Contacts</a></li>\n            <li><a href=\"\"><span class=\"entypo-mail\"></span> Mail</a></li>\n            <li><a href=\"\"><span class=\"entypo-chat\"></span> Messages <span class=\"sidebar-badge\">1</span></a></li>\n            <li><a href=\"\"><span class=\"entypo-newspaper\"></span> Profile Manager</a></li>\n            <li><a href=\"\"><span class=\"entypo-ccw\"></span> Backups</a></li>\n            <li><a href=\"\"><span class=\"entypo-lock\"></span> VPN</a></li>\n            <li><a href=\"\"><span class=\"entypo-globe\"></span> Websites</a></li>\n            <li><a href=\"\"><span class=\"entypo-docs\"></span> Wiki</a></li>\n            <li><a href=\"\"><span class=\"entypo-tools\"></span> Build</a></li>\n        </ul>\n    </div>\n</div>\n\n\n<div class=\"heading-bar\">\n    <!--<div class=\"user-bar\">\n        Hi, Username | <a href=\"#\">Sign out</a>\n    </div>-->\n    <span class=\"heading-one\"><img ng-src=\"{{img}}\" width=\"48\"\n                                   height=\"48\"> {{title}}</span>\n\n    <div id=\"top-switch\" class=\"osx-switch\" ng-if=\"showTopToggle\">\n        <span class=\"osx-switch-label osx-switch-label-active\">ON</span>\n        <span class=\"osx-switch-label osx-switch-label-inactive\">OFF</span>\n        <label class=\"switch-light switch-candy\" onclick=\"\">\n            <input type=\"checkbox\">\n            <a></a>\n        </label>\n    </div>\n</div>\n\n<div class=\"content\">\n    <div class=\"container-fluid container-maverix\" ng-view>\n    </div>\n</div>\n\n<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->\n<!--<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js\"></script>-->\n<script src=\"bower_components/jquery/dist/jquery.min.js\"></script>\n<!-- Include all compiled plugins (below), or include individual files as needed -->\n<script src=\"bower_components/bootstrap/dist/js/bootstrap.min.js\"></script>\n\n<script src=\"bower_components/rangeslider.js/dist/rangeslider.min.js\"></script>\n<script src=\"bower_components/flot/jquery.flot.js\"></script>\n<script src=\"bower_components/flot/jquery.flot.pie.js\"></script>\n\n<!-- In production use:\n<script src=\"//ajax.googleapis.com/ajax/libs/angularjs/x.x.x/angular.min.js\"></script>\n-->\n<script src=\"bower_components/angular/angular.js\"></script>\n<script src=\"bower_components/angular-route/angular-route.js\"></script>\n<script src=\"app/js/app.js\"></script>\n<script src=\"app/js/services.js\"></script>\n<script src=\"app/js/controllers.js\"></script>\n<script src=\"app/js/filters.js\"></script>\n<script src=\"app/js/directives.js\"></script>\n\n\n<script>\n    $(document).ready(function () {\n        // Sidebar Toggle Button Initialization\n        $(\".sidebar-toggle\").click(function (event) {\n            var $nextUl = $(event.target).parents().eq(1).find(\"ul.nav\");\n            if (event.target.innerText === \"Show\") {\n                event.target.innerText = \"Hide\";\n            } else {\n                event.target.innerText = \"Show\";\n            }\n            $nextUl.slideToggle(\"fast\", \"swing\");\n        });\n\n        $(document).on(\"focus\", function (e) {\n            console.log(\"Focussed\");\n        });\n\n        $(window).on('focus', function () {\n            $(\"body\").removeClass(\"blur\");\n        });\n\n        $(window).on('blur', function () {\n            $(\"body\").addClass(\"blur\");\n        });\n\n        // Rangeslider\n        $('input[type=\"range\"]').rangeslider({\n            // Feature detection\n            polyfill: false\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "maverix-theme/readme.md",
    "content": "Maverix\n=======\n\n### What is Maverix?\n\nMaverix is a maccish bootstrap theme and application boilerplate. It gives your web-apps a native look and feel and bundles AngularJS and other components such as jQuery, Flot and rangeslider.js\n\nIt is perfect to be used for apps that are based on HTML App Containers such as:\n\n- [MacGap](https://github.com/maccman/macgap)\n- [Node-Webkit](https://github.com/rogerwang/node-webkit)\n- [Github Atom Shell](https://github.com/atom/atom-shell)\n- [Adobe Brackets Shell](https://github.com/adobe/brackets-shell)\n\n### Design Decisions\nClosest possible to native\nAll controls and Elements are carefully designed to perfectly fit into the native mac environment.\n\n#### Non Responsive (for now...)\nDesktop Apps don't need to run on thousands of different devices and viewports. You are the master of setting a minimum-viewport and the app won't get smaller than this. If you are using Maverix Theme in a traditional web-app it is also okay for Admin Backends that don't need responsive layout.\n\n#### Built on Bootstrap and Less\nTwitters Bootstrap comes bundled with tons of useful styles and add ons and allows beginners and masters to get started quickly (grid positioning, etc.). The maverix styles are enhancing bootstrap and are written in less.css\n\n#### Webkit first\nMaverix Theme is primarily made to enable app container based web-apps to look like native OS X Apps. So webkit is the primary engine when releasing new components. However this doesn't mean that other browsers are totally unsupported. Maverix Theme is tested on Safari, Firefox and Chrome on OS X.\n\n#### Bundled with AngularJS\nAngularJS is one of the best Javascript App Frameworks available today and so Maverix Theme comes bundled with AngularJS including fully working routing to get you started fast. Anyways, AngularJS usage is optional.\n\n### Roadmap\n- Bugfix requests are priority one.\n- New Features will be added as far as they make sense.\n- If demand is high for responsive design I will add it.\n\n### Bugs\nUse the [Maverix Github Issue Tracker](https://github.com/tschundeee/maverix/issues).\nYou can also reach out to me via Mail [b.rahnema@gmail.com](mailto:b.rahnema@gmail.com?subject=Maverix) or via Twitter [@tschundeee](https://twitter.com/tschundeee)"
  }
]