diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..69f3774 --- /dev/null +++ b/README.adoc @@ -0,0 +1,20 @@ +:title: scribble.github.io + +== Scribble Website + +image:https://travis-ci.org/scribble/scribble.github.io.svg?branch=pages["Build Status", link="https://travis-ci.org/scribble/scribble.github.io"] + +=== Description +When pushing a commit into this branch, the site is automatically built and published to http://scribble.github.io +Most likely the content of the website you are looking for is link:src/main/jbake/content/[here]. + +=== Building the site on localhost +. `git clone https://github.com/scribble/scribble.github.io` +. `git checkout pages` +. Provided Maven is installed, run one of following commands: + +* `mvn jbake:generate` Simply runs jbake and generate the site into `target/website` dir. +* `mvn jbake:watch` Polls a folder and run jbake whenever changes happen. +* `mvn jbake:inline` Same as watch, but also launches an embedded winstone container that by default listens on http://localhost:8080. Additionally you may want to use `-Djbake.port=X` `-Djbake.listenAddress=Y`. + +NOTE: `mvn install` will most likely fail on localhost, because it needs the OAuth token for GitHub. diff --git a/blog.html b/blog.html new file mode 100644 index 0000000..3777ede --- /dev/null +++ b/blog.html @@ -0,0 +1,193 @@ + + + + + Scribble + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + +
+
+

Scribble Blog

+
+
+ + +
+

Placeholder blog

+

03 March 2015

+

+

This is a placeholder for a blog entry.

+

+
+

+
+ + + + + RSS Feed +
+ + +
+ + +
+
+

© Scribble.org, 2009-2015 | Baked with JBake v2.3.2

+

+ + Fork me on GitHub + +

+
+
+ + + + + + + + + + + + + diff --git a/blog/2015/2015-03-03-1.html b/blog/2015/2015-03-03-1.html new file mode 100644 index 0000000..7575b35 --- /dev/null +++ b/blog/2015/2015-03-03-1.html @@ -0,0 +1,184 @@ + + + + + Scribble - Placeholder blog + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + +
+
+

Placeholder blog

+

blog post

+
+
+ +
+

+

+

This is a placeholder for a blog entry.

+

+


+

Published by Gary Brown on 03 March 2015

+
+ +
+ + +
+
+

© Scribble.org, 2009-2015 | Baked with JBake v2.3.2

+

+ + Fork me on GitHub + +

+
+
+ + + + + + + + + + + + + diff --git a/community/collaborators.html b/community/collaborators.html new file mode 100644 index 0000000..8cb5f3f --- /dev/null +++ b/community/collaborators.html @@ -0,0 +1,222 @@ + + + + + Scribble - Collaborators + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + +
+
+

Collaborators

+

Organisations that are collaborating on the development of the Scribble language and tools

+
+
+ + + +
+
+ +
+
+

Academia

+
+ + Imperial College London + +
+
+
+ + Query Mary University + +
+ +
+
+

Industry

+
+ + Cognizant + +
+
+ + Ocean Observatories Initiative + +
+
+
+ + RedHat + +
+ +
+
+ + +
+
+ +
+ + +
+
+

© Scribble.org, 2009-2015 | Baked with JBake v2.3.2

+

+ + Fork me on GitHub + +

+
+
+ + + + + + + + + + + + + diff --git a/community/discussions.html b/community/discussions.html new file mode 100644 index 0000000..07107fa --- /dev/null +++ b/community/discussions.html @@ -0,0 +1,201 @@ + + + + + Scribble - Scribble Forums + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + +
+
+

Scribble Forums

+

Get involved in the community

+
+
+ + + +
+
+
+

Contribute code, use cases or ideas

+
+
+

All code lives on GitHub under https://github.com/scribble. To contribute, fork the +respective project(s), implement your changes and open a pull-request.

+
+
+
+
+

Contribute documentation

+
+
+

Similar to code, the Scribble website and documentation lives under +https://github.com/scribble/scribble.github.io. And as with the code, +fork the repo, create your changes and open a pull-request.

+
+
+
+
+
+ +
+ + +
+
+

© Scribble.org, 2009-2015 | Baked with JBake v2.3.2

+

+ + Fork me on GitHub + +

+
+
+ + + + + + + + + + + + + diff --git a/community/issues.html b/community/issues.html new file mode 100644 index 0000000..67ffdc6 --- /dev/null +++ b/community/issues.html @@ -0,0 +1,212 @@ + + + + + Scribble - Reporting Issues + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + +
+
+

Reporting Issues

+

Create issues to report bugs or request features/enhancements

+
+
+ + + +
+
+
+

Please select the issue tracking system associated with the appropriate component.

+
+
+

If you have a feature request, enhancement or bug report, please create an issue. If you wish to contribute +to the project, then please review the reported issues and feel free to contribute a Pull Request (PR).

+
+ + ++++ + + + + + + + + + + + + + + + + +
Table 1. Components and links to their respective issue tracking systems
ComponentIssue Tracker

Scribble Core Java libraries and CLI

https://github.com/scribble/scribble-java/issues

Scribble Web Tooling

https://github.com/scribble/scribble-web/issues

+
+
+ +
+ + +
+
+

© Scribble.org, 2009-2015 | Baked with JBake v2.3.2

+

+ + Fork me on GitHub + +

+
+
+ + + + + + + + + + + + + diff --git a/css/asciidoctor.css b/css/asciidoctor.css new file mode 100644 index 0000000..c687f36 --- /dev/null +++ b/css/asciidoctor.css @@ -0,0 +1,512 @@ +@import url(//cdnjs.cloudflare.com/ajax/libs/font-awesome/3.2.0/css/font-awesome.css); +/* ========================================================================== Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9. */ +img { border: 0; } + +/** Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { overflow: hidden; } + +/* ========================================================================== Figures ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari 5. */ +figure { margin: 0; } + +/* ========================================================================== Forms ========================================================================== */ +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */ +button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +button, input { line-height: normal; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */ +textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } + +/* ========================================================================== Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } + +img, object, embed { max-width: 100%; height: auto; } + +object, embed { height: 100%; } + +img { -ms-interpolation-mode: bicubic; } + +#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } + +.left { float: left !important; } + +.right { float: right !important; } + +.text-left { text-align: left !important; } + +.text-right { text-align: right !important; } + +.text-center { text-align: center !important; } + +.text-justify { text-align: justify !important; } + +.hide { display: none; } + +.antialiased, body { -webkit-font-smoothing: antialiased; } + +img { display: inline-block; vertical-align: middle; } + +textarea { height: auto; min-height: 50px; } + +select { width: 100%; } + +p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; } + +.subheader, #content #toctitle, .admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title, .tableblock > caption { line-height: 1.4; color: #7a2518; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } + +/* Lists */ +ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 1.25em; list-style-position: outside; font-family: inherit; } + +ul, ol { margin-left: 1.5em; } + +/* Unordered Lists */ +ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ } +ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; } +ul.square { list-style-type: square; } +ul.circle { list-style-type: circle; } +ul.disc { list-style-type: disc; } +ul.no-bullet { list-style: none; } + +/* Ordered Lists */ +ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; } + +/* Definition Lists */ +dl dt { margin-bottom: 0.3125em; font-weight: bold; } +dl dd { margin-bottom: 1.25em; } + +/* Abbreviations */ +abbr, acronym { text-transform: uppercase; font-size: 90%; color: #222222; border-bottom: 1px dotted #dddddd; cursor: help; } + +abbr { text-transform: none; } + +/* Blockquotes */ +blockquote { margin: 0 0 1.25em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; } +blockquote cite { display: block; font-size: inherit; color: #555555; } +blockquote cite:before { content: "\2014 \0020"; } +blockquote cite a, blockquote cite a:visited { color: #555555; } + +blockquote, blockquote p { line-height: 1.6; color: #6f6f6f; } + +/* Microformats */ +.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; padding: 0.625em 0.75em; } +.vcard li { margin: 0; display: block; } +.vcard .fn { font-weight: bold; font-size: 0.9375em; } + +.vevent .summary { font-weight: bold; } +.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; } + +@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } + h1 { font-size: 2.75em; } + h2 { font-size: 2.3125em; } + h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; } + h4 { font-size: 1.4375em; } } +/* Print styles. Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) +*/ +.print-only { display: none !important; } + +@media print { * { background: transparent !important; color: #000 !important; /* Black prints faster: h5bp.com/s */ box-shadow: none !important; text-shadow: none !important; } + a, a:visited { text-decoration: underline; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } + pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } + thead { display: table-header-group; /* h5bp.com/t */ } + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + @page { margin: 0.5cm; } + p, h2, h3, #toctitle, .sidebarblock > .content > .title { orphans: 3; widows: 3; } + h2, h3, #toctitle, .sidebarblock > .content > .title { page-break-after: avoid; } + .hide-on-print { display: none !important; } + .print-only { display: block !important; } + .hide-for-print { display: none !important; } + .show-for-print { display: inherit !important; } } +/* Tables */ +table { background: white; margin-bottom: 1.25em; border: solid 1px #dddddd; } +table thead, table tfoot { background: whitesmoke; font-weight: bold; } +table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222222; text-align: left; } +table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #222222; } +table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f9f9f9; } +table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.6; } + +.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } +.clearfix:after, .float-group:after { clear: both; } + +*:not(pre) > code { font-size: 0.9375em; padding: 1px 3px 0; white-space: nowrap; background-color: #f2f2f2; border: 1px solid #cccccc; -webkit-border-radius: 4px; border-radius: 4px; text-shadow: none; } + +/*pre, pre > code { line-height: 1.4; color: inherit; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }*/ + +kbd.keyseq { color: #555555; } + +kbd:not(.keyseq) { display: inline-block; color: #222222; font-size: 0.75em; line-height: 1.4; background-color: #F7F7F7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; margin: -0.15em 0.15em 0 0.15em; padding: 0.2em 0.6em 0.2em 0.5em; vertical-align: middle; white-space: nowrap; } + +kbd kbd:first-child { margin-left: 0; } + +kbd kbd:last-child { margin-right: 0; } + +.menuseq, .menu { color: #090909; } + +p a > code:hover { color: #561309; } + +#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 0.9375em; padding-right: 0.9375em; } +#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } +#header:after, #content:after, #footnotes:after, #footer:after { clear: both; } + +#header { margin-bottom: 2.5em; } +#header > h1 { color: black; font-weight: normal; border-bottom: 1px solid #dddddd; margin-bottom: -28px; padding-bottom: 32px; } +#header span { color: #6f6f6f; } +#header #revnumber { text-transform: capitalize; } +#header br { display: none; } +#header br + span { padding-left: 3px; } +#header br + span:before { content: "\2013 \0020"; } +#header br + span.author { padding-left: 0; } +#header br + span.author:before { content: ", "; } + +#toc { border-bottom: 3px double #ebebeb; padding-bottom: 1.25em; } +#toc > ul { margin-left: 0.25em; } +#toc ul.sectlevel0 > li > a { font-style: italic; } +#toc ul.sectlevel0 ul.sectlevel1 { margin-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } +#toc ul { list-style-type: none; } + +#toctitle { color: #7a2518; } + +@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; } + #toc.toc2 { position: fixed; width: 20em; left: 0; top: 0; border-right: 1px solid #ebebeb; border-bottom: 0; z-index: 1000; padding: 1em; height: 100%; overflow: auto; } + #toc.toc2 #toctitle { margin-top: 0; } + #toc.toc2 > ul { font-size: .95em; } + #toc.toc2 ul ul { margin-left: 0; padding-left: 1.25em; } + #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } + body.toc2.toc-right { padding-left: 0; padding-right: 20em; } + body.toc2.toc-right #toc.toc2 { border-right: 0; border-left: 1px solid #ebebeb; left: auto; right: 0; } } +#content #toc { border-style: solid; border-width: 1px; border-color: #d9d9d9; margin-bottom: 1.25em; padding: 1.25em; background: #f2f2f2; border-width: 0; -webkit-border-radius: 4px; border-radius: 4px; } +#content #toc > :first-child { margin-top: 0; } +#content #toc > :last-child { margin-bottom: 0; } +#content #toc a { text-decoration: none; } + +#content #toctitle { font-weight: bold; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-size: 1em; padding-left: 0.125em; } + +#footer { max-width: 100%; background-color: #222222; padding: 1.25em; } + +#footer-text { color: #dddddd; line-height: 1.44; } + +.sect1 { padding-bottom: 1.25em; } + +.sect1 + .sect1 { border-top: 3px double #ebebeb; } + +#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; width: 1em; margin-left: -1em; display: block; text-decoration: none; visibility: hidden; text-align: center; font-weight: normal; } +#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: '\00A7'; font-size: .85em; vertical-align: text-top; display: block; margin-top: 0.05em; } +#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; } +#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: #ba3925; text-decoration: none; } +#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: #a53221; } + +.imageblock, .literalblock, .listingblock, .verseblock, .videoblock { margin-bottom: 1.25em; } + +.admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-align: left; font-weight: bold; } + +.tableblock > caption { text-align: left; font-weight: bold; white-space: nowrap; overflow: visible; max-width: 0; } + +table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } + +.admonitionblock > table { border: 0; background: none; width: 100%; } +.admonitionblock > table td.icon { text-align: center; width: 80px; } +.admonitionblock > table td.icon img { max-width: none; } +.admonitionblock > table td.icon .title { font-weight: bold; text-transform: uppercase; } +.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #dddddd; color: #6f6f6f; } +.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } + +.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 4px; border-radius: 4px; } +.exampleblock > .content > :first-child { margin-top: 0; } +.exampleblock > .content > :last-child { margin-bottom: 0; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6, .exampleblock > .content p { color: #333333; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6 { line-height: 1; margin-bottom: 0.625em; } +.exampleblock > .content h1.subheader, .exampleblock > .content h2.subheader, .exampleblock > .content h3.subheader, .exampleblock > .content .subheader#toctitle, .sidebarblock.exampleblock > .content > .subheader.title, .exampleblock > .content h4.subheader, .exampleblock > .content h5.subheader, .exampleblock > .content h6.subheader { line-height: 1.4; } + +.exampleblock.result > .content { -webkit-box-shadow: 0 1px 8px #d9d9d9; box-shadow: 0 1px 8px #d9d9d9; } + +.sidebarblock { border-style: solid; border-width: 1px; border-color: #d9d9d9; margin-bottom: 1.25em; padding: 1.25em; background: #f2f2f2; -webkit-border-radius: 4px; border-radius: 4px; } +.sidebarblock > :first-child { margin-top: 0; } +.sidebarblock > :last-child { margin-bottom: 0; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6, .sidebarblock p { color: #333333; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6 { line-height: 1; margin-bottom: 0.625em; } +.sidebarblock h1.subheader, .sidebarblock h2.subheader, .sidebarblock h3.subheader, .sidebarblock .subheader#toctitle, .sidebarblock > .content > .subheader.title, .sidebarblock h4.subheader, .sidebarblock h5.subheader, .sidebarblock h6.subheader { line-height: 1.4; } +.sidebarblock > .content > .title { color: #7a2518; margin-top: 0; line-height: 1.6; } + +.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } + +/*.literalblock > .content pre, .listingblock > .content pre { background: none; border-width: 1px 0; border-style: dotted; border-color: #bfbfbf; -webkit-border-radius: 4px; border-radius: 4px; padding: 0.75em 0.75em 0.5em 0.75em; word-wrap: break-word; }*/ +.literalblock > .content pre.nowrap, .listingblock > .content pre.nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } +.literalblock > .content pre > code, .listingblock > .content pre > code { display: block; } +@media only screen { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.8em; } } +@media only screen and (min-width: 768px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.9em; } } +@media only screen and (min-width: 1280px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 1em; } } + +.listingblock > .content { position: relative; } + +.listingblock:hover code[class*=" language-"]:before { text-transform: uppercase; font-size: 0.9em; color: #999; position: absolute; top: 0.375em; right: 0.375em; } + +.listingblock:hover code.asciidoc:before { content: "asciidoc"; } +.listingblock:hover code.clojure:before { content: "clojure"; } +.listingblock:hover code.css:before { content: "css"; } +.listingblock:hover code.groovy:before { content: "groovy"; } +.listingblock:hover code.html:before { content: "html"; } +.listingblock:hover code.java:before { content: "java"; } +.listingblock:hover code.javascript:before { content: "javascript"; } +.listingblock:hover code.python:before { content: "python"; } +.listingblock:hover code.ruby:before { content: "ruby"; } +.listingblock:hover code.scss:before { content: "scss"; } +.listingblock:hover code.xml:before { content: "xml"; } +.listingblock:hover code.yaml:before { content: "yaml"; } + +.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } + +.listingblock.terminal pre .command:not([data-prompt]):before { content: '$'; } + +table.pyhltable { border: 0; margin-bottom: 0; } + +table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; } + +table.pyhltable td.code { padding-left: .75em; padding-right: 0; } + +.highlight.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; } + +.highlight.pygments .lineno { display: inline-block; margin-right: .25em; } + +table.pyhltable .linenodiv { background-color: transparent !important; padding-right: 0 !important; } + +.quoteblock { margin: 0 0 1.25em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; } +.quoteblock blockquote { margin: 0 0 1.25em 0; padding: 0 0 0.5625em 0; border: 0; } +.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } +.quoteblock .attribution { margin-top: -.25em; padding-bottom: 0.5625em; font-size: inherit; color: #555555; } +.quoteblock .attribution br { display: none; } +.quoteblock .attribution cite { display: block; margin-bottom: 0.625em; } + +table thead th, table tfoot th { font-weight: bold; } + +table.tableblock.grid-all { border-collapse: separate; border-spacing: 1px; -webkit-border-radius: 4px; border-radius: 4px; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; } + +table.tableblock.frame-topbot, table.tableblock.frame-none { border-left: 0; border-right: 0; } + +table.tableblock.frame-sides, table.tableblock.frame-none { border-top: 0; border-bottom: 0; } + +table.tableblock td .paragraph:last-child p, table.tableblock td > p:last-child { margin-bottom: 0; } + +th.tableblock.halign-left, td.tableblock.halign-left { text-align: left; } + +th.tableblock.halign-right, td.tableblock.halign-right { text-align: right; } + +th.tableblock.halign-center, td.tableblock.halign-center { text-align: center; } + +th.tableblock.valign-top, td.tableblock.valign-top { vertical-align: top; } + +th.tableblock.valign-bottom, td.tableblock.valign-bottom { vertical-align: bottom; } + +th.tableblock.valign-middle, td.tableblock.valign-middle { vertical-align: middle; } + +p.tableblock.header { color: #222222; font-weight: bold; } + +td > div.verse { white-space: pre; } + +ol { margin-left: 1.75em; } + +ul li ol { margin-left: 1.5em; } + +dl dd { margin-left: 1.125em; } + +dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; } + +ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.625em; } + +ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; } + +ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.625em; } + +ul.checklist li > p:first-child > i[class^="icon-check"]:first-child, ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } + +ul.checklist li > p:first-child > input[type="checkbox"]:first-child { position: relative; top: 1px; } + +ul.inline { margin: 0 auto 0.625em auto; margin-left: -1.375em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; } +ul.inline > li { list-style: none; float: left; margin-left: 1.375em; display: block; } +ul.inline > li > * { display: block; } + +.unstyled dl dt { font-weight: normal; font-style: normal; } + +ol.arabic { list-style-type: decimal; } + +ol.decimal { list-style-type: decimal-leading-zero; } + +ol.loweralpha { list-style-type: lower-alpha; } + +ol.upperalpha { list-style-type: upper-alpha; } + +ol.lowerroman { list-style-type: lower-roman; } + +ol.upperroman { list-style-type: upper-roman; } + +ol.lowergreek { list-style-type: lower-greek; } + +.hdlist > table, .colist > table { border: 0; background: none; } +.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } + +td.hdlist1 { padding-right: .8em; font-weight: bold; } + +td.hdlist1, td.hdlist2 { vertical-align: top; } + +.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } + +.colist > table tr > td:first-of-type { padding: 0 .8em; line-height: 1; } +.colist > table tr > td:last-of-type { padding: 0.25em 0; } + +.qanda > ol > li > p > em:only-child { color: #00467f; } + +.thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; } + +.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; } +.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; } +.imageblock > .title { margin-bottom: 0; } +.imageblock.thumb, .imageblock.th { border-width: 6px; } +.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; } + +.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; } +.image.left { margin-right: 0.625em; } +.image.right { margin-left: 0.625em; } + +a.image { text-decoration: none; } + +span.footnote, span.footnoteref { vertical-align: super; font-size: 0.875em; } +span.footnote a, span.footnoteref a { text-decoration: none; } + +#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; } +#footnotes hr { width: 20%; min-width: 6.25em; margin: -.25em 0 .75em 0; border-width: 1px 0 0 0; } +#footnotes .footnote { padding: 0 0.375em; line-height: 1.3; font-size: 0.875em; margin-left: 1.2em; text-indent: -1.2em; margin-bottom: .2em; } +#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; } +#footnotes .footnote:last-of-type { margin-bottom: 0; } + +#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; } + +.gist .file-data > table { border: none; background: #fff; width: 100%; margin-bottom: 0; } +.gist .file-data > table td.line-data { width: 99%; } + +div.unbreakable { page-break-inside: avoid; } + +.big { font-size: larger; } + +.small { font-size: smaller; } + +.underline { text-decoration: underline; } + +.overline { text-decoration: overline; } + +.line-through { text-decoration: line-through; } + +.aqua { color: #00bfbf; } + +.aqua-background { background-color: #00fafa; } + +.black { color: black; } + +.black-background { background-color: black; } + +.blue { color: #0000bf; } + +.blue-background { background-color: #0000fa; } + +.fuchsia { color: #bf00bf; } + +.fuchsia-background { background-color: #fa00fa; } + +.gray { color: #606060; } + +.gray-background { background-color: #7d7d7d; } + +.green { color: #006000; } + +.green-background { background-color: #007d00; } + +.lime { color: #00bf00; } + +.lime-background { background-color: #00fa00; } + +.maroon { color: #600000; } + +.maroon-background { background-color: #7d0000; } + +.navy { color: #000060; } + +.navy-background { background-color: #00007d; } + +.olive { color: #606000; } + +.olive-background { background-color: #7d7d00; } + +.purple { color: #600060; } + +.purple-background { background-color: #7d007d; } + +.red { color: #bf0000; } + +.red-background { background-color: #fa0000; } + +.silver { color: #909090; } + +.silver-background { background-color: #bcbcbc; } + +.teal { color: #006060; } + +.teal-background { background-color: #007d7d; } + +.white { color: #bfbfbf; } + +.white-background { background-color: #fafafa; } + +.yellow { color: #bfbf00; } + +.yellow-background { background-color: #fafa00; } + +span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } + +.admonitionblock td.icon [class^="icon-"]:before { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; } +.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #005498; color: #003f72; } +.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; } +.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; } +.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; } +.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; } + +.conum { display: inline-block; color: white !important; background-color: #222222; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; width: 20px; height: 20px; font-size: 12px; font-weight: bold; line-height: 20px; font-family: Arial, sans-serif; font-style: normal; position: relative; top: -2px; letter-spacing: -1px; } +.conum * { color: white !important; } +.conum + b { display: none; } +.conum:after { content: attr(data-value); } +.conum:not([data-value]):empty { display: none; } + +.literalblock > .content > pre, .listingblock > .content > pre { -webkit-border-radius: 0; border-radius: 0; } diff --git a/css/base.css b/css/base.css new file mode 100644 index 0000000..68fe241 --- /dev/null +++ b/css/base.css @@ -0,0 +1,52 @@ +/* Sticky footer styles +-------------------------------------------------- */ + +html, +body { + height: 100%; + /* The html and body elements cannot have any padding or margin. */ +} + +/* Wrapper for page content to push down footer */ +#wrap { + min-height: 100%; + height: auto !important; + height: 100%; + /* Negative indent footer by it's height */ + margin: 0 auto -60px; +} + +/* Set the fixed height of the footer here */ +#push, +#footer { + height: 60px; +} +#footer { + background-color: #f5f5f5; + padding: 0; +} + +/* Lastly, apply responsive CSS fixes as necessary */ +@media (max-width: 767px) { + #footer { + margin-left: -20px; + margin-right: -20px; + padding-left: 20px; + padding-right: 20px; + } +} + +/* Custom page CSS +-------------------------------------------------- */ +/* Not required for template or sticky footer method. */ + +#wrap > .container { + padding-top: 60px; +} +.container .credit { + margin: 20px 0; +} + +/*code { + font-size: 80%; +}*/ \ No newline at end of file diff --git a/css/bootstrap-theme.css b/css/bootstrap-theme.css deleted file mode 100644 index df2d3d9..0000000 --- a/css/bootstrap-theme.css +++ /dev/null @@ -1,397 +0,0 @@ -/*! - * Bootstrap v3.0.3 (http://getbootstrap.com) - * Copyright 2013 Twitter, Inc. - * Licensed under http://www.apache.org/licenses/LICENSE-2.0 - */ - -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-default:active, -.btn-primary:active, -.btn-success:active, -.btn-info:active, -.btn-warning:active, -.btn-danger:active, -.btn-default.active, -.btn-primary.active, -.btn-success.active, -.btn-info.active, -.btn-warning.active, -.btn-danger.active { - -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:active, -.btn.active { - background-image: none; -} - -.btn-default { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); - background-repeat: repeat-x; - border-color: #dbdbdb; - border-color: #ccc; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-default:hover, -.btn-default:focus { - background-color: #e0e0e0; - background-position: 0 -15px; -} - -.btn-default:active, -.btn-default.active { - background-color: #e0e0e0; - border-color: #dbdbdb; -} - -.btn-primary { - background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); - background-repeat: repeat-x; - border-color: #2b669a; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-primary:hover, -.btn-primary:focus { - background-color: #2d6ca2; - background-position: 0 -15px; -} - -.btn-primary:active, -.btn-primary.active { - background-color: #2d6ca2; - border-color: #2b669a; -} - -.btn-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); - background-repeat: repeat-x; - border-color: #3e8f3e; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-success:hover, -.btn-success:focus { - background-color: #419641; - background-position: 0 -15px; -} - -.btn-success:active, -.btn-success.active { - background-color: #419641; - border-color: #3e8f3e; -} - -.btn-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); - background-repeat: repeat-x; - border-color: #e38d13; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-warning:hover, -.btn-warning:focus { - background-color: #eb9316; - background-position: 0 -15px; -} - -.btn-warning:active, -.btn-warning.active { - background-color: #eb9316; - border-color: #e38d13; -} - -.btn-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); - background-repeat: repeat-x; - border-color: #b92c28; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-danger:hover, -.btn-danger:focus { - background-color: #c12e2a; - background-position: 0 -15px; -} - -.btn-danger:active, -.btn-danger.active { - background-color: #c12e2a; - border-color: #b92c28; -} - -.btn-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); - background-repeat: repeat-x; - border-color: #28a4c9; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-info:hover, -.btn-info:focus { - background-color: #2aabd2; - background-position: 0 -15px; -} - -.btn-info:active, -.btn-info.active { - background-color: #2aabd2; - border-color: #28a4c9; -} - -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-color: #e8e8e8; - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); -} - -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-color: #357ebd; - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); -} - -.navbar-default { - background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); - background-repeat: repeat-x; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); -} - -.navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); -} - -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); -} - -.navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #222222 0%, #282828 100%); - background-image: linear-gradient(to bottom, #222222 0%, #282828 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); -} - -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} - -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.alert-success { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - background-repeat: repeat-x; - border-color: #b2dba1; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); -} - -.alert-info { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - background-repeat: repeat-x; - border-color: #9acfea; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); -} - -.alert-warning { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - background-repeat: repeat-x; - border-color: #f5e79e; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); -} - -.alert-danger { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - background-repeat: repeat-x; - border-color: #dca7a7; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); -} - -.progress { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); -} - -.progress-bar { - background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); -} - -.progress-bar-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); -} - -.progress-bar-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); -} - -.progress-bar-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); -} - -.progress-bar-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); -} - -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} - -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 #3071a9; - background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); - background-repeat: repeat-x; - border-color: #3278b3; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); -} - -.panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.panel-default > .panel-heading { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); -} - -.panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); -} - -.panel-success > .panel-heading { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); -} - -.panel-info > .panel-heading { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); -} - -.panel-warning > .panel-heading { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); -} - -.panel-danger > .panel-heading { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); -} - -.well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - background-repeat: repeat-x; - border-color: #dcdcdc; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); -} \ No newline at end of file diff --git a/css/bootstrap-theme.min.css b/css/bootstrap-theme.min.css deleted file mode 100644 index c7b6d39..0000000 --- a/css/bootstrap-theme.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.0.3 (http://getbootstrap.com) - * Copyright 2013 Twitter, Inc. - * Licensed under http://www.apache.org/licenses/LICENSE-2.0 - */ - -.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-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:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe0e0e0',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);background-repeat:repeat-x;border-color:#2b669a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff2d6ca2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);background-repeat:repeat-x;border-color:#3e8f3e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff419641',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);background-repeat:repeat-x;border-color:#e38d13;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffeb9316',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);background-repeat:repeat-x;border-color:#b92c28;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc12e2a',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);background-repeat:repeat-x;border-color:#28a4c9;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2aabd2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff3f3f3',GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff282828',GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/css/bootstrap.min.css b/css/bootstrap.min.css index c547283..679272d 100644 --- a/css/bootstrap.min.css +++ b/css/bootstrap.min.css @@ -1,7 +1,7 @@ /*! - * Bootstrap v3.0.3 (http://getbootstrap.com) - * Copyright 2013 Twitter, Inc. - * Licensed under http://www.apache.org/licenses/LICENSE-2.0 + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 small,h2 small,h3 small,h1 .small,h2 .small,h3 .small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 small,h5 small,h6 small,h4 .small,h5 .small,h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-primary:hover{color:#3071a9}.text-warning{color:#8a6d3b}.text-warning:hover{color:#66512c}.text-danger{color:#a94442}.text-danger:hover{color:#843534}.text-success{color:#3c763d}.text-success:hover{color:#2b542c}.text-info{color:#31708f}.text-info:hover{color:#245269}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.list-inline>li:first-child{padding-left:0}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small,blockquote .small{display:block;line-height:1.428571429;color:#999}blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small,blockquote.pull-right .small{text-align:right}blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.428571429}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}@media(min-width:768px){.container{width:750px}}@media(min-width:992px){.container{width:970px}}@media(min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.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{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.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{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666666666666%}.col-xs-10{width:83.33333333333334%}.col-xs-9{width:75%}.col-xs-8{width:66.66666666666666%}.col-xs-7{width:58.333333333333336%}.col-xs-6{width:50%}.col-xs-5{width:41.66666666666667%}.col-xs-4{width:33.33333333333333%}.col-xs-3{width:25%}.col-xs-2{width:16.666666666666664%}.col-xs-1{width:8.333333333333332%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666666666666%}.col-xs-pull-10{right:83.33333333333334%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666666666666%}.col-xs-pull-7{right:58.333333333333336%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666666666667%}.col-xs-pull-4{right:33.33333333333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.666666666666664%}.col-xs-pull-1{right:8.333333333333332%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666666666666%}.col-xs-push-10{left:83.33333333333334%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666666666666%}.col-xs-push-7{left:58.333333333333336%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666666666667%}.col-xs-push-4{left:33.33333333333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.666666666666664%}.col-xs-push-1{left:8.333333333333332%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666666666666%}.col-xs-offset-10{margin-left:83.33333333333334%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666666666666%}.col-xs-offset-7{margin-left:58.333333333333336%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666666666667%}.col-xs-offset-4{margin-left:33.33333333333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.666666666666664%}.col-xs-offset-1{margin-left:8.333333333333332%}.col-xs-offset-0{margin-left:0}@media(min-width:768px){.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{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666666666666%}.col-sm-10{width:83.33333333333334%}.col-sm-9{width:75%}.col-sm-8{width:66.66666666666666%}.col-sm-7{width:58.333333333333336%}.col-sm-6{width:50%}.col-sm-5{width:41.66666666666667%}.col-sm-4{width:33.33333333333333%}.col-sm-3{width:25%}.col-sm-2{width:16.666666666666664%}.col-sm-1{width:8.333333333333332%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666666666666%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666666666666%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-0{margin-left:0}}@media(min-width:992px){.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{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666666666666%}.col-md-10{width:83.33333333333334%}.col-md-9{width:75%}.col-md-8{width:66.66666666666666%}.col-md-7{width:58.333333333333336%}.col-md-6{width:50%}.col-md-5{width:41.66666666666667%}.col-md-4{width:33.33333333333333%}.col-md-3{width:25%}.col-md-2{width:16.666666666666664%}.col-md-1{width:8.333333333333332%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666666666666%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666666666666%}.col-md-push-10{left:83.33333333333334%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666666666666%}.col-md-push-7{left:58.333333333333336%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666666666667%}.col-md-push-4{left:33.33333333333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.666666666666664%}.col-md-push-1{left:8.333333333333332%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666666666666%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-0{margin-left:0}}@media(min-width:1200px){.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{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666666666666%}.col-lg-10{width:83.33333333333334%}.col-lg-9{width:75%}.col-lg-8{width:66.66666666666666%}.col-lg-7{width:58.333333333333336%}.col-lg-6{width:50%}.col-lg-5{width:41.66666666666667%}.col-lg-4{width:33.33333333333333%}.col-lg-3{width:25%}.col-lg-2{width:16.666666666666664%}.col-lg-1{width:8.333333333333332%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666666666666%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666666666666%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{position:static;display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>.active,.table>tbody>tr>.active,.table>tfoot>tr>.active,.table>thead>.active>td,.table>tbody>.active>td,.table>tfoot>.active>td,.table>thead>.active>th,.table>tbody>.active>th,.table>tfoot>.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>.active:hover,.table-hover>tbody>.active:hover>td,.table-hover>tbody>.active:hover>th{background-color:#e8e8e8}.table>thead>tr>.success,.table>tbody>tr>.success,.table>tfoot>tr>.success,.table>thead>.success>td,.table>tbody>.success>td,.table>tfoot>.success>td,.table>thead>.success>th,.table>tbody>.success>th,.table>tfoot>.success>th{background-color:#dff0d8}.table-hover>tbody>tr>.success:hover,.table-hover>tbody>.success:hover>td,.table-hover>tbody>.success:hover>th{background-color:#d0e9c6}.table>thead>tr>.danger,.table>tbody>tr>.danger,.table>tfoot>tr>.danger,.table>thead>.danger>td,.table>tbody>.danger>td,.table>tfoot>.danger>td,.table>thead>.danger>th,.table>tbody>.danger>th,.table>tfoot>.danger>th{background-color:#f2dede}.table-hover>tbody>tr>.danger:hover,.table-hover>tbody>.danger:hover>td,.table-hover>tbody>.danger:hover>th{background-color:#ebcccc}.table>thead>tr>.warning,.table>tbody>tr>.warning,.table>tfoot>tr>.warning,.table>thead>.warning>td,.table>tbody>.warning>td,.table>tfoot>.warning>td,.table>thead>.warning>th,.table>tbody>.warning>th,.table>tfoot>.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>.warning:hover,.table-hover>tbody>.warning:hover>td,.table-hover>tbody>.warning:hover>th{background-color:#faf2cc}@media(max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline select.form-control{width:auto}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-control-static{padding-top:7px}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.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.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#fff}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');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')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;-moz-osx-font-smoothing:grayscale}.glyphicon:empty{width:1em}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-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-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn:first-child>.btn{margin-right:-1px}.input-group-btn:last-child>.btn{margin-left:-1px}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form select.form-control{width:auto}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{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);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);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{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);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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{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);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)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{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);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)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{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);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)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child th,.panel>.table>tbody:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:last-child>th,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:last-child>td,.panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,tr.visible-xs,th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}table.visible-xs.visible-sm{display:table}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}table.visible-xs.visible-md{display:table}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}table.visible-xs.visible-lg{display:table}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm,tr.visible-sm,th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}table.visible-sm.visible-xs{display:table}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}table.visible-sm.visible-md{display:table}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}table.visible-sm.visible-lg{display:table}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md,tr.visible-md,th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}table.visible-md.visible-xs{display:table}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}table.visible-md.visible-sm{display:table}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}table.visible-md.visible-lg{display:table}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg,tr.visible-lg,th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}table.visible-lg.visible-xs{display:table}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}table.visible-lg.visible-sm{display:table}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}table.visible-lg.visible-md{display:table}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}table.hidden-xs{display:table}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs,tr.hidden-xs,th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md,tr.hidden-xs.hidden-md,th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}table.hidden-sm{display:table}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm,tr.hidden-sm,th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md,tr.hidden-sm.hidden-md,th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}table.hidden-md{display:table}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs,tr.hidden-md.hidden-xs,th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,tr.hidden-md.hidden-sm,th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md,tr.hidden-md,th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg,tr.hidden-md.hidden-lg,th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}table.hidden-lg{display:table}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs,tr.hidden-lg.hidden-xs,th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm,tr.hidden-lg.hidden-sm,th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md,tr.hidden-lg.hidden-md,th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg,tr.hidden-lg,th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print,tr.visible-print,th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print,tr.hidden-print,th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file +/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.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{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.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{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.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{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.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{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.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{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);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')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{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);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);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{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);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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{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);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)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{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);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)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{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);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)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/css/prettify.css b/css/prettify.css new file mode 100644 index 0000000..805d39b --- /dev/null +++ b/css/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/css/scribble.css b/css/scribble.css deleted file mode 100644 index 44269cd..0000000 --- a/css/scribble.css +++ /dev/null @@ -1,218 +0,0 @@ -body { - padding-top: 0px; - background-color: #999; - background-image: url("../img/background.png"); - background-position: 0px 0px; - font: 13px/1.5 'Droid Sans',Arial,'Liberation Sans',FreeSans,sans-serif; -} - -.container { - margin-top: 30px; - background-color: #1e2e48; - padding: 0px; - border-radius: 8px 8px 8px 8px; - -webkit-border-radius: 6px 6px 6px 6px; -} - -.container .inner { - background-color: #eee; - padding: 20px; -} - -.footer { - border-top: 1px solid black; - color: white; - padding: 5px; - padding-right: 30px; - text-align: right; - font-size: 18px; - text-shadow: 1px 1px 1px #222; -} - -/* Main marketing message and sign up button */ -.container .jumbotron { - padding-top: 20px; - text-align: center; - background-color: transparent; - background-image: url('../imgs/scribble-banner-1180px.png'); - color: white; - border-radius: 6px 6px 0px 0px; - -webkit-border-radius: 6px 6px 0px 0px; - height: 110px; - margin-bottom: 0px; -} - -.container .jumbotron .btn { - font-size: 18px; - padding: 14px 24px; - width: 200px; -} - -.jumbotron .btn { - background-color: hsl(360, 50%, 29%) !important; - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#bb3e3e", endColorstr="#6e2424"); - background-image: -khtml-gradient(linear, left top, left bottom, from(#bb3e3e), to(#6e2424)); - background-image: -moz-linear-gradient(top, #bb3e3e, #6e2424); - background-image: -ms-linear-gradient(top, #bb3e3e, #6e2424); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #bb3e3e), color-stop(100%, #6e2424)); - background-image: -webkit-linear-gradient(top, #bb3e3e, #6e2424); - background-image: -o-linear-gradient(top, #bb3e3e, #6e2424); - background-image: linear-gradient(#bb3e3e, #6e2424); - border-color: #6e2424 #6e2424 hsl(360, 50%, 24%); - color: #fff !important; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.33); - -webkit-font-smoothing: antialiased; -} -.jumbotron .btn:hover { - background-color: hsl(360, 52%, 26%) !important; - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#b23838", endColorstr="#641f1f"); - background-image: -khtml-gradient(linear, left top, left bottom, from(#b23838), to(#641f1f)); - background-image: -moz-linear-gradient(top, #b23838, #641f1f); - background-image: -ms-linear-gradient(top, #b23838, #641f1f); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b23838), color-stop(100%, #641f1f)); - background-image: -webkit-linear-gradient(top, #b23838, #641f1f); - background-image: -o-linear-gradient(top, #b23838, #641f1f); - background-image: linear-gradient(#b23838, #641f1f); - border-color: #641f1f #641f1f hsl(360, 52%, 21%); -} - -.inner h1 { - font-size: 56px; -} - -.inner .features { - padding: 40px; - padding-top: 20px; - border-bottom: 1px solid #ccc; - margin-left: -20px; - margin-right: -20px; -} - -.inner .features h3 { - text-align: center; - letter-spacing: -1px; - font-weight: bold; - text-shadow: 1px 1px 1px white; - font-size: 24px; -} - -.inner .features p { - line-height: 18px; - font-size: 15px; - text-align: center; - color: #666; -} - -.inner .community { - padding-top: 10px; - background-color: transparent; - padding: 20px; -} - -.inner .community .citem { - padding: 6px; - padding-bottom: 15px; -} - -.inner .community .citem h3 { - text-shadow: 1px 1px 1px white; - border-bottom: 1px solid #ddd; -} - -.inner .community .citem .version { - font-weight: bold; - color: #444; -} - -.inner .community .citem p { - line-height: 16px; -} - -.inner .community .citem .links { - color: #666; -} - -.inner .community .citem .links a { - font-weight: bold; -} - -.inner .community .minor h3 { - color: #888; - text-shadow: none; -} - -.inner .community .minor .version { - color: #999; -} - -.inner .community .minor p { - color: #999; -} - -.inner .collaborators { - background-color: white; - padding: 40px; - padding-top: 20px; - border-bottom: 1px solid #ccc; - margin-left: -20px; - margin-right: -20px; -} - - -@media ( min-width : 768px) { - .nav-justified { - max-height: 52px; - } - .nav-justified>li>a { - border-left: 1px solid #fff; - border-right: 1px solid #d5d5d5; - } - .nav-justified>li:first-child>a { - border-left: 0; - border-radius: 5px 0 0 5px; - } - .nav-justified>li:last-child>a { - border-radius: 0 5px 5px 0; - border-right: 0; - } -} - - -/* Responsive: Portrait tablets and up */ -@media screen and ( min-width: 768px ) { -} - - -@media ( max-width: 767px ) { - .container { - border-radius: 0px; - -webkit-border-radius: 0px; - margin-top: 0px; - } - .container .jumbotron { - border-radius: 0px; - -webkit-border-radius: 0px; - } - .jumbotron h1 { - font-size: 32px; - } - .inner .features { - padding: 20px; - padding-top: 0px; - } -} - - -@media ( max-width: 480px ) { - .container .jumbotron .lead { - display:none; - } - .container .jumbotron .btn { - margin-top: 5px; - } - .hide-480 { - display: none; - } -} diff --git a/css/bootstrap.css b/css/styles.css similarity index 55% rename from css/bootstrap.css rename to css/styles.css index bbda4ee..ed9939e 100644 --- a/css/bootstrap.css +++ b/css/styles.css @@ -1,15 +1,14 @@ -/*! - * Bootstrap v3.0.0 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */ - -/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ - +@import url(//fonts.googleapis.com/css?family=Open+Sans:300,400,600); +@import url(//fonts.googleapis.com/css?family=Exo+2:400,300,600); +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} article, aside, details, @@ -19,206 +18,178 @@ footer, header, hgroup, main, +menu, nav, section, summary { display: block; } - audio, canvas, +progress, video { display: inline-block; + vertical-align: baseline; } - audio:not([controls]) { display: none; height: 0; } - -[hidden] { +[hidden], +template { display: none; } - -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - margin: 0; -} - -a:focus { - outline: thin dotted; +a { + background-color: transparent; } - a:active, a:hover { outline: 0; } - -h1 { - margin: 0.67em 0; - font-size: 2em; -} - abbr[title] { border-bottom: 1px dotted; } - b, strong { font-weight: bold; } - dfn { font-style: italic; } - -hr { - height: 0; - -moz-box-sizing: content-box; - box-sizing: content-box; +h1 { + font-size: 2em; + margin: 0.67em 0; } - mark { - color: #000; background: #ff0; + color: #000; } - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -pre { - white-space: pre-wrap; -} - -q { - quotes: "\201C" "\201D" "\2018" "\2019"; -} - small { font-size: 80%; } - sub, sup { - position: relative; font-size: 75%; line-height: 0; + position: relative; vertical-align: baseline; } - sup { top: -0.5em; } - sub { bottom: -0.25em; } - img { border: 0; } - svg:not(:root) { overflow: hidden; } - figure { - margin: 0; + margin: 1em 40px; } - -fieldset { - padding: 0.35em 0.625em 0.75em; - margin: 0 2px; - border: 1px solid #c0c0c0; +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; } - -legend { - padding: 0; - border: 0; +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; } - button, input, +optgroup, select, textarea { + color: inherit; + font: inherit; margin: 0; - font-family: inherit; - font-size: 100%; } - -button, -input { - line-height: normal; +button { + overflow: visible; } - button, select { text-transform: none; } - button, html input[type="button"], input[type="reset"], input[type="submit"] { - cursor: pointer; -webkit-appearance: button; + cursor: pointer; } - button[disabled], html input[disabled] { cursor: default; } - +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} input[type="checkbox"], input[type="radio"] { - padding: 0; box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; } - input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; } - input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { border: 0; + padding: 0; } - textarea { overflow: auto; - vertical-align: top; } - +optgroup { + font-weight: bold; +} table { border-collapse: collapse; border-spacing: 0; } - +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ @media print { - * { - color: #000 !important; - text-shadow: none !important; + *, + *:before, + *:after { background: transparent !important; + color: #000 !important; box-shadow: none !important; + text-shadow: none !important; } a, a:visited { @@ -230,9 +201,8 @@ table { abbr[title]:after { content: " (" attr(title) ")"; } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { + a[href^="#"]:after, + a[href^="javascript:"]:after { content: ""; } pre, @@ -250,9 +220,6 @@ table { img { max-width: 100% !important; } - @page { - margin: 2cm .5cm; - } p, h2, h3 { @@ -263,13 +230,12 @@ table { h3 { page-break-after: avoid; } + select { + background: #fff !important; + } .navbar { display: none; } - .table td, - .table th { - background-color: #fff !important; - } .btn > .caret, .dropup > .btn > .caret { border-top-color: #000 !important; @@ -280,2947 +246,2965 @@ table { .table { border-collapse: collapse !important; } + .table td, + .table th { + background-color: #fff !important; + } .table-bordered th, .table-bordered td { border: 1px solid #ddd !important; } } - -*, -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('fonts/glyphicons-halflings-regular.eot'); + 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'); } - -html { - font-size: 62.5%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } - -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.428571429; - color: #333333; - background-color: #ffffff; +.glyphicon-asterisk:before { + content: "\2a"; } - -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; +.glyphicon-plus:before { + content: "\2b"; } - -button, -input, -select[multiple], -textarea { - background-image: none; +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; } - -a { - color: #428bca; - text-decoration: none; +.glyphicon-minus:before { + content: "\2212"; } - -a:hover, -a:focus { - color: #2a6496; - text-decoration: underline; +.glyphicon-cloud:before { + content: "\2601"; } - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; +.glyphicon-envelope:before { + content: "\2709"; } - -img { - vertical-align: middle; +.glyphicon-pencil:before { + content: "\270f"; } - -.img-responsive { - display: block; - height: auto; - max-width: 100%; +.glyphicon-glass:before { + content: "\e001"; } - -.img-rounded { - border-radius: 6px; +.glyphicon-music:before { + content: "\e002"; } - -.img-thumbnail { - display: inline-block; - height: auto; - max-width: 100%; - padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; +.glyphicon-search:before { + content: "\e003"; } - -.img-circle { - border-radius: 50%; +.glyphicon-heart:before { + content: "\e005"; } - -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; +.glyphicon-star:before { + content: "\e006"; } - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0 0 0 0); - border: 0; +.glyphicon-star-empty:before { + content: "\e007"; } - -p { - margin: 0 0 10px; +.glyphicon-user:before { + content: "\e008"; } - -.lead { - margin-bottom: 20px; - font-size: 16.099999999999998px; - font-weight: 200; - line-height: 1.4; +.glyphicon-film:before { + content: "\e009"; } - -@media (min-width: 768px) { - .lead { - font-size: 21px; - } +.glyphicon-th-large:before { + content: "\e010"; } - -small { - font-size: 85%; +.glyphicon-th:before { + content: "\e011"; } - -cite { - font-style: normal; +.glyphicon-th-list:before { + content: "\e012"; } - -.text-muted { - color: #999999; +.glyphicon-ok:before { + content: "\e013"; } - -.text-primary { - color: #428bca; +.glyphicon-remove:before { + content: "\e014"; } - -.text-warning { - color: #c09853; +.glyphicon-zoom-in:before { + content: "\e015"; } - -.text-danger { - color: #b94a48; +.glyphicon-zoom-out:before { + content: "\e016"; } - -.text-success { - color: #468847; +.glyphicon-off:before { + content: "\e017"; } - -.text-info { - color: #3a87ad; +.glyphicon-signal:before { + content: "\e018"; } - -.text-left { - text-align: left; +.glyphicon-cog:before { + content: "\e019"; } - -.text-right { - text-align: right; +.glyphicon-trash:before { + content: "\e020"; } - -.text-center { - text-align: center; +.glyphicon-home:before { + content: "\e021"; } - -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 500; - line-height: 1.1; +.glyphicon-file:before { + content: "\e022"; } - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small { - font-weight: normal; - line-height: 1; - color: #999999; +.glyphicon-time:before { + content: "\e023"; } - -h1, -h2, -h3 { - margin-top: 20px; - margin-bottom: 10px; +.glyphicon-road:before { + content: "\e024"; } - -h4, -h5, -h6 { - margin-top: 10px; - margin-bottom: 10px; +.glyphicon-download-alt:before { + content: "\e025"; } - -h1, -.h1 { - font-size: 36px; +.glyphicon-download:before { + content: "\e026"; } - -h2, -.h2 { - font-size: 30px; +.glyphicon-upload:before { + content: "\e027"; } - -h3, -.h3 { - font-size: 24px; +.glyphicon-inbox:before { + content: "\e028"; } - -h4, -.h4 { - font-size: 18px; +.glyphicon-play-circle:before { + content: "\e029"; } - -h5, -.h5 { - font-size: 14px; +.glyphicon-repeat:before { + content: "\e030"; } - -h6, -.h6 { - font-size: 12px; +.glyphicon-refresh:before { + content: "\e031"; } - -h1 small, -.h1 small { - font-size: 24px; +.glyphicon-list-alt:before { + content: "\e032"; } - -h2 small, -.h2 small { - font-size: 18px; +.glyphicon-lock:before { + content: "\e033"; } - -h3 small, -.h3 small, -h4 small, -.h4 small { - font-size: 14px; +.glyphicon-flag:before { + content: "\e034"; } - -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; +.glyphicon-headphones:before { + content: "\e035"; } - -ul, -ol { - margin-top: 0; - margin-bottom: 10px; +.glyphicon-volume-off:before { + content: "\e036"; } - -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; +.glyphicon-volume-down:before { + content: "\e037"; } - -.list-unstyled { - padding-left: 0; - list-style: none; +.glyphicon-volume-up:before { + content: "\e038"; } - -.list-inline { - padding-left: 0; - list-style: none; +.glyphicon-qrcode:before { + content: "\e039"; } - -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; +.glyphicon-barcode:before { + content: "\e040"; } - -dl { - margin-bottom: 20px; +.glyphicon-tag:before { + content: "\e041"; } - -dt, -dd { - line-height: 1.428571429; +.glyphicon-tags:before { + content: "\e042"; } - -dt { - font-weight: bold; +.glyphicon-book:before { + content: "\e043"; } - -dd { - margin-left: 0; +.glyphicon-bookmark:before { + content: "\e044"; } - -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } +.glyphicon-print:before { + content: "\e045"; } - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; +.glyphicon-camera:before { + content: "\e046"; } - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; +.glyphicon-font:before { + content: "\e047"; } - -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; +.glyphicon-bold:before { + content: "\e048"; } - -blockquote p { - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; +.glyphicon-italic:before { + content: "\e049"; } - -blockquote p:last-child { - margin-bottom: 0; +.glyphicon-text-height:before { + content: "\e050"; } - -blockquote small { - display: block; - line-height: 1.428571429; - color: #999999; +.glyphicon-text-width:before { + content: "\e051"; } - -blockquote small:before { - content: '\2014 \00A0'; +.glyphicon-align-left:before { + content: "\e052"; } - -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; +.glyphicon-align-center:before { + content: "\e053"; } - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; +.glyphicon-align-right:before { + content: "\e054"; } - -blockquote.pull-right small:before { - content: ''; +.glyphicon-align-justify:before { + content: "\e055"; } - -blockquote.pull-right small:after { - content: '\00A0 \2014'; +.glyphicon-list:before { + content: "\e056"; } - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; +.glyphicon-indent-left:before { + content: "\e057"; } - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 1.428571429; +.glyphicon-indent-right:before { + content: "\e058"; } - -code, -pre { - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +.glyphicon-facetime-video:before { + content: "\e059"; } - -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - white-space: nowrap; - background-color: #f9f2f4; - border-radius: 4px; +.glyphicon-picture:before { + content: "\e060"; } - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.428571429; - color: #333333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; +.glyphicon-map-marker:before { + content: "\e062"; } - -pre.prettyprint { - margin-bottom: 20px; +.glyphicon-adjust:before { + content: "\e063"; } - -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border: 0; +.glyphicon-tint:before { + content: "\e064"; } - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; +.glyphicon-edit:before { + content: "\e065"; } - -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; +.glyphicon-share:before { + content: "\e066"; } - -.container:before, -.container:after { - display: table; - content: " "; +.glyphicon-check:before { + content: "\e067"; } - -.container:after { - clear: both; +.glyphicon-move:before { + content: "\e068"; } - -.container:before, -.container:after { - display: table; - content: " "; +.glyphicon-step-backward:before { + content: "\e069"; } - -.container:after { - clear: both; +.glyphicon-fast-backward:before { + content: "\e070"; } - -.row { - margin-right: -15px; - margin-left: -15px; +.glyphicon-backward:before { + content: "\e071"; } - -.row:before, -.row:after { - display: table; - content: " "; +.glyphicon-play:before { + content: "\e072"; } - -.row:after { - clear: both; +.glyphicon-pause:before { + content: "\e073"; } - -.row:before, -.row:after { - display: table; - content: " "; +.glyphicon-stop:before { + content: "\e074"; } - -.row:after { - clear: both; +.glyphicon-forward:before { + content: "\e075"; } - -.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, -.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, -.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, -.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 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; +.glyphicon-fast-forward:before { + content: "\e076"; } - -.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 { - float: left; +.glyphicon-step-forward:before { + content: "\e077"; } - -.col-xs-1 { - width: 8.333333333333332%; +.glyphicon-eject:before { + content: "\e078"; } - -.col-xs-2 { - width: 16.666666666666664%; +.glyphicon-chevron-left:before { + content: "\e079"; } - -.col-xs-3 { - width: 25%; +.glyphicon-chevron-right:before { + content: "\e080"; } - -.col-xs-4 { - width: 33.33333333333333%; +.glyphicon-plus-sign:before { + content: "\e081"; } - -.col-xs-5 { - width: 41.66666666666667%; +.glyphicon-minus-sign:before { + content: "\e082"; } - -.col-xs-6 { - width: 50%; +.glyphicon-remove-sign:before { + content: "\e083"; } - -.col-xs-7 { - width: 58.333333333333336%; +.glyphicon-ok-sign:before { + content: "\e084"; } - -.col-xs-8 { - width: 66.66666666666666%; +.glyphicon-question-sign:before { + content: "\e085"; } - -.col-xs-9 { - width: 75%; +.glyphicon-info-sign:before { + content: "\e086"; } - -.col-xs-10 { - width: 83.33333333333334%; +.glyphicon-screenshot:before { + content: "\e087"; } - -.col-xs-11 { - width: 91.66666666666666%; +.glyphicon-remove-circle:before { + content: "\e088"; } - -.col-xs-12 { - width: 100%; +.glyphicon-ok-circle:before { + content: "\e089"; } - -@media (min-width: 768px) { - .container { - max-width: 750px; - } - .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 { - float: left; - } - .col-sm-1 { - width: 8.333333333333332%; - } - .col-sm-2 { - width: 16.666666666666664%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-4 { - width: 33.33333333333333%; - } - .col-sm-5 { - width: 41.66666666666667%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-7 { - width: 58.333333333333336%; - } - .col-sm-8 { - width: 66.66666666666666%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-10 { - width: 83.33333333333334%; - } - .col-sm-11 { - width: 91.66666666666666%; - } - .col-sm-12 { - width: 100%; - } - .col-sm-push-1 { - left: 8.333333333333332%; - } - .col-sm-push-2 { - left: 16.666666666666664%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-4 { - left: 33.33333333333333%; - } - .col-sm-push-5 { - left: 41.66666666666667%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-7 { - left: 58.333333333333336%; - } - .col-sm-push-8 { - left: 66.66666666666666%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-10 { - left: 83.33333333333334%; - } - .col-sm-push-11 { - left: 91.66666666666666%; - } - .col-sm-pull-1 { - right: 8.333333333333332%; - } - .col-sm-pull-2 { - right: 16.666666666666664%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-4 { - right: 33.33333333333333%; - } - .col-sm-pull-5 { - right: 41.66666666666667%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-7 { - right: 58.333333333333336%; - } - .col-sm-pull-8 { - right: 66.66666666666666%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-10 { - right: 83.33333333333334%; - } - .col-sm-pull-11 { - right: 91.66666666666666%; - } - .col-sm-offset-1 { - margin-left: 8.333333333333332%; - } - .col-sm-offset-2 { - margin-left: 16.666666666666664%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-4 { - margin-left: 33.33333333333333%; - } - .col-sm-offset-5 { - margin-left: 41.66666666666667%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-7 { - margin-left: 58.333333333333336%; - } - .col-sm-offset-8 { - margin-left: 66.66666666666666%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-10 { - margin-left: 83.33333333333334%; - } - .col-sm-offset-11 { - margin-left: 91.66666666666666%; - } +.glyphicon-ban-circle:before { + content: "\e090"; } - -@media (min-width: 992px) { - .container { - max-width: 970px; - } - .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 { - float: left; - } - .col-md-1 { - width: 8.333333333333332%; - } - .col-md-2 { - width: 16.666666666666664%; - } - .col-md-3 { - width: 25%; - } - .col-md-4 { - width: 33.33333333333333%; - } - .col-md-5 { - width: 41.66666666666667%; - } - .col-md-6 { - width: 50%; - } - .col-md-7 { - width: 58.333333333333336%; - } - .col-md-8 { - width: 66.66666666666666%; - } - .col-md-9 { - width: 75%; - } - .col-md-10 { - width: 83.33333333333334%; - } - .col-md-11 { - width: 91.66666666666666%; - } - .col-md-12 { - width: 100%; - } - .col-md-push-0 { - left: auto; - } - .col-md-push-1 { - left: 8.333333333333332%; - } - .col-md-push-2 { - left: 16.666666666666664%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-4 { - left: 33.33333333333333%; - } - .col-md-push-5 { - left: 41.66666666666667%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-7 { - left: 58.333333333333336%; - } - .col-md-push-8 { - left: 66.66666666666666%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-10 { - left: 83.33333333333334%; - } - .col-md-push-11 { - left: 91.66666666666666%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-pull-1 { - right: 8.333333333333332%; - } - .col-md-pull-2 { - right: 16.666666666666664%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-4 { - right: 33.33333333333333%; - } - .col-md-pull-5 { - right: 41.66666666666667%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-7 { - right: 58.333333333333336%; - } - .col-md-pull-8 { - right: 66.66666666666666%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-10 { - right: 83.33333333333334%; - } - .col-md-pull-11 { - right: 91.66666666666666%; - } - .col-md-offset-0 { - margin-left: 0; - } - .col-md-offset-1 { - margin-left: 8.333333333333332%; - } - .col-md-offset-2 { - margin-left: 16.666666666666664%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-4 { - margin-left: 33.33333333333333%; - } - .col-md-offset-5 { - margin-left: 41.66666666666667%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-7 { - margin-left: 58.333333333333336%; - } - .col-md-offset-8 { - margin-left: 66.66666666666666%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-10 { - margin-left: 83.33333333333334%; - } - .col-md-offset-11 { - margin-left: 91.66666666666666%; - } +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; } - -@media (min-width: 1200px) { - .container { - max-width: 1170px; - } - .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 { - float: left; - } - .col-lg-1 { - width: 8.333333333333332%; - } - .col-lg-2 { - width: 16.666666666666664%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-4 { - width: 33.33333333333333%; - } - .col-lg-5 { - width: 41.66666666666667%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-7 { - width: 58.333333333333336%; - } - .col-lg-8 { - width: 66.66666666666666%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-10 { - width: 83.33333333333334%; - } - .col-lg-11 { - width: 91.66666666666666%; - } - .col-lg-12 { - width: 100%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-push-1 { - left: 8.333333333333332%; - } - .col-lg-push-2 { - left: 16.666666666666664%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-4 { - left: 33.33333333333333%; - } - .col-lg-push-5 { - left: 41.66666666666667%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-7 { - left: 58.333333333333336%; - } - .col-lg-push-8 { - left: 66.66666666666666%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-10 { - left: 83.33333333333334%; - } - .col-lg-push-11 { - left: 91.66666666666666%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-pull-1 { - right: 8.333333333333332%; - } - .col-lg-pull-2 { - right: 16.666666666666664%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-4 { - right: 33.33333333333333%; - } - .col-lg-pull-5 { - right: 41.66666666666667%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-7 { - right: 58.333333333333336%; - } - .col-lg-pull-8 { - right: 66.66666666666666%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-10 { - right: 83.33333333333334%; - } - .col-lg-pull-11 { - right: 91.66666666666666%; - } - .col-lg-offset-0 { - margin-left: 0; - } - .col-lg-offset-1 { - margin-left: 8.333333333333332%; - } - .col-lg-offset-2 { - margin-left: 16.666666666666664%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-4 { - margin-left: 33.33333333333333%; - } - .col-lg-offset-5 { - margin-left: 41.66666666666667%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-7 { - margin-left: 58.333333333333336%; - } - .col-lg-offset-8 { - margin-left: 66.66666666666666%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-10 { - margin-left: 83.33333333333334%; - } - .col-lg-offset-11 { - margin-left: 91.66666666666666%; - } +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; } - -table { - max-width: 100%; - background-color: transparent; +.glyphicon-unchecked:before { + content: "\e157"; } - -th { - text-align: left; +.glyphicon-expand:before { + content: "\e158"; } - -.table { - width: 100%; - margin-bottom: 20px; +.glyphicon-collapse-down:before { + content: "\e159"; } - -.table thead > tr > th, -.table tbody > tr > th, -.table tfoot > tr > th, -.table thead > tr > td, -.table tbody > tr > td, -.table tfoot > tr > td { - padding: 8px; - line-height: 1.428571429; - vertical-align: top; - border-top: 1px solid #dddddd; +.glyphicon-collapse-up:before { + content: "\e160"; } - -.table thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; +.glyphicon-log-in:before { + content: "\e161"; } - -.table caption + thead tr:first-child th, -.table colgroup + thead tr:first-child th, -.table thead:first-child tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child td { - border-top: 0; +.glyphicon-flash:before { + content: "\e162"; } - -.table tbody + tbody { - border-top: 2px solid #dddddd; +.glyphicon-log-out:before { + content: "\e163"; } - -.table .table { - background-color: #ffffff; +.glyphicon-new-window:before { + content: "\e164"; } - -.table-condensed thead > tr > th, -.table-condensed tbody > tr > th, -.table-condensed tfoot > tr > th, -.table-condensed thead > tr > td, -.table-condensed tbody > tr > td, -.table-condensed tfoot > tr > td { - padding: 5px; +.glyphicon-record:before { + content: "\e165"; } - -.table-bordered { - border: 1px solid #dddddd; +.glyphicon-save:before { + content: "\e166"; } - -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; +.glyphicon-open:before { + content: "\e167"; } - -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; +.glyphicon-saved:before { + content: "\e168"; } - -.table-striped > tbody > tr:nth-child(odd) > td, -.table-striped > tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; +.glyphicon-import:before { + content: "\e169"; } - -.table-hover > tbody > tr:hover > td, -.table-hover > tbody > tr:hover > th { - background-color: #f5f5f5; +.glyphicon-export:before { + content: "\e170"; } - -table col[class*="col-"] { - display: table-column; - float: none; +.glyphicon-send:before { + content: "\e171"; } - -table td[class*="col-"], -table th[class*="col-"] { - display: table-cell; - float: none; +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; } - -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; +.glyphicon-sound-stereo:before { + content: "\e189"; } - -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; - border-color: #d6e9c6; +.glyphicon-sound-dolby:before { + content: "\e190"; } - -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td { - background-color: #d0e9c6; - border-color: #c9e2b3; +.glyphicon-sound-5-1:before { + content: "\e191"; } - -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; - border-color: #eed3d7; +.glyphicon-sound-6-1:before { + content: "\e192"; } - -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td { - background-color: #ebcccc; - border-color: #e6c1c7; +.glyphicon-sound-7-1:before { + content: "\e193"; } - -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; - border-color: #fbeed5; +.glyphicon-copyright-mark:before { + content: "\e194"; } - -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td { - background-color: #faf2cc; - border-color: #f8e5be; +.glyphicon-registration-mark:before { + content: "\e195"; } - -@media (max-width: 768px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-x: scroll; - overflow-y: hidden; - border: 1px solid #dddddd; - } - .table-responsive > .table { - margin-bottom: 0; - background-color: #fff; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > thead > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > thead > tr:last-child > td, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } +.glyphicon-cloud-download:before { + content: "\e197"; } - -fieldset { - padding: 0; - margin: 0; - border: 0; +.glyphicon-cloud-upload:before { + content: "\e198"; } - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; +.glyphicon-tree-conifer:before { + content: "\e199"; } - -label { - display: inline-block; - margin-bottom: 5px; - font-weight: bold; +.glyphicon-tree-deciduous:before { + content: "\e200"; } - -input[type="search"] { +* { -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - /* IE8-9 */ - - line-height: normal; +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } - -input[type="file"] { - display: block; +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } - -select[multiple], -select[size] { - height: auto; +body { + font-family: 'Open Sans', sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333333; + background-color: #ffffff; } - -select optgroup { +input, +button, +select, +textarea { font-family: inherit; font-size: inherit; - font-style: inherit; + line-height: inherit; } - -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; +a { + color: #428bca; + text-decoration: none; +} +a:hover, +a:focus { + color: #1e3756; + text-decoration: underline; +} +a:focus { + outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } - -input[type="number"]::-webkit-outer-spin-button, -input[type="number"]::-webkit-inner-spin-button { - height: auto; -} - -.form-control:-moz-placeholder { - color: #999999; +figure { + margin: 0; } - -.form-control::-moz-placeholder { - color: #999999; +img { + vertical-align: middle; } - -.form-control:-ms-input-placeholder { - color: #999999; +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; } - -.form-control::-webkit-input-placeholder { - color: #999999; +.img-rounded { + border-radius: 6px; } - -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.428571429; - color: #555555; - vertical-align: middle; +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; background-color: #ffffff; - border: 1px solid #cccccc; + border: 1px solid #dddddd; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -} - -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); -} - -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - cursor: not-allowed; - background-color: #eeeeee; -} - -textarea.form-control { + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; height: auto; } - -.form-group { - margin-bottom: 15px; +.img-circle { + border-radius: 50%; } - -.radio, -.checkbox { - display: block; - min-height: 20px; - padding-left: 20px; - margin-top: 10px; - margin-bottom: 10px; - vertical-align: middle; +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; } - -.radio label, -.checkbox label { - display: inline; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; } - -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - float: left; - margin-left: -20px; +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; } - -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 400; + line-height: 1.1; + color: inherit; } - -.radio-inline, -.checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { font-weight: normal; - vertical-align: middle; - cursor: pointer; + line-height: 1; + color: #777777; } - -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; } - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -.radio[disabled], -.radio-inline[disabled], -.checkbox[disabled], -.checkbox-inline[disabled], -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"], -fieldset[disabled] .radio, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; } - -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; } - -select.input-sm { - height: 30px; - line-height: 30px; +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; } - -textarea.input-sm { - height: auto; +h1, +.h1 { + font-size: 36px; } - -.input-lg { - height: 45px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; +h2, +.h2 { + font-size: 30px; } - -select.input-lg { - height: 45px; - line-height: 45px; +h3, +.h3 { + font-size: 24px; } - -textarea.input-lg { - height: auto; +h4, +.h4 { + font-size: 18px; } - -.has-warning .help-block, -.has-warning .control-label { - color: #c09853; +h5, +.h5 { + font-size: 14px; } - -.has-warning .form-control { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +h6, +.h6 { + font-size: 12px; } - -.has-warning .form-control:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +p { + margin: 0 0 10px; } - -.has-warning .input-group-addon { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; } - -.has-error .help-block, -.has-error .control-label { - color: #b94a48; +@media (min-width: 768px) { + .lead { + font-size: 21px; + } } - -.has-error .form-control { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +small, +.small { + font-size: 85%; } - -.has-error .form-control:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; } - -.has-error .input-group-addon { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; +.text-left { + text-align: left; } - -.has-success .help-block, -.has-success .control-label { - color: #468847; +.text-right { + text-align: right; } - -.has-success .form-control { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +.text-center { + text-align: center; } - -.has-success .form-control:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +.text-justify { + text-align: justify; } - -.has-success .input-group-addon { - color: #468847; - background-color: #dff0d8; - border-color: #468847; +.text-nowrap { + white-space: nowrap; } - -.form-control-static { - padding-top: 7px; - margin-bottom: 0; +.text-lowercase { + text-transform: lowercase; } - -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; +.text-uppercase { + text-transform: uppercase; } - -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } +.text-capitalize { + text-transform: capitalize; } - -.form-horizontal .control-label, -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; +.text-muted { + color: #777777; } - -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; +.text-primary { + color: #428bca; } - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; +a.text-primary:hover { + color: #3d8b40; } - -.form-horizontal .form-group:after { - clear: both; +.text-success { + color: #3c763d; } - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; +a.text-success:hover { + color: #2b542c; } - -.form-horizontal .form-group:after { - clear: both; +.text-info { + color: #31708f; } - -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - } +a.text-info:hover { + color: #245269; } - -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.428571429; - text-align: center; - white-space: nowrap; - vertical-align: middle; - cursor: pointer; - border: 1px solid transparent; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; +.text-warning { + color: #8a6d3b; } - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; +a.text-warning:hover { + color: #66512c; } - -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; +.text-danger { + color: #a94442; } - -.btn:active, -.btn.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); +a.text-danger:hover { + color: #843534; } - -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - pointer-events: none; - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; +.bg-primary { + color: #fff; + background-color: #428bca; } - -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; +a.bg-primary:hover { + background-color: #3d8b40; } - -.btn-default:hover, -.btn-default:focus, -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - color: #333333; - background-color: #ebebeb; - border-color: #adadad; +.bg-success { + background-color: #dff0d8; } - -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - background-image: none; +a.bg-success:hover { + background-color: #c1e2b3; } - -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #ffffff; - border-color: #cccccc; +.bg-info { + background-color: #d9edf7; } - -.btn-primary { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; +a.bg-info:hover { + background-color: #afd9ee; } - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #3276b1; - border-color: #285e8e; +.bg-warning { + background-color: #fcf8e3; } - -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - background-image: none; +a.bg-warning:hover { + background-color: #f7ecb5; } - -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #428bca; - border-color: #357ebd; +.bg-danger { + background-color: #f2dede; } - -.btn-warning { - color: #ffffff; - background-color: #f0ad4e; - border-color: #eea236; +a.bg-danger:hover { + background-color: #e4b9b9; } - -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #ed9c28; - border-color: #d58512; +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; } - -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - background-image: none; +ul, +ol { + margin-top: 0; + margin-bottom: 10px; } - -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; } - -.btn-danger { - color: #ffffff; - background-color: #d9534f; - border-color: #d43f3a; +.list-unstyled { + padding-left: 0; + list-style: none; } - -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #d2322d; - border-color: #ac2925; +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; } - -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - background-image: none; +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; } - -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; +dl { + margin-top: 0; + margin-bottom: 20px; } - -.btn-success { - color: #ffffff; - background-color: #5cb85c; - border-color: #4cae4c; +dt, +dd { + line-height: 1.42857143; } - -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #47a447; - border-color: #398439; +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } } - -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - background-image: none; +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; } - -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; +.initialism { + font-size: 90%; + text-transform: uppercase; } - -.btn-info { - color: #ffffff; - background-color: #5bc0de; - border-color: #46b8da; +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; } - -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #39b3d7; - border-color: #269abc; +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; } - -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - background-image: none; +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; } - -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; } - -.btn-link { - font-weight: normal; - color: #428bca; - cursor: pointer; - border-radius: 0; +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; } - -.btn-link, -.btn-link:active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; } - -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; } - -.btn-link:hover, -.btn-link:focus { - color: #2a6496; - text-decoration: underline; - background-color: transparent; +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; } - -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #999999; - text-decoration: none; +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; } - -.btn-lg { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; } - -.btn-sm, -.btn-xs { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); } - -.btn-xs { - padding: 1px 5px; +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; } - -.btn-block { +pre { display: block; - width: 100%; - padding-right: 0; - padding-left: 0; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; } - -.btn-block + .btn-block { - margin-top: 5px; +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; } - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; } - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; } - -.fade.in { - opacity: 1; +.blog-container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; + padding-bottom: 30px; + padding-top: 30px; } - -.collapse { - display: none; +.blog-mainbanner { + text-align: center; } - -.collapse.in { - display: block; +@media (min-width: 768px) { + .container { + width: 750px; + } + .blog-container { + padding-left: 40px; + padding-right: 40px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } } -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - transition: height 0.35s ease; +@media (min-width: 1200px) { + .container { + width: 1250px; + } + .blog-container { + padding-left: 135px; + padding-right: 135px; + } + } -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - 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'); +@media (min-width: 1500px) { + .container { + width: 1250px; + } + .blog-container { + padding-left: 300px; + padding-right: 300px; + } } -.glyphicon { +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.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 { position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - -webkit-font-smoothing: antialiased; - font-style: normal; - font-weight: normal; - line-height: 1; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; } - -.glyphicon-asterisk:before { - content: "\2a"; +.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 { + float: left; } - -.glyphicon-plus:before { - content: "\2b"; +.col-xs-12 { + width: 100%; } - -.glyphicon-euro:before { - content: "\20ac"; +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; } - -.glyphicon-minus:before { - content: "\2212"; +.col-xs-9 { + width: 75%; } - -.glyphicon-cloud:before { - content: "\2601"; +.col-xs-8 { + width: 66.66666667%; } - -.glyphicon-envelope:before { - content: "\2709"; +.col-xs-7 { + width: 58.33333333%; } - -.glyphicon-pencil:before { - content: "\270f"; +.col-xs-6 { + width: 50%; } - -.glyphicon-glass:before { - content: "\e001"; +.col-xs-5 { + width: 41.66666667%; } - -.glyphicon-music:before { - content: "\e002"; +.col-xs-4 { + width: 33.33333333%; } - -.glyphicon-search:before { - content: "\e003"; +.col-xs-3 { + width: 25%; } - -.glyphicon-heart:before { - content: "\e005"; +.col-xs-2 { + width: 16.66666667%; } - -.glyphicon-star:before { - content: "\e006"; +.col-xs-1 { + width: 8.33333333%; } - -.glyphicon-star-empty:before { - content: "\e007"; +.col-xs-pull-12 { + right: 100%; } - -.glyphicon-user:before { - content: "\e008"; +.col-xs-pull-11 { + right: 91.66666667%; } - -.glyphicon-film:before { - content: "\e009"; +.col-xs-pull-10 { + right: 83.33333333%; } - -.glyphicon-th-large:before { - content: "\e010"; +.col-xs-pull-9 { + right: 75%; } - -.glyphicon-th:before { - content: "\e011"; +.col-xs-pull-8 { + right: 66.66666667%; } - -.glyphicon-th-list:before { - content: "\e012"; +.col-xs-pull-7 { + right: 58.33333333%; } - -.glyphicon-ok:before { - content: "\e013"; +.col-xs-pull-6 { + right: 50%; } - -.glyphicon-remove:before { - content: "\e014"; +.col-xs-pull-5 { + right: 41.66666667%; } - -.glyphicon-zoom-in:before { - content: "\e015"; +.col-xs-pull-4 { + right: 33.33333333%; } - -.glyphicon-zoom-out:before { - content: "\e016"; +.col-xs-pull-3 { + right: 25%; } - -.glyphicon-off:before { - content: "\e017"; +.col-xs-pull-2 { + right: 16.66666667%; } - -.glyphicon-signal:before { - content: "\e018"; +.col-xs-pull-1 { + right: 8.33333333%; } - -.glyphicon-cog:before { - content: "\e019"; +.col-xs-pull-0 { + right: auto; } - -.glyphicon-trash:before { - content: "\e020"; +.col-xs-push-12 { + left: 100%; } - -.glyphicon-home:before { - content: "\e021"; +.col-xs-push-11 { + left: 91.66666667%; } - -.glyphicon-file:before { - content: "\e022"; +.col-xs-push-10 { + left: 83.33333333%; } - -.glyphicon-time:before { - content: "\e023"; +.col-xs-push-9 { + left: 75%; } - -.glyphicon-road:before { - content: "\e024"; +.col-xs-push-8 { + left: 66.66666667%; } - -.glyphicon-download-alt:before { - content: "\e025"; +.col-xs-push-7 { + left: 58.33333333%; } - -.glyphicon-download:before { - content: "\e026"; +.col-xs-push-6 { + left: 50%; } - -.glyphicon-upload:before { - content: "\e027"; +.col-xs-push-5 { + left: 41.66666667%; } - -.glyphicon-inbox:before { - content: "\e028"; +.col-xs-push-4 { + left: 33.33333333%; } - -.glyphicon-play-circle:before { - content: "\e029"; +.col-xs-push-3 { + left: 25%; } - -.glyphicon-repeat:before { - content: "\e030"; +.col-xs-push-2 { + left: 16.66666667%; } - -.glyphicon-refresh:before { - content: "\e031"; +.col-xs-push-1 { + left: 8.33333333%; } - -.glyphicon-list-alt:before { - content: "\e032"; +.col-xs-push-0 { + left: auto; } - -.glyphicon-flag:before { - content: "\e034"; +.col-xs-offset-12 { + margin-left: 100%; } - -.glyphicon-headphones:before { - content: "\e035"; +.col-xs-offset-11 { + margin-left: 91.66666667%; } - -.glyphicon-volume-off:before { - content: "\e036"; +.col-xs-offset-10 { + margin-left: 83.33333333%; } - -.glyphicon-volume-down:before { - content: "\e037"; +.col-xs-offset-9 { + margin-left: 75%; } - -.glyphicon-volume-up:before { - content: "\e038"; +.col-xs-offset-8 { + margin-left: 66.66666667%; } - -.glyphicon-qrcode:before { - content: "\e039"; +.col-xs-offset-7 { + margin-left: 58.33333333%; } - -.glyphicon-barcode:before { - content: "\e040"; +.col-xs-offset-6 { + margin-left: 50%; } - -.glyphicon-tag:before { - content: "\e041"; +.col-xs-offset-5 { + margin-left: 41.66666667%; } - -.glyphicon-tags:before { - content: "\e042"; +.col-xs-offset-4 { + margin-left: 33.33333333%; } - -.glyphicon-book:before { - content: "\e043"; +.col-xs-offset-3 { + margin-left: 25%; } - -.glyphicon-print:before { - content: "\e045"; +.col-xs-offset-2 { + margin-left: 16.66666667%; } - -.glyphicon-font:before { - content: "\e047"; +.col-xs-offset-1 { + margin-left: 8.33333333%; } - -.glyphicon-bold:before { - content: "\e048"; +.col-xs-offset-0 { + margin-left: 0%; } - -.glyphicon-italic:before { - content: "\e049"; +@media (min-width: 768px) { + .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 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } } - -.glyphicon-text-height:before { - content: "\e050"; +@media (min-width: 992px) { + .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 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } } - -.glyphicon-text-width:before { - content: "\e051"; +@media (min-width: 1200px) { + .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 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } } - -.glyphicon-align-left:before { - content: "\e052"; +table { + background-color: transparent; } - -.glyphicon-align-center:before { - content: "\e053"; +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; } - -.glyphicon-align-right:before { - content: "\e054"; +th { + text-align: left; } - -.glyphicon-align-justify:before { - content: "\e055"; +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; } - -.glyphicon-list:before { - content: "\e056"; +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dddddd; } - -.glyphicon-indent-left:before { - content: "\e057"; +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; } - -.glyphicon-indent-right:before { - content: "\e058"; +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; } - -.glyphicon-facetime-video:before { - content: "\e059"; +.table > tbody + tbody { + border-top: 2px solid #dddddd; } - -.glyphicon-picture:before { - content: "\e060"; +.table .table { + background-color: #ffffff; } - -.glyphicon-map-marker:before { - content: "\e062"; +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; } - -.glyphicon-adjust:before { - content: "\e063"; +.table-bordered { + border: 1px solid #dddddd; } - -.glyphicon-tint:before { - content: "\e064"; +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; } - -.glyphicon-edit:before { - content: "\e065"; +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; } - -.glyphicon-share:before { - content: "\e066"; +.table-striped > tbody > tr:nth-child(odd) { + background-color: #f9f9f9; } - -.glyphicon-check:before { - content: "\e067"; +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; } - -.glyphicon-move:before { - content: "\e068"; +table col[class*="col-"] { + position: static; + float: none; + display: table-column; } - -.glyphicon-step-backward:before { - content: "\e069"; +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; } - -.glyphicon-fast-backward:before { - content: "\e070"; +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; } - -.glyphicon-backward:before { - content: "\e071"; +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; } - -.glyphicon-play:before { - content: "\e072"; +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; } - -.glyphicon-pause:before { - content: "\e073"; +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; } - -.glyphicon-stop:before { - content: "\e074"; +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; } - -.glyphicon-forward:before { - content: "\e075"; +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; } - -.glyphicon-fast-forward:before { - content: "\e076"; +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; } - -.glyphicon-step-forward:before { - content: "\e077"; +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; } - -.glyphicon-eject:before { - content: "\e078"; +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; } - -.glyphicon-chevron-left:before { - content: "\e079"; +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; } - -.glyphicon-chevron-right:before { - content: "\e080"; +.table-responsive { + overflow-x: auto; + min-height: 0.01%; } - -.glyphicon-plus-sign:before { - content: "\e081"; +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } } - -.glyphicon-minus-sign:before { - content: "\e082"; +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; } - -.glyphicon-remove-sign:before { - content: "\e083"; +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; } - -.glyphicon-ok-sign:before { - content: "\e084"; +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; } - -.glyphicon-question-sign:before { - content: "\e085"; +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } - -.glyphicon-info-sign:before { - content: "\e086"; +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; } - -.glyphicon-screenshot:before { - content: "\e087"; +input[type="file"] { + display: block; } - -.glyphicon-remove-circle:before { - content: "\e088"; +input[type="range"] { + display: block; + width: 100%; } - -.glyphicon-ok-circle:before { - content: "\e089"; +select[multiple], +select[size] { + height: auto; } - -.glyphicon-ban-circle:before { - content: "\e090"; +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } - -.glyphicon-arrow-left:before { - content: "\e091"; +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; } - -.glyphicon-arrow-right:before { - content: "\e092"; +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } - -.glyphicon-arrow-up:before { - content: "\e093"; +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); } - -.glyphicon-arrow-down:before { - content: "\e094"; +.form-control::-moz-placeholder { + color: #999999; + opacity: 1; } - -.glyphicon-share-alt:before { - content: "\e095"; +.form-control:-ms-input-placeholder { + color: #999999; } - -.glyphicon-resize-full:before { - content: "\e096"; +.form-control::-webkit-input-placeholder { + color: #999999; } - -.glyphicon-resize-small:before { - content: "\e097"; +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; + opacity: 1; } - -.glyphicon-exclamation-sign:before { - content: "\e101"; +textarea.form-control { + height: auto; } - -.glyphicon-gift:before { - content: "\e102"; +input[type="search"] { + -webkit-appearance: none; } - -.glyphicon-leaf:before { - content: "\e103"; +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg { + line-height: 46px; + } } - -.glyphicon-eye-open:before { - content: "\e105"; +.form-group { + margin-bottom: 15px; } - -.glyphicon-eye-close:before { - content: "\e106"; +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; } - -.glyphicon-warning-sign:before { - content: "\e107"; +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; } - -.glyphicon-plane:before { - content: "\e108"; +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; } - -.glyphicon-random:before { - content: "\e110"; +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; } - -.glyphicon-comment:before { - content: "\e111"; +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; } - -.glyphicon-magnet:before { - content: "\e112"; +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; } - -.glyphicon-chevron-up:before { - content: "\e113"; +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; } - -.glyphicon-chevron-down:before { - content: "\e114"; +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; } - -.glyphicon-retweet:before { - content: "\e115"; +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; } - -.glyphicon-shopping-cart:before { - content: "\e116"; +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; } - -.glyphicon-folder-close:before { - content: "\e117"; +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; } - -.glyphicon-folder-open:before { - content: "\e118"; +.input-sm, +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } - -.glyphicon-resize-vertical:before { - content: "\e119"; +select.input-sm, +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; } - -.glyphicon-resize-horizontal:before { - content: "\e120"; +textarea.input-sm, +textarea.form-group-sm .form-control, +select[multiple].input-sm, +select[multiple].form-group-sm .form-control { + height: auto; } - -.glyphicon-hdd:before { - content: "\e121"; +.input-lg, +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; } - -.glyphicon-bullhorn:before { - content: "\e122"; +select.input-lg, +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; } - -.glyphicon-certificate:before { - content: "\e124"; +textarea.input-lg, +textarea.form-group-lg .form-control, +select[multiple].input-lg, +select[multiple].form-group-lg .form-control { + height: auto; } - -.glyphicon-thumbs-up:before { - content: "\e125"; +.has-feedback { + position: relative; } - -.glyphicon-thumbs-down:before { - content: "\e126"; +.has-feedback .form-control { + padding-right: 42.5px; } - -.glyphicon-hand-right:before { - content: "\e127"; +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; } - -.glyphicon-hand-left:before { - content: "\e128"; +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; } - -.glyphicon-hand-up:before { - content: "\e129"; +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; } - -.glyphicon-hand-down:before { - content: "\e130"; +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - -.glyphicon-circle-arrow-right:before { - content: "\e131"; +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; } - -.glyphicon-circle-arrow-left:before { - content: "\e132"; +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; } - -.glyphicon-circle-arrow-up:before { - content: "\e133"; +.has-success .form-control-feedback { + color: #3c763d; } - -.glyphicon-circle-arrow-down:before { - content: "\e134"; +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; } - -.glyphicon-globe:before { - content: "\e135"; +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - -.glyphicon-tasks:before { - content: "\e137"; +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; } - -.glyphicon-filter:before { - content: "\e138"; +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; } - -.glyphicon-fullscreen:before { - content: "\e140"; +.has-warning .form-control-feedback { + color: #8a6d3b; } - -.glyphicon-dashboard:before { - content: "\e141"; +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; } - -.glyphicon-heart-empty:before { - content: "\e143"; +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - -.glyphicon-link:before { - content: "\e144"; +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; } - -.glyphicon-phone:before { - content: "\e145"; +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; } - -.glyphicon-usd:before { - content: "\e148"; +.has-error .form-control-feedback { + color: #a94442; } - -.glyphicon-gbp:before { - content: "\e149"; +.has-feedback label ~ .form-control-feedback { + top: 25px; } - -.glyphicon-sort:before { - content: "\e150"; +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; } - -.glyphicon-sort-by-alphabet:before { - content: "\e151"; +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; } - -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } } - -.glyphicon-sort-by-order:before { - content: "\e153"; +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; } - -.glyphicon-sort-by-order-alt:before { - content: "\e154"; +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; } - -.glyphicon-sort-by-attributes:before { - content: "\e155"; +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; } - -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } } - -.glyphicon-unchecked:before { - content: "\e157"; +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; } - -.glyphicon-expand:before { - content: "\e158"; +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } } - -.glyphicon-collapse-down:before { - content: "\e159"; +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } } - -.glyphicon-collapse-up:before { - content: "\e160"; +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } - -.glyphicon-log-in:before { - content: "\e161"; +.btn:hover, +.btn:focus, +.btn.focus { + color: #4d5258; + text-decoration: none; } - -.glyphicon-flash:before { - content: "\e162"; +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -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); } - -.glyphicon-log-out:before { - content: "\e163"; +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; } - -.glyphicon-new-window:before { - content: "\e164"; +.btn-default { + color: #4d5258; + background-color: #eeeeee; + border-color: #b7b7b7; } - -.glyphicon-record:before { - content: "\e165"; +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #4d5258; + background-color: #d5d5d5; + border-color: #989898; } - -.glyphicon-save:before { - content: "\e166"; +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; } - -.glyphicon-open:before { - content: "\e167"; +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #eeeeee; + border-color: #b7b7b7; } - -.glyphicon-saved:before { - content: "\e168"; +.btn-default .badge { + color: #eeeeee; + background-color: #4d5258; } - -.glyphicon-import:before { - content: "\e169"; +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #449d48; } - -.glyphicon-export:before { - content: "\e170"; +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #3d8b40; + border-color: #327334; } - -.glyphicon-send:before { - content: "\e171"; +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; } - -.glyphicon-floppy-disk:before { - content: "\e172"; +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #449d48; } - -.glyphicon-floppy-saved:before { - content: "\e173"; +.btn-primary .badge { + color: #428bca; + background-color: #ffffff; } - -.glyphicon-floppy-remove:before { - content: "\e174"; +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; } - -.glyphicon-floppy-save:before { - content: "\e175"; +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #449d44; + border-color: #398439; } - -.glyphicon-floppy-open:before { - content: "\e176"; +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; } - -.glyphicon-credit-card:before { - content: "\e177"; +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; } - -.glyphicon-transfer:before { - content: "\e178"; +.btn-success .badge { + color: #5cb85c; + background-color: #ffffff; } - -.glyphicon-cutlery:before { - content: "\e179"; +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; } - -.glyphicon-header:before { - content: "\e180"; +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #31b0d5; + border-color: #269abc; } - -.glyphicon-compressed:before { - content: "\e181"; +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; } - -.glyphicon-earphone:before { - content: "\e182"; +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; } - -.glyphicon-phone-alt:before { - content: "\e183"; +.btn-info .badge { + color: #5bc0de; + background-color: #ffffff; } - -.glyphicon-tower:before { - content: "\e184"; +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; } - -.glyphicon-stats:before { - content: "\e185"; +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ec971f; + border-color: #d58512; } - -.glyphicon-sd-video:before { - content: "\e186"; +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; } - -.glyphicon-hd-video:before { - content: "\e187"; +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; } - -.glyphicon-subtitles:before { - content: "\e188"; +.btn-warning .badge { + color: #f0ad4e; + background-color: #ffffff; } - -.glyphicon-sound-stereo:before { - content: "\e189"; +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; } - -.glyphicon-sound-dolby:before { - content: "\e190"; +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #c9302c; + border-color: #ac2925; } - -.glyphicon-sound-5-1:before { - content: "\e191"; +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; } - -.glyphicon-sound-6-1:before { - content: "\e192"; +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; } - -.glyphicon-sound-7-1:before { - content: "\e193"; +.btn-danger .badge { + color: #d9534f; + background-color: #ffffff; } - -.glyphicon-copyright-mark:before { - content: "\e194"; +.btn-link { + color: #428bca; + font-weight: normal; + border-radius: 0; } - -.glyphicon-registration-mark:before { - content: "\e195"; +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; } - -.glyphicon-cloud-download:before { - content: "\e197"; +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; } - -.glyphicon-cloud-upload:before { - content: "\e198"; +.btn-link:hover, +.btn-link:focus { + color: #1e3756; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; } - -.glyphicon-tree-conifer:before { - content: "\e199"; +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; } - -.glyphicon-tree-deciduous:before { - content: "\e200"; +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } - -.glyphicon-briefcase:before { - content: "\1f4bc"; +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } - -.glyphicon-calendar:before { - content: "\1f4c5"; +.btn-block { + display: block; + width: 100%; } - -.glyphicon-pushpin:before { - content: "\1f4cc"; +.btn-block + .btn-block { + margin-top: 5px; } - -.glyphicon-paperclip:before { - content: "\1f4ce"; +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; } - -.glyphicon-camera:before { - content: "\1f4f7"; +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; } - -.glyphicon-lock:before { - content: "\1f512"; +.fade.in { + opacity: 1; } - -.glyphicon-bell:before { - content: "\1f514"; +.collapse { + display: none; + visibility: hidden; } - -.glyphicon-bookmark:before { - content: "\1f516"; +.collapse.in { + display: block; + visibility: visible; } - -.glyphicon-fire:before { - content: "\1f525"; +tr.collapse.in { + display: table-row; } - -.glyphicon-wrench:before { - content: "\1f527"; +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; } - .caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; - border-top: 4px solid #000000; + border-top: 4px solid; border-right: 4px solid transparent; - border-bottom: 0 dotted; border-left: 4px solid transparent; - content: ""; } - .dropdown { position: relative; } - .dropdown-toggle:focus { outline: 0; } - .dropdown-menu { position: absolute; top: 100%; @@ -3231,143 +3215,160 @@ input[type="button"].btn-block { min-width: 160px; padding: 5px 0; margin: 2px 0 0; - font-size: 14px; list-style: none; + font-size: 14px; + text-align: left; background-color: #ffffff; border: 1px solid #cccccc; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 4px; -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); background-clip: padding-box; } - .dropdown-menu.pull-right { right: 0; left: auto; } - .dropdown-menu .divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; } - .dropdown-menu > li > a { display: block; padding: 3px 20px; clear: both; font-weight: normal; - line-height: 1.428571429; - color: #333333; + line-height: 1.42857143; + color: #999999; white-space: nowrap; } - .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - color: #ffffff; text-decoration: none; - background-color: #428bca; + color: #428bca; + background-color: #eeeeee; } - .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { color: #ffffff; text-decoration: none; - background-color: #428bca; outline: 0; + background-color: #428bca; } - .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - color: #999999; + color: #777777; } - .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { text-decoration: none; - cursor: not-allowed; background-color: transparent; background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; } - .open > .dropdown-menu { display: block; } - .open > a { outline: 0; } - +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} .dropdown-header { display: block; padding: 3px 20px; font-size: 12px; - line-height: 1.428571429; - color: #999999; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; } - .dropdown-backdrop { position: fixed; - top: 0; + left: 0; right: 0; bottom: 0; - left: 0; + top: 0; z-index: 990; } - .pull-right > .dropdown-menu { right: 0; left: auto; } - .dropup .caret, .navbar-fixed-bottom .dropdown .caret { - border-top: 0 dotted; - border-bottom: 4px solid #000000; + border-top: 0; + border-bottom: 4px solid; content: ""; } - .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 1px; } - @media (min-width: 768px) { .navbar-right .dropdown-menu { - right: 0; left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; } } -.btn-default .caret { - border-top-color: #333333; +.dropdown-submenu { + position:relative; } - -.btn-primary .caret, -.btn-success .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret { - border-top-color: #fff; +.dropdown-submenu>.dropdown-menu { + top:0; + left:100%; + margin-top:-6px; + margin-left:-1px; + -webkit-border-radius:0 6px 6px 6px; + -moz-border-radius:0 6px 6px 6px; + border-radius:0 6px 6px 6px; } - -.dropup .btn-default .caret { - border-bottom-color: #333333; +.dropdown-submenu:hover>.dropdown-menu { + display:block; } - -.dropup .btn-primary .caret, -.dropup .btn-success .caret, -.dropup .btn-warning .caret, -.dropup .btn-danger .caret, -.dropup .btn-info .caret { - border-bottom-color: #fff; +.dropdown-submenu>a:after { + display:block; + content:" "; + float:right; + width:0; + height:0; + border-color:transparent; + border-style:solid; + border-width:5px 0 5px 5px; + border-left-color:#cccccc; + margin-top:5px; + margin-right:-10px; +} +.dropdown-submenu:hover>a:after { + border-left-color:#ffffff; +} +.dropdown-submenu.pull-left { + float:none; +} +.dropdown-submenu.pull-left>.dropdown-menu { + left:-100%; + margin-left:10px; + -webkit-border-radius:6px 0 6px 6px; + -moz-border-radius:6px 0 6px 6px; + border-radius:6px 0 6px 6px; } .btn-group, @@ -3376,13 +3377,11 @@ input[type="button"].btn-block { display: inline-block; vertical-align: middle; } - .btn-group > .btn, .btn-group-vertical > .btn { position: relative; float: left; } - .btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, @@ -3393,175 +3392,95 @@ input[type="button"].btn-block { .btn-group-vertical > .btn.active { z-index: 2; } - -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus { - outline: none; -} - .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { margin-left: -1px; } - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; -} - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; +.btn-toolbar { + margin-left: -5px; } - -.btn-toolbar .btn-group { +.btn-toolbar .btn-group, +.btn-toolbar .input-group { float: left; } - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group, -.btn-toolbar > .btn-group + .btn-group { +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { margin-left: 5px; } - .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } - .btn-group > .btn:first-child { margin-left: 0; } - .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; border-bottom-right-radius: 0; + border-top-right-radius: 0; } - .btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } - .btn-group > .btn-group { float: left; } - .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } - .btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle { - border-top-right-radius: 0; border-bottom-right-radius: 0; + border-top-right-radius: 0; } - .btn-group > .btn-group:last-child > .btn:first-child { border-bottom-left-radius: 0; border-top-left-radius: 0; } - .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } - -.btn-group-xs > .btn { - padding: 5px 10px; - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - .btn-group > .btn + .dropdown-toggle { - padding-right: 8px; padding-left: 8px; + padding-right: 8px; } - .btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; padding-left: 12px; + padding-right: 12px; } - .btn-group.open .dropdown-toggle { -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); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; } - .btn .caret { margin-left: 0; } - .btn-lg .caret { border-width: 5px 5px 0; border-bottom-width: 0; } - .dropup .btn-lg .caret { border-width: 0 5px 5px; } - .btn-group-vertical > .btn, -.btn-group-vertical > .btn-group { +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { display: block; float: none; width: 100%; max-width: 100%; } - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - .btn-group-vertical > .btn-group > .btn { float: none; } - .btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, @@ -3569,96 +3488,97 @@ input[type="button"].btn-block { margin-top: -1px; margin-left: 0; } - .btn-group-vertical > .btn:not(:first-child):not(:last-child) { border-radius: 0; } - .btn-group-vertical > .btn:first-child:not(:last-child) { border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } - .btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; border-bottom-left-radius: 4px; + border-top-right-radius: 0; border-top-left-radius: 0; } - .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } - -.btn-group-vertical > .btn-group:first-child > .btn:last-child, -.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } - -.btn-group-vertical > .btn-group:last-child > .btn:first-child { +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } - .btn-group-justified { display: table; width: 100%; - border-collapse: separate; table-layout: fixed; + border-collapse: separate; } - -.btn-group-justified .btn { - display: table-cell; +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { float: none; + display: table-cell; width: 1%; } - -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - display: none; +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; } - .input-group { position: relative; display: table; border-collapse: separate; } - -.input-group.col { +.input-group[class*="col-"] { float: none; - padding-right: 0; padding-left: 0; + padding-right: 0; } - .input-group .form-control { + position: relative; + z-index: 2; + float: left; width: 100%; margin-bottom: 0; } - .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { - height: 45px; + height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } - select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { - height: 45px; - line-height: 45px; + height: 46px; + line-height: 46px; } - textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn { +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { height: auto; } - .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { @@ -3668,3138 +3588,3667 @@ textarea.input-group-lg > .input-group-btn > .btn { line-height: 1.5; border-radius: 3px; } - select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { height: 30px; line-height: 30px; } - textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn { +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { height: auto; } - .input-group-addon, .input-group-btn, .input-group .form-control { display: table-cell; } - .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0; } - .input-group-addon, .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle; } - .input-group-addon { padding: 6px 12px; font-size: 14px; font-weight: normal; line-height: 1; + color: #555555; text-align: center; background-color: #eeeeee; border: 1px solid #cccccc; border-radius: 4px; } - .input-group-addon.input-sm { padding: 5px 10px; font-size: 12px; border-radius: 3px; } - .input-group-addon.input-lg { padding: 10px 16px; font-size: 18px; border-radius: 6px; } - .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { margin-top: 0; } - .input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; + border-top-right-radius: 0; } - .input-group-addon:first-child { border-right: 0; } - .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child) { +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { border-bottom-left-radius: 0; border-top-left-radius: 0; } - -.input-group-addon:last-child { - border-left: 0; +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +#toc .nav > li > a { + padding: 0px 0px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li.disabled > a { + color: #777777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #428bca; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #dddddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #428bca; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.tab-content > .tab-pane { + display: none; + visibility: hidden; +} +.tab-content > .active { + display: block; + visibility: visible; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 66px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + visibility: visible !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; } - -.input-group-btn { - position: relative; - white-space: nowrap; +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } } - -.input-group-btn > .btn { - position: relative; +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; } - -.input-group-btn > .btn + .btn { - margin-left: -4px; +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } } - -.input-group-btn > .btn:hover, -.input-group-btn > .btn:active { - z-index: 2; +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; } - -.nav { - padding-left: 0; +.navbar-fixed-bottom { + bottom: 0; margin-bottom: 0; - list-style: none; + border-width: 1px 0 0; } - -.nav:before, -.nav:after { - display: table; - content: " "; +.navbar-brand { + float: left; + padding: 23px 15px; + font-size: 18px; + line-height: 20px; + height: 66px; } - -.nav:after { - clear: both; +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; } - -.nav:before, -.nav:after { - display: table; - content: " "; +.navbar-brand > img { + display: block; } - -.nav:after { - clear: both; +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } } - -.nav > li { +.navbar-toggle { position: relative; - display: block; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 16px; + margin-bottom: 16px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; } - -.nav > li > a { - position: relative; +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { display: block; - padding: 10px 15px; + width: 22px; + height: 2px; + border-radius: 1px; } - -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; } - -.nav > li.disabled > a { - color: #999999; +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } } - -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #999999; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; +.navbar-nav { + margin: 11.5px -15px; } - -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #428bca; +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; } - -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } } - -.nav > li > a > img { - max-width: none; +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 23px; + padding-bottom: 23px; + } } - -.nav-tabs { - border-bottom: 1px solid #dddddd; +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 16px; + margin-bottom: 16px; } - -.nav-tabs > li { - float: left; - margin-bottom: -1px; +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } } - -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.428571429; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } } - -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } } - -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 16px; + margin-bottom: 16px; } - -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; +.navbar-btn.btn-sm { + margin-top: 18px; + margin-bottom: 18px; } - -.nav-tabs.nav-justified > li { - float: none; +.navbar-btn.btn-xs { + margin-top: 22px; + margin-bottom: 22px; } - -.nav-tabs.nav-justified > li > a { - text-align: center; +.navbar-text { + margin-top: 23px; + margin-bottom: 23px; } - @media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; } } - -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-bottom: 1px solid #dddddd; +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } } - -.nav-tabs.nav-justified > .active > a { - border-bottom-color: #ffffff; +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; } - -.nav-pills > li { - float: left; +.navbar-default .navbar-brand { + color: #777777; } - -.nav-pills > li > a { - border-radius: 5px; +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; } - -.nav-pills > li + li { - margin-left: 2px; +.navbar-default .navbar-text { + color: #777777; } - -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #428bca; +.navbar-default .navbar-nav > li > a { + color: #777777; } - -.nav-stacked > li { - float: none; +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; } - -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; } - -.nav-justified { - width: 100%; +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; } - -.nav-justified > li { - float: none; +.navbar-default .navbar-toggle { + border-color: #dddddd; } - -.nav-justified > li > a { - text-align: center; +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; } - -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; +.navbar-default .navbar-toggle .icon-bar { + background-color: #888888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555555; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; } } - -.nav-tabs-justified { - border-bottom: 0; +.navbar-default .navbar-link { + color: #777777; } - -.nav-tabs-justified > li > a { - margin-right: 0; - border-bottom: 1px solid #dddddd; +.navbar-default .navbar-link:hover { + color: #333333; } - -.nav-tabs-justified > .active > a { - border-bottom-color: #ffffff; +.navbar-default .btn-link { + color: #777777; } - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333333; } - -.tabbable:after { - clear: both; +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; } - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; +.navbar-inverse { + background-color: #222222; + border-color: #080808; } - -.tabbable:after { - clear: both; +.navbar-inverse .navbar-brand { + color: #9d9d9d; } - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; } - -.tab-content > .active, -.pill-content > .active { - display: block; +.navbar-inverse .navbar-text { + color: #9d9d9d; } - -.nav .caret { - border-top-color: #428bca; - border-bottom-color: #428bca; +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; } - -.nav a:hover .caret { - border-top-color: #2a6496; - border-bottom-color: #2a6496; +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; } - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; } - -.navbar { - position: relative; - z-index: 1000; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; } - -.navbar:before, -.navbar:after { - display: table; - content: " "; +.navbar-inverse .navbar-toggle { + border-color: #333333; } - -.navbar:after { - clear: both; +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; } - -.navbar:before, -.navbar:after { - display: table; - content: " "; +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } } - -.navbar:after { - clear: both; +.navbar-inverse .navbar-link { + color: #9d9d9d; } - -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } +.navbar-inverse .navbar-link:hover { + color: #ffffff; } - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; +.navbar-inverse .btn-link { + color: #9d9d9d; } - -.navbar-header:after { - clear: both; +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #ffffff; } - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444444; } - -.navbar-header:after { - clear: both; +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; } - -@media (min-width: 768px) { - .navbar-header { - float: left; - } +.breadcrumb > li { + display: inline-block; } - -.navbar-collapse { - max-height: 340px; - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #cccccc; } - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; +.breadcrumb > .active { + color: #777777; } - -.navbar-collapse:after { - clear: both; +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; } - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; +.pagination > li { + display: inline; } - -.navbar-collapse:after { - clear: both; +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #428bca; + background-color: #ffffff; + border: 1px solid #dddddd; + margin-left: -1px; } - -.navbar-collapse.in { - overflow-y: auto; +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; } - -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-collapse .navbar-nav.navbar-left:first-child { - margin-left: -15px; - } - .navbar-collapse .navbar-nav.navbar-right:last-child { - margin-right: -15px; - } - .navbar-collapse .navbar-text:last-child { - margin-right: 0; - } +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; } - -.container > .navbar-header, -.container > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #1e3756; + background-color: #eeeeee; + border-color: #dddddd; } - -@media (min-width: 768px) { - .container > .navbar-header, - .container > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; + cursor: default; } - -.navbar-static-top { - border-width: 0 0 1px; +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777777; + background-color: #ffffff; + border-color: #dddddd; + cursor: not-allowed; } - -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; } - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - border-width: 0 0 1px; +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; } - -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; } - -.navbar-fixed-top { - top: 0; - z-index: 1030; +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; } - -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; } - -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; } - -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center; } - -@media (min-width: 768px) { - .navbar > .container .navbar-brand { - margin-left: -15px; - } +.pager li { + display: inline; } - -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - border: 1px solid transparent; - border-radius: 4px; +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; } - -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; } - -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; +.pager .next > a, +.pager .next > span { + float: right; } - -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } +.pager .previous > a, +.pager .previous > span { + float: left; } - -.navbar-nav { - margin: 7.5px -15px; +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + background-color: #ffffff; + cursor: not-allowed; } - -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; } - -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; } - -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } +.label:empty { + display: none; } - -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } +.btn .label { + position: relative; + top: -1px; } - -.navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); +.label-default { + background-color: #777777; } - -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; } - -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } +.label-primary { + background-color: #428bca; } - -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3d8b40; } - -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; +.label-success { + background-color: #5cb85c; } - -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; } - -.navbar-nav.pull-right > li > .dropdown-menu, -.navbar-nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; +.label-info { + background-color: #5bc0de; } - -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; } - -.navbar-text { - float: left; - margin-top: 15px; - margin-bottom: 15px; +.label-warning { + background-color: #f0ad4e; } - -@media (min-width: 768px) { - .navbar-text { - margin-right: 15px; - margin-left: 15px; - } +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; } - -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; +.label-danger { + background-color: #d9534f; } - -.navbar-default .navbar-brand { - color: #777777; +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; } - -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #ffffff; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: #777777; + border-radius: 10px; } - -.navbar-default .navbar-text { - color: #777777; +.badge:empty { + display: none; } - -.navbar-default .navbar-nav > li > a { - color: #777777; +.btn .badge { + position: relative; + top: -1px; } - -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; +.btn-xs .badge { + top: 0; + padding: 1px 5px; } - -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; } - -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #ffffff; } - -.navbar-default .navbar-toggle { - border-color: #dddddd; +.list-group-item > .badge { + float: right; } - -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; } - -.navbar-default .navbar-toggle .icon-bar { - background-color: #cccccc; +.jumbotron { + padding: 30px 15px; + margin-bottom: 30px; + color: inherit; + background-color: #eeeeee; } - -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e6e6e6; +.jumbotron h1, +.jumbotron .h1 { + color: inherit; } - -.navbar-default .navbar-nav > .dropdown > a:hover .caret, -.navbar-default .navbar-nav > .dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; } - -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555555; - background-color: #e7e7e7; +.jumbotron > hr { + border-top-color: #d5d5d5; } - -.navbar-default .navbar-nav > .open > a .caret, -.navbar-default .navbar-nav > .open > a:hover .caret, -.navbar-default .navbar-nav > .open > a:focus .caret { - border-top-color: #555555; - border-bottom-color: #555555; +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; } - -.navbar-default .navbar-nav > .dropdown > a .caret { - border-top-color: #777777; - border-bottom-color: #777777; +.jumbotron .container { + max-width: 100%; } - -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; +@media screen and (min-width: 768px) { + .jumbotron { + padding: 48px 0; } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px; } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; } } - -.navbar-default .navbar-link { - color: #777777; +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; } - -.navbar-default .navbar-link:hover { +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #428bca; +} +.thumbnail .caption { + padding: 9px; color: #333333; } - -.navbar-inverse { - background-color: #222222; - border-color: #080808; +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; } - -.navbar-inverse .navbar-brand { - color: #999999; +.alert h4 { + margin-top: 0; + color: inherit; } - -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; +.alert .alert-link { + font-weight: bold; } - -.navbar-inverse .navbar-text { - color: #999999; +.alert > p, +.alert > ul { + margin-bottom: 0; } - -.navbar-inverse .navbar-nav > li > a { - color: #999999; +.alert > p + p { + margin-top: 5px; } - -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; } - -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; } - -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d; } - -.navbar-inverse .navbar-toggle { - border-color: #333333; +.alert-success hr { + border-top-color: #c9e2b3; } - -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; +.alert-success .alert-link { + color: #2b542c; } - -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f; } - -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; +.alert-info hr { + border-top-color: #a6e1ec; } - -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #ffffff; - background-color: #080808; +.alert-info .alert-link { + color: #245269; } - -.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b; } - -.navbar-inverse .navbar-nav > .dropdown > a .caret { - border-top-color: #999999; - border-bottom-color: #999999; +.alert-warning hr { + border-top-color: #f7e1b5; } - -.navbar-inverse .navbar-nav > .open > a .caret, -.navbar-inverse .navbar-nav > .open > a:hover .caret, -.navbar-inverse .navbar-nav > .open > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; +.alert-warning .alert-link { + color: #66512c; } - -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #999999; +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; + to { + background-position: 0 0; } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; + to { + background-position: 0 0; } } - -.navbar-inverse .navbar-link { - color: #999999; +.progress { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #ffffff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + 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); + background-image: -o-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); + 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); + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + 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); + background-image: -o-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); + 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); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + 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); + background-image: -o-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); + 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); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + 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); + background-image: -o-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); + 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); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + 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); + background-image: -o-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); + 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); } - -.navbar-inverse .navbar-link:hover { - color: #ffffff; +.media { + margin-top: 15px; } - -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; +.media:first-child { + margin-top: 0; } - -.breadcrumb > li { - display: inline-block; +.media-right, +.media > .pull-right { + padding-left: 10px; } - -.breadcrumb > li + li:before { - padding: 0 5px; - color: #cccccc; - content: "/\00a0"; +.media-left, +.media > .pull-left { + padding-right: 10px; } - -.breadcrumb > .active { - color: #999999; +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; } - -.pagination { - display: inline-block; +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { padding-left: 0; - margin: 20px 0; - border-radius: 4px; + list-style: none; } - -.pagination > li { - display: inline; +.list-group { + margin-bottom: 20px; + padding-left: 0; } - -.pagination > li > a, -.pagination > li > span { +.list-group-item { position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.428571429; - text-decoration: none; + display: block; + padding: 10px 15px; + margin-bottom: -1px; background-color: #ffffff; border: 1px solid #dddddd; } - -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; +.list-group-item:first-child { + border-top-right-radius: 4px; border-top-left-radius: 4px; } - -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; +.list-group-item:last-child { + margin-bottom: 0; border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; } - -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { +a.list-group-item { + color: #555555; +} +a.list-group-item .list-group-item-heading { + color: #333333; +} +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + color: #555555; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { background-color: #eeeeee; + color: #777777; + cursor: not-allowed; } - -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { z-index: 2; color: #ffffff; - cursor: default; background-color: #428bca; border-color: #428bca; } - -.pagination > .disabled > span, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #999999; - cursor: not-allowed; - background-color: #ffffff; - border-color: #dddddd; +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; } - -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #d9eeda; } - -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; } - -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; +a.list-group-item-success { + color: #3c763d; } - -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; +a.list-group-item-success .list-group-item-heading { + color: inherit; } - -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; } - -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; } - -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; } - -.pager:before, -.pager:after { - display: table; - content: " "; +a.list-group-item-info { + color: #31708f; } - -.pager:after { - clear: both; +a.list-group-item-info .list-group-item-heading { + color: inherit; } - -.pager:before, -.pager:after { - display: table; - content: " "; +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; } - -.pager:after { - clear: both; +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; } - -.pager li { - display: inline; +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; } - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; +a.list-group-item-warning { + color: #8a6d3b; } - -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; +a.list-group-item-warning .list-group-item-heading { + color: inherit; } - -.pager .next > a, -.pager .next > span { - float: right; +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; } - -.pager .previous > a, -.pager .previous > span { - float: left; +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; } - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - cursor: not-allowed; +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; } - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; +.panel-title > a { + color: inherit; } - -.label[href]:hover, -.label[href]:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; } - -.label:empty { - display: none; +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; } - -.label-default { - background-color: #999999; +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; } - -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #808080; +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; } - -.label-primary { - background-color: #428bca; +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; } - -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #3071a9; +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; } - -.label-success { - background-color: #5cb85c; +.list-group + .panel-footer { + border-top-width: 0; } - -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; } - -.label-info { - background-color: #5bc0de; +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px; } - -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; } - -.label-warning { - background-color: #f0ad4e; +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; } - -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; } - -.label-danger { - background-color: #d9534f; +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; } - -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; } - -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; - border-radius: 10px; +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; } - -.badge:empty { - display: none; +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; } - -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; } - -.btn .badge { - position: relative; - top: -1px; +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #dddddd; } - -a.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #428bca; - background-color: #ffffff; +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; } - -.nav-pills > li > a > .badge { - margin-left: 3px; +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; } - -.jumbotron { - padding: 30px; - margin-bottom: 30px; - font-size: 21px; - font-weight: 200; - line-height: 2.1428571435; - color: inherit; - background-color: #eeeeee; +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; } - -.jumbotron h1 { - line-height: 1; - color: inherit; +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; } - -.jumbotron p { - line-height: 1.4; +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; } - -.container .jumbotron { - border-radius: 6px; +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; } - -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1 { - font-size: 63px; - } +.panel > .table-responsive { + border: 0; + margin-bottom: 0; } - -.thumbnail { - display: inline-block; - display: block; - height: auto; - max-width: 100%; - padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; } - -.thumbnail > img { - display: block; - height: auto; - max-width: 100%; +.panel-group .panel + .panel { + margin-top: 5px; } - -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #428bca; +.panel-group .panel-heading { + border-bottom: 0; } - -.thumbnail > img { - margin-right: auto; - margin-left: auto; +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #dddddd; } - -.thumbnail .caption { - padding: 9px; +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} +.panel-default { + border-color: #dddddd; +} +.panel-default > .panel-heading { color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; } - -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #dddddd; } - -.alert h4 { - margin-top: 0; - color: inherit; +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; } - -.alert .alert-link { - font-weight: bold; +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #dddddd; } - -.alert > p, -.alert > ul { - margin-bottom: 0; +.panel-primary { + border-color: #428bca; } - -.alert > p + p { - margin-top: 5px; +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; } - -.alert-dismissable { - padding-right: 35px; +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #428bca; } - -.alert-dismissable .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; +.panel-primary > .panel-heading .badge { + color: #428bca; + background-color: #ffffff; } - -.alert-success { - color: #468847; +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #428bca; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6; } - -.alert-success hr { - border-top-color: #c9e2b3; +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; } - -.alert-success .alert-link { - color: #356635; +.panel-info { + border-color: #bce8f1; } - -.alert-info { - color: #3a87ad; +.panel-info > .panel-heading { + color: #31708f; background-color: #d9edf7; border-color: #bce8f1; } - -.alert-info hr { - border-top-color: #a6e1ec; +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; } - -.alert-info .alert-link { - color: #2d6987; +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; } - -.alert-warning { - color: #c09853; - background-color: #fcf8e3; - border-color: #fbeed5; +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; } - -.alert-warning hr { - border-top-color: #f8e5be; +.panel-warning { + border-color: #faebcc; } - -.alert-warning .alert-link { - color: #a47e3c; +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; } - -.alert-danger { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; } - -.alert-danger hr { - border-top-color: #e6c1c7; +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; } - -.alert-danger .alert-link { - color: #953b39; +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; } - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } +.panel-danger { + border-color: #ebccd1; } - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; } - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; } - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; } - -.progress { - height: 20px; - margin-bottom: 20px; +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } - -.progress-bar { - float: left; - width: 0; +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - background-color: #428bca; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress-striped .progress-bar { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - 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); - background-size: 40px 40px; + width: 100%; + border: 0; } - -.progress.active .progress-bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; } - -.progress-bar-success { - background-color: #5cb85c; +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; } - -.progress-striped .progress-bar-success { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - 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); +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } - -.progress-bar-info { - background-color: #5bc0de; +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); } - -.progress-striped .progress-bar-info { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - 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); +.well-lg { + padding: 24px; + border-radius: 6px; } - -.progress-bar-warning { - background-color: #f0ad4e; +.well-sm { + padding: 9px; + border-radius: 3px; } - -.progress-striped .progress-bar-warning { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - 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); +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); } - -.progress-bar-danger { - background-color: #d9534f; +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); } - -.progress-striped .progress-bar-danger { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - 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); +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; } - -.media, -.media-body { +.modal-open { overflow: hidden; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; } - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + -webkit-overflow-scrolling: touch; + outline: 0; } - -.media > .pull-left { - margin-right: 10px; +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; } - -.media > .pull-right { - margin-left: 10px; +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); } - -.media-list { - padding-left: 0; - list-style: none; +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; } - -.list-group { - padding-left: 0; - margin-bottom: 20px; +.modal-dialog { + position: relative; + width: auto; + margin: 10px; } - -.list-group-item { +.modal-content { position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; background-color: #ffffff; - border: 1px solid #dddddd; -} - -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} - -.list-group-item > .badge { - float: right; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; + outline: 0; } - -.list-group-item > .badge + .badge { - margin-right: 5px; +.modal-backdrop { + position: absolute; + top: 0; + right: 0; + left: 0; + background-color: #000000; } - -a.list-group-item { - color: #555555; +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); } - -a.list-group-item .list-group-item-heading { - color: #333333; +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); } - -a.list-group-item:hover, -a.list-group-item:focus { - text-decoration: none; - background-color: #f5f5f5; +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px; } - -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #428bca; - border-color: #428bca; +.modal-header .close { + margin-top: -2px; } - -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading { - color: inherit; +.modal-title { + margin: 0; + line-height: 1.42857143; } - -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #e1edf7; +.modal-body { + position: relative; + padding: 15px; } - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; } - -.list-group-item-text { +.modal-footer .btn + .btn { + margin-left: 5px; margin-bottom: 0; - line-height: 1.3; } - -.panel { - margin-bottom: 20px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; } - -.panel-body { - padding: 15px; +.modal-footer .btn-block + .btn-block { + margin-left: 0; } - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; } - -.panel-body:after { - clear: both; +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } } - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } } - -.panel-body:after { - clear: both; +.tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-family: 'Open Sans', sans-serif; + font-size: 12px; + font-weight: normal; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); } - -.panel > .list-group { - margin-bottom: 0; +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); } - -.panel > .list-group .list-group-item { - border-width: 1px 0; +.tooltip.top { + margin-top: -3px; + padding: 5px 0; } - -.panel > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; +.tooltip.right { + margin-left: 3px; + padding: 0 5px; } - -.panel > .list-group .list-group-item:last-child { - border-bottom: 0; +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; } - -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; +.tooltip.left { + margin-left: -3px; + padding: 0 5px; } - -.panel > .table { - margin-bottom: 0; +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; } - -.panel > .panel-body + .table { - border-top: 1px solid #dddddd; +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } - -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; } - -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; } - -.panel-title > a { - color: inherit; +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; } - -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; } - -.panel-group .panel { - margin-bottom: 0; - overflow: hidden; - border-radius: 4px; +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; } - -.panel-group .panel + .panel { - margin-top: 5px; +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; } - -.panel-group .panel-heading { - border-bottom: 0; +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; } - -.panel-group .panel-heading + .panel-collapse .panel-body { - border-top: 1px solid #dddddd; +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; } - -.panel-group .panel-footer { - border-top: 0; +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: 'Open Sans', sans-serif; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + background-color: #ffffff; + background-clip: padding-box; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; } - -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; +.popover.top { + margin-top: -10px; } - -.panel-default { - border-color: #dddddd; +.popover.right { + margin-left: 10px; } - -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #dddddd; +.popover.bottom { + margin-top: 10px; } - -.panel-default > .panel-heading + .panel-collapse .panel-body { - border-top-color: #dddddd; +.popover.left { + margin-left: -10px; } - -.panel-default > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #dddddd; +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; } - -.panel-primary { - border-color: #428bca; +.popover-content { + padding: 9px 14px; } - -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #428bca; - border-color: #428bca; +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } - -.panel-primary > .panel-heading + .panel-collapse .panel-body { - border-top-color: #428bca; +.popover > .arrow { + border-width: 11px; } - -.panel-primary > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #428bca; +.popover > .arrow:after { + border-width: 10px; + content: ""; } - -.panel-success { - border-color: #d6e9c6; +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; } - -.panel-success > .panel-heading { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; } - -.panel-success > .panel-heading + .panel-collapse .panel-body { - border-top-color: #d6e9c6; +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); } - -.panel-success > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #d6e9c6; +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; } - -.panel-warning { - border-color: #fbeed5; +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; } - -.panel-warning > .panel-heading { - color: #c09853; - background-color: #fcf8e3; - border-color: #fbeed5; +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; } - -.panel-warning > .panel-heading + .panel-collapse .panel-body { - border-top-color: #fbeed5; +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); } - -.panel-warning > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #fbeed5; +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; } - -.panel-danger { - border-color: #eed3d7; +.carousel { + position: relative; } - -.panel-danger > .panel-heading { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; } - -.panel-danger > .panel-heading + .panel-collapse .panel-body { - border-top-color: #eed3d7; +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; } - -.panel-danger > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #eed3d7; +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; } - -.panel-info { - border-color: #bce8f1; +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + transition: transform 0.6s ease-in-out; + backface-visibility: hidden; + perspective: 1000; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + transform: translate3d(100%, 0, 0); + left: 0; + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + transform: translate3d(-100%, 0, 0); + left: 0; + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + transform: translate3d(0, 0, 0); + left: 0; + } } - -.panel-info > .panel-heading { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; } - -.panel-info > .panel-heading + .panel-collapse .panel-body { - border-top-color: #bce8f1; +.carousel-inner > .active { + left: 0; } - -.panel-info > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #bce8f1; +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; } - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +.carousel-inner > .next { + left: 100%; } - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); +.carousel-inner > .prev { + left: -100%; } - -.well-lg { - padding: 24px; - border-radius: 6px; +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; } - -.well-sm { - padding: 9px; - border-radius: 3px; +.carousel-inner > .active.left { + left: -100%; } - -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); +.carousel-inner > .active.right { + left: 100%; } - -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; opacity: 0.5; filter: alpha(opacity=50); + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.modal-open { - overflow: hidden; -} - -body.modal-open, -.modal-open .navbar-fixed-top, -.modal-open .navbar-fixed-bottom { - margin-right: 15px; +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); } - -.modal { - position: fixed; - top: 0; +.carousel-control.right { + left: auto; right: 0; - bottom: 0; - left: 0; - z-index: 1040; - display: none; - overflow: auto; - overflow-y: scroll; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); } - -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); } - -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; } - -.modal-dialog { - z-index: 1050; - width: auto; - padding: 10px; - margin-right: auto; - margin-left: auto; +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; } - -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; } - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; - background-color: #000000; +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; } - -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); +.carousel-control .icon-prev:before { + content: '\2039'; } - -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); +.carousel-control .icon-next:before { + content: '\203a'; } - -.modal-header { - min-height: 16.428571429px; - padding: 15px; - border-bottom: 1px solid #e5e5e5; +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; } - -.modal-header .close { - margin-top: -2px; +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #ffffff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); } - -.modal-title { +.carousel-indicators .active { margin: 0; - line-height: 1.428571429; -} - -.modal-body { - position: relative; - padding: 20px; + width: 12px; + height: 12px; + background-color: #ffffff; } - -.modal-footer { - padding: 19px 20px 20px; - margin-top: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } - -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; +.carousel-caption .btn { + text-shadow: none; } - -.modal-footer:after { - clear: both; +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } } - +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, .modal-footer:before, .modal-footer:after { - display: table; content: " "; + display: table; } - +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, .modal-footer:after { clear: both; } - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; +.center-block { + display: block; + margin-left: auto; + margin-right: auto; } - -@media screen and (min-width: 768px) { - .modal-dialog { - right: auto; - left: 50%; - width: 600px; - padding-top: 30px; - padding-bottom: 30px; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } +.pull-right { + float: right !important; } - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - font-size: 12px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; +.pull-left { + float: left !important; } - -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); +.hide { + display: none !important; } - -.tooltip.top { - padding: 5px 0; - margin-top: -3px; +.show { + display: block !important; } - -.tooltip.right { - padding: 0 5px; - margin-left: 3px; +.invisible { + visibility: hidden; } - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; } - -.tooltip.left { - padding: 0 5px; - margin-left: -3px; +.hidden { + display: none !important; + visibility: hidden !important; } - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - border-radius: 4px; +.affix { + position: fixed; } - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; +@-ms-viewport { + width: device-width; } - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-top-color: #000000; - border-width: 5px 5px 0; +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; } - -.tooltip.top-left .tooltip-arrow { - bottom: 0; - left: 5px; - border-top-color: #000000; - border-width: 5px 5px 0; +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; } - -.tooltip.top-right .tooltip-arrow { - right: 5px; - bottom: 0; - border-top-color: #000000; - border-width: 5px 5px 0; +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } } - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } } - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } } - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } } - -.tooltip.bottom-left .tooltip-arrow { - top: 0; - left: 5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } } - -.tooltip.bottom-right .tooltip-arrow { - top: 0; - right: 5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } } - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - background-clip: padding-box; +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } } - -.popover.top { - margin-top: -10px; +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } } - -.popover.right { - margin-left: 10px; +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } } - -.popover.bottom { - margin-top: 10px; +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } } - -.popover.left { - margin-left: -10px; +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } } - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } } - -.popover-content { - padding: 9px 14px; +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } } - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } } - -.popover .arrow { - border-width: 11px; +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } } - -.popover .arrow:after { - border-width: 10px; - content: ""; +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } } - -.popover.top .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } } - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; - content: " "; +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } } - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } } - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; - content: " "; +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } } - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; +.visible-print { + display: none !important; } - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; - content: " "; +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } } - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; +.visible-print-block { + display: none !important; } - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; - content: " "; +@media print { + .visible-print-block { + display: block !important; + } } - -.carousel { - position: relative; +.visible-print-inline { + display: none !important; } - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; +@media print { + .visible-print-inline { + display: inline !important; + } } - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; +.visible-print-inline-block { + display: none !important; } - -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - height: auto; - max-width: 100%; - line-height: 1; +@media print { + .visible-print-inline-block { + display: inline-block !important; + } } - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; +@media print { + .hidden-print { + display: none !important; + } } - -.carousel-inner > .active { - left: 0; +.reset { + margin: 0; + padding: 0; } - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; +.full-width { width: 100%; } - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; +body { + margin-top: 60px; + font-weight: 400; + font-family: 'Open Sans', sans-serif; + color: #484848; + position: relative; } - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; +.alt { + color: #999999; } - -.carousel-inner > .active.left { - left: -100%; +strong { + font-weight: 600; } - -.carousel-inner > .active.right { - left: 100%; +section { + padding: 30px 0; } - -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - opacity: 0.5; - filter: alpha(opacity=50); +footer { + padding: 60px 0; } - -.carousel-control.left { - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: 'Exo 2', sans-serif; } - -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +p { + line-height: 1.5; } - -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); +.btn { + font-family: 'Exo 2', sans-serif; } - -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - left: 50%; - z-index: 5; - display: inline-block; +.btn-default { + background-image: -webkit-linear-gradient(top, #fafafa 0%, #ededed 100%); + background-image: -o-linear-gradient(top, #fafafa 0%, #ededed 100%); + background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffededed', GradientType=0); } - -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - font-family: serif; +.btn-default:hover { + background-image: none; + background-color: #eee; } - -.carousel-control .icon-prev:before { - content: '\2039'; +table { + font-weight: 400; } - -.carousel-control .icon-next:before { - content: '\203a'; +.section-header { + text-transform: uppercase; + border-bottom: 1px solid #dddddd; + margin-bottom: 20px; + padding-bottom: 5px; + margin-top: 30px; +} +.text-content h1, +.text-content h2, +.text-content h3, +.text-content h4, +.text-content h5, +.text-content h6 { + font-weight: 400; +} +.text-content h2 { + text-transform: uppercase; + border-bottom: 1px solid #dddddd; + margin-bottom: 20px; + padding-bottom: 5px; + margin-top: 30px; } - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; +.text-content h2 :first-child { + margin-top: 0; } - -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - border: 1px solid #ffffff; - border-radius: 10px; +.text-content h3 { + margin-top: 25px; + margin-bottom: 15px; } - -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #ffffff; +.text-content p { + font-weight: 400; } - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +.text-content p.lead { + font-size: 18px; + font-weight: 300; } - -.carousel-caption .btn { - text-shadow: none; +.text-content h4 { + margin-top: 20px; } - -@media screen and (min-width: 768px) { - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - margin-left: -15px; - font-size: 30px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } +.text-content h5 { + font-weight: bold; + margin-top: 20px; } - -.clearfix:before, -.clearfix:after { - display: table; - content: " "; +.navbar { + border: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.3); + background-color: #fff; } - -.clearfix:after { - clear: both; +.nav a { + color: #999999; + font-weight: 600; + font-family: 'Exo 2', sans-serif; } - -.pull-right { - float: right !important; +.nav a:hover { + color: #428bca; } - -.pull-left { - float: left !important; +.nav li.active > a { + color: #428bca; } - -.hide { - display: none !important; +.nav > li.active > a { + border-right: 3px solid #428bca; } - -.show { - display: block !important; +.navbar-brand { + background: url(../img/scribble.svg) no-repeat 15px center; + text-indent: -999999px; + margin-top: 8px; + margin-right: 10px; + width: 225px; + height: 50px; } - -.invisible { - visibility: hidden; +.navbar-toggle { + border-color: #999999; } - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; +.navbar-toggle .icon-bar { + background-color: #999999; } - -.affix { - position: fixed; +.dropdown-menu li a { + line-height: 1.5714285714; } - -@-ms-viewport { - width: device-width; +.main-banner { + background: #428bca url(../img/banner-bg.jpg) repeat-x left top; + color: #fff; + padding: 60px 0; } - -@media screen and (max-width: 400px) { - @-ms-viewport { - width: 320px; +@media (max-width: 640px) { + .main-banner { + padding: 40px 0; } } - -.hidden { - display: none !important; - visibility: hidden !important; +.main-banner h1 { + font-weight: 300; + line-height: 1.1; + margin-top: 0; + font-size: 40px; + margin-bottom: 6px; + text-shadow: 0px 3px 5px rgba(0, 0, 0, 0.15); } - -.visible-xs { - display: none !important; +.main-banner p { + font-size: 18px; + color: rgba(255, 255, 255, 0.5); + margin-left: 2px; } - -tr.visible-xs { - display: none !important; +.homepage .main-banner { + padding: 25px 0; + text-align: center; } - -th.visible-xs, -td.visible-xs { - display: none !important; +.homepage .main-banner h1 { + font-size: 60px; + margin-bottom: 20px; +} +@media (max-width: 991px) { + .homepage .main-banner h1 { + /* 991px */ + font-size: 56px; + } } - @media (max-width: 767px) { - .visible-xs { - display: block !important; + .homepage .main-banner h1 { + /* 767px */ + margin-left: 15px; + margin-right: 15px; + margin-top: 5px; + font-size: 48px; + margin-bottom: 40px; } - tr.visible-xs { - display: table-row !important; +} +@media (max-width: 640px) { + .homepage .main-banner h1 { + font-size: 36px; + margin-bottom: 25px; + margin-left: 0; + margin-right: 0; } - th.visible-xs, - td.visible-xs { - display: table-cell !important; +} +@media (min-width: 768px) { + .homepage .main-banner h1 span { + /* 768px */ + white-space: nowrap; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-xs.visible-sm { - display: block !important; +.homepage .main-banner .buttons { + margin-bottom: 10px; +} +.homepage .main-banner .buttons .btn-lg { + font-size: 20px; + border: 2px solid #fff; + width: 215px; + padding: 14px; + opacity: 0.9; + margin-right: 7px; + margin-left: 7px; + margin-bottom: 10px; +} +.homepage .main-banner .buttons .btn-lg.btn-primary { + background-color: #fff; + color: #428bca; +} +.homepage .main-banner .buttons .btn-lg.btn-default { + background-color: transparent; + background-image: none; + border-color: #fff; + color: #fff; +} +.homepage .main-banner .buttons .btn-lg:hover { + opacity: 1; + -webkit-transition: 0.1s linear; + -moz-transition: 0.1s linear; + transition: 0.1s linear; +} +.homepage .main-banner .version { + color: rgba(255, 255, 255, 0.5); + font-size: 14px; + font-style: normal; +} +.homepage .main-banner .version .fa { + margin-right: 5px; +} +/* Animations */ +@-webkit-keyframes fadeInUpWebkit { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); } - tr.visible-xs.visible-sm { - display: table-row !important; + to { + opacity: 1; + -webkit-transform: none; + transform: none; } - th.visible-xs.visible-sm, - td.visible-xs.visible-sm { - display: table-cell !important; +} +@-moz-keyframes fadeInUpMoz { + from { + opacity: 0; + -moz-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -moz-transform: none; + transform: none; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-xs.visible-md { - display: block !important; +@keyframes fadeInUp { + from { + opacity: 0; + transform: translate3d(0, 100%, 0); } - tr.visible-xs.visible-md { - display: table-row !important; + to { + opacity: 1; + transform: none; } - th.visible-xs.visible-md, - td.visible-xs.visible-md { - display: table-cell !important; +} +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; } } - -@media (min-width: 1200px) { - .visible-xs.visible-lg { - display: block !important; +@-moz-keyframes fadeIn { + from { + opacity: 0; } - tr.visible-xs.visible-lg { - display: table-row !important; + to { + opacity: 1; } - th.visible-xs.visible-lg, - td.visible-xs.visible-lg { - display: table-cell !important; +} +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; } } - -.visible-sm { - display: none !important; +.fade-in-up { + opacity: 0; + -webkit-animation: fadeInUpWebkit ease 1; + -moz-animation: fadeInUpMoz ease-in 1; + animation: fadeInUp ease-in 1; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + -webkit-animation-duration: 1s; + -moz-animation-duration: 1s; + animation-duration: 1s; +} +.fade-in-up.one { + -webkit-animation-delay: 0.6s; + -moz-animation-delay: 0.6s; + animation-delay: 0.6s; +} +.fade-in { + opacity: 0; + /* make things invisible upon start */ + -webkit-animation: fadeIn ease 1; + /* call our keyframe named fadeIn, use animattion ease-in and repeat it only 1 time */ + -moz-animation: fadeIn ease-in 1; + animation: fadeIn ease-in 1; + -webkit-animation-fill-mode: forwards; + /* this makes sure that after animation is done we remain at the last keyframe value (opacity: 1)*/ + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + -webkit-animation-duration: 1s; + -moz-animation-duration: 1s; + animation-duration: 1s; +} +.fade-in.two { + -webkit-animation-delay: 1.4s; + -moz-animation-delay: 1.4s; + animation-delay: 1.4s; +} +.fade-in.three { + -webkit-animation-delay: 2s; + -moz-animation-delay: 2s; + animation-delay: 2s; +} +.boxes { + padding-top: 1px; + padding-bottom: 0; +} +.boxes .row { + margin-left: 0; + margin-right: 0; } - -tr.visible-sm { - display: none !important; +.boxes .box { + padding: 0; } - -th.visible-sm, -td.visible-sm { - display: none !important; +.boxes .box .content { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e2e2e2 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e2e2e2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe2e2e2', GradientType=0); + border: 1px solid #fff; + height: 200px; + text-align: center; + background-repeat: no-repeat; + background-position: center top; + background-size: auto 200px; } - -@media (max-width: 767px) { - .visible-sm.visible-xs { - display: block !important; +.boxes .box.server-side .content { + background-image: url(../img/box-server.jpg); +} +@media only screen and (-Webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (min-device-pixel-ratio: 1.5) { + .boxes .box.server-side .content { + background-image: url(../img/box-server@2x.jpg); } - tr.visible-sm.visible-xs { - display: table-row !important; +} +.boxes .box.services .content { + background-image: url(../img/box-services.jpg); +} +@media only screen and (-Webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (min-device-pixel-ratio: 1.5) { + .boxes .box.services .content { + background-image: url(../img/box-services@2x.jpg); } - th.visible-sm.visible-xs, - td.visible-sm.visible-xs { - display: table-cell !important; +} +.boxes .box.cloud .content { + background-image: url(../img/box-cloud.jpg); +} +@media only screen and (-Webkit-min-device-pixel-ratio: 1.5), only screen and (-moz-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (min-device-pixel-ratio: 1.5) { + .boxes .box.cloud .content { + background-image: url(../img/box-cloud@2x.jpg); } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; +.boxes .box h3 { + font-size: 20px; + margin-top: 20px; + margin-bottom: 2px; +} +@media (max-width: 991px) { + .boxes .box h3 { + /* 991px */ + font-size: 18px; } - tr.visible-sm { - display: table-row !important; +} +.boxes .box p, +.boxes .box a { + font-size: 14px; +} +.boxes .box p { + color: #999999; +} +.description { + background: url(../img/home-separator.png) no-repeat center bottom; + background-size: 100% 1px; +} +.description p { + font-size: 20px; + line-height: 1.6; + text-align: center; + padding: 0 20%; + margin: 5px 0; + font-weight: 300; +} +@media (max-width: 1199px) { + .description p { + /* 1199px */ + padding: 0 14%; } - th.visible-sm, - td.visible-sm { - display: table-cell !important; +} +@media (max-width: 991px) { + .description p { + /* 991px */ + padding: 0 30px; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-sm.visible-md { - display: block !important; +@media (max-width: 767px) { + .description p { + /* 768px */ + padding: 0 15px; + font-size: 16px; } - tr.visible-sm.visible-md { - display: table-row !important; +} +.main-features h2 { + font-size: 36px; + font-weight: 300; + text-align: center; + margin-bottom: 50px; +} +@media (max-width: 767px) { + .main-features h2 { + /* 768px */ + font-size: 30px; + margin-bottom: 40px; + margin-top: 10px; } - th.visible-sm.visible-md, - td.visible-sm.visible-md { - display: table-cell !important; +} +.main-features ul { + padding-left: 0; +} +.main-features ul li { + list-style: none; + text-align: center; + margin-bottom: 30px; +} +.main-features ul li .fa { + font-size: 40px; +} +.main-features ul li h4 { + font-size: 16px; + font-weight: 600; + margin-bottom: 5px; +} +.main-features ul li h4 span { + color: #999999; + font-weight: 400; +} +@media (min-width: 992px) { + #sidebar { + margin-top: 6px; } } - @media (min-width: 1200px) { - .visible-sm.visible-lg { - display: block !important; - } - tr.visible-sm.visible-lg { - display: table-row !important; + #preamble .affix { + top: 95px; + width: calc(1270px/4 - 30px); } - th.visible-sm.visible-lg, - td.visible-sm.visible-lg { - display: table-cell !important; +} +@media (max-width: 1199px) { + #preamble .affix { + top: 95px; + width: calc(970px/4 - 30px); } } - -.visible-md { - display: none !important; +#preamble > .nav > li > .nav { + display: none; } - -tr.visible-md { - display: none !important; +.sidebar > .nav > li.active > .nav { + display: block; } - -th.visible-md, -td.visible-md { - display: none !important; +.sidebar a { + font-weight: 400; +} +.sidebar .active > a { + border-right: 2px solid #428bca; +} +.sidebar > .nav > li > a { + text-transform: uppercase; +} +.sidebar .nav > li > a { + padding: 8px 15px; +} +.sidebar .nav > li > .nav { + margin-bottom: 10px; +} +.sidebar .nav > li > .nav li a { + padding: 4px 15px 4px 35px; +} +.sidebar .nav > li a.btn { + margin-bottom: 15px; + margin-top: -6px; + color: #484848; + text-transform: none; +} +.imageblock { + margin-bottom: 10px; +} +.imageblock + .paragraph { + margin-top: 15px; +} +.paragraph + .imageblock { + margin-top: 17px; +} +.downloads .btn.github { + width: calc(50% - 15px); + margin-bottom: 10px; } - @media (max-width: 767px) { - .visible-md.visible-xs { - display: block !important; - } - tr.visible-md.visible-xs { - display: table-row !important; - } - th.visible-md.visible-xs, - td.visible-md.visible-xs { - display: table-cell !important; + .downloads .btn.github { + width: 100%; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-md.visible-sm { - display: block !important; - } - tr.visible-md.visible-sm { - display: table-row !important; - } - th.visible-md.visible-sm, - td.visible-md.visible-sm { - display: table-cell !important; - } +.downloads .download-buttons { + margin-bottom: 10px; } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } +.downloads .download-buttons .btn span { + color: #999999; + font-size: 0.75em; } - -@media (min-width: 1200px) { - .visible-md.visible-lg { - display: block !important; - } - tr.visible-md.visible-lg { - display: table-row !important; +@media (max-width: 767px) { + .downloads .download-buttons .btn { + margin-bottom: 10px; } - th.visible-md.visible-lg, - td.visible-md.visible-lg { - display: table-cell !important; +} +.builds tr.FAILURE td { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442; +} +/* Adjusting anchor position */ +.downloads, +.documentation, +.scripting, +.community { + /* General styles */ + /* Downloads page */ + /* Documentation page */ +} +.downloads h2, +.documentation h2, +.scripting h2, +.community h2, +.downloads h3, +.documentation h3, +.scripting h3, +.community h3, +.downloads h4, +.documentation h4, +.scripting h4, +.community h4 { + padding-top: 86px; +} +.downloads h3, +.documentation h3, +.scripting h3, +.community h3, +.downloads h4, +.documentation h4, +.scripting h4, +.community h4 { + margin-top: -76px; +} +.downloads h2, +.documentation h2, +.scripting h2, +.community h2 { + margin-top: -66px; +} +.downloads h2.first, +.documentation h2.first, +.scripting h2.first, +.community h2.first, +.downloads table + h2, +.documentation table + h2, +.scripting table + h2, +.community table + h2, +.downloads p.lead + h3, +.documentation p.lead + h3, +.scripting p.lead + h3, +.community p.lead + h3 { + margin-top: -86px; +} +.downloads .text-content > .sect1:first-child > h2, +.documentation .text-content > .sect1:first-child > h2, +.scripting .text-content > .sect1:first-child > h2, +.community .text-content > .sect1:first-child > h2, +.downloads h2 + .sect2 > h3, +.documentation h2 + .sect2 > h3, +.scripting h2 + .sect2 > h3, +.community h2 + .sect2 > h3, +.downloads h2 + .sectionbody > .sect2:first-child > h3, +.documentation h2 + .sectionbody > .sect2:first-child > h3, +.scripting h2 + .sectionbody > .sect2:first-child > h3, +.community h2 + .sectionbody > .sect2:first-child > h3 { + margin-top: -86px; +} +.blog .main-banner { + text-align: center; +} +.blog .main-banner h1 { + background: url(../img/Scribble.png) no-repeat center top; + background-size: 100px 100px; + padding-top: 105px; +} +.panel { + border-bottom: 1px solid #dddddd; + padding-bottom: 20px; + border-radius: 0; + margin-bottom: 30px; + box-shadow: none; + -webkit-box-shadow: none; +} +.blog { + font-size: 10px; +} +@media (max-width: 640px) { + .blog { + font-size: 9px; } } - -.visible-lg { - display: none !important; +.blog h1 { + margin-bottom: 5px; + font-size: 3.6em; +} +.blog h2 { + font-size: 2.7em; + margin-bottom: 20px; +} +.blog h3 { + font-size: 2.3em; +} +.blog .author, +.blog .date { + display: inline-block; + color: #999999; + font-size: 1.4em; +} +.blog-post .author, +.blog-post .date { + margin-bottom: 25px; +} +.blog-post .author + .date:before { + content: "."; + vertical-align: super; + margin-left: 3px; + margin-right: 3px; +} +.blog-post p { + font-family: 'Open Sans', sans-serif; + font-weight: 300; + font-size: 1.8em; +} +.blog-post ul li p { + margin-bottom: 0; } - -tr.visible-lg { - display: none !important; +.blog-post .imageblock, +.blog-post .videoblock { + margin-top: 15px; } - -th.visible-lg, -td.visible-lg { - display: none !important; +.blog-post-listings h3 { + margin-bottom: 0; } - -@media (max-width: 767px) { - .visible-lg.visible-xs { - display: block !important; - } - tr.visible-lg.visible-xs { - display: table-row !important; - } - th.visible-lg.visible-xs, - td.visible-lg.visible-xs { - display: table-cell !important; - } +.blog-post-item h4 { + margin-bottom: 5px; } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-lg.visible-sm { - display: block !important; - } - tr.visible-lg.visible-sm { - display: table-row !important; - } - th.visible-lg.visible-sm, - td.visible-lg.visible-sm { - display: table-cell !important; - } +.blog-pagination .older, +.blog-pagination .newer { + font-size: 1.8em; + color: #999999; } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-lg.visible-md { - display: block !important; - } - tr.visible-lg.visible-md { - display: table-row !important; - } - th.visible-lg.visible-md, - td.visible-lg.visible-md { - display: table-cell !important; - } +.dropup { + margin-top: 6px!important; } - -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } +#tabnav-panel.tabnav-opened { + margin-bottom: -7px; } - -.hidden-xs { - display: block !important; +.note { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f; + margin-bottom: 10px; } - -tr.hidden-xs { - display: table-row !important; +.note h4 { + margin-top: 0; + color: inherit; } - -th.hidden-xs, -td.hidden-xs { - display: table-cell !important; +.note .alert-link { + font-weight: bold; } - -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } - tr.hidden-xs { - display: none !important; - } - th.hidden-xs, - td.hidden-xs { - display: none !important; - } +.note > p, +.note > ul { + margin-bottom: 0; } - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-xs.hidden-sm { - display: none !important; - } - tr.hidden-xs.hidden-sm { - display: none !important; - } - th.hidden-xs.hidden-sm, - td.hidden-xs.hidden-sm { - display: none !important; - } +.note > p + p { + margin-top: 5px; } - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-xs.hidden-md { - display: none !important; - } - tr.hidden-xs.hidden-md { - display: none !important; - } - th.hidden-xs.hidden-md, - td.hidden-xs.hidden-md { - display: none !important; - } +.note hr { + border-top-color: #a6e1ec; } - -@media (min-width: 1200px) { - .hidden-xs.hidden-lg { - display: none !important; - } - tr.hidden-xs.hidden-lg { - display: none !important; - } - th.hidden-xs.hidden-lg, - td.hidden-xs.hidden-lg { - display: none !important; - } +.note .alert-link { + color: #245269; } - -.hidden-sm { - display: block !important; +.note .fa { + font-size: 16px; + color: #31708f; + margin-right: 10px; } - -tr.hidden-sm { - display: table-row !important; +.admonitionblock td.icon .icon-note:before { + content: "\f05a"; } - -th.hidden-sm, -td.hidden-sm { - display: table-cell !important; +.quoteblock blockquote { + padding: 5px 20px; } - -@media (max-width: 767px) { - .hidden-sm.hidden-xs { - display: none !important; - } - tr.hidden-sm.hidden-xs { - display: none !important; - } - th.hidden-sm.hidden-xs, - td.hidden-sm.hidden-xs { - display: none !important; - } +.quoteblock p { + font-size: 14px; } - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } - tr.hidden-sm { - display: none !important; - } - th.hidden-sm, - td.hidden-sm { - display: none !important; - } +table.tableblock { + width: 100%; + max-width: 100%; + margin-bottom: 20px; } - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-sm.hidden-md { - display: none !important; - } - tr.hidden-sm.hidden-md { - display: none !important; - } - th.hidden-sm.hidden-md, - td.hidden-sm.hidden-md { - display: none !important; - } +table.tableblock > thead > tr > th, +table.tableblock > tbody > tr > th, +table.tableblock > tfoot > tr > th, +table.tableblock > thead > tr > td, +table.tableblock > tbody > tr > td, +table.tableblock > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dddddd; } - -@media (min-width: 1200px) { - .hidden-sm.hidden-lg { - display: none !important; - } - tr.hidden-sm.hidden-lg { - display: none !important; - } - th.hidden-sm.hidden-lg, - td.hidden-sm.hidden-lg { - display: none !important; - } +table.tableblock > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; } - -.hidden-md { - display: block !important; +table.tableblock > caption + thead > tr:first-child > th, +table.tableblock > colgroup + thead > tr:first-child > th, +table.tableblock > thead:first-child > tr:first-child > th, +table.tableblock > caption + thead > tr:first-child > td, +table.tableblock > colgroup + thead > tr:first-child > td, +table.tableblock > thead:first-child > tr:first-child > td { + border-top: 0; } - -tr.hidden-md { - display: table-row !important; +table.tableblock > tbody + tbody { + border-top: 2px solid #dddddd; } - -th.hidden-md, -td.hidden-md { - display: table-cell !important; +table.tableblock .table { + background-color: #ffffff; } - -@media (max-width: 767px) { - .hidden-md.hidden-xs { - display: none !important; - } - tr.hidden-md.hidden-xs { - display: none !important; - } - th.hidden-md.hidden-xs, - td.hidden-md.hidden-xs { - display: none !important; - } +table.tableblock > tbody > tr:nth-child(odd) { + background-color: #f9f9f9; } - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-md.hidden-sm { - display: none !important; - } - tr.hidden-md.hidden-sm { - display: none !important; - } - th.hidden-md.hidden-sm, - td.hidden-md.hidden-sm { - display: none !important; - } +.colist { + margin-bottom: 10px; } - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } - tr.hidden-md { - display: none !important; - } - th.hidden-md, - td.hidden-md { - display: none !important; - } +.colist.arabic tr td:first-child { + padding-right: 10px; + vertical-align: top; } - -@media (min-width: 1200px) { - .hidden-md.hidden-lg { - display: none !important; - } - tr.hidden-md.hidden-lg { - display: none !important; - } - th.hidden-md.hidden-lg, - td.hidden-md.hidden-lg { - display: none !important; - } +#tabnav-panel.tabnav-opened { + height: 220px; + background: #f2f8ff; } -.hidden-lg { - display: block !important; +#tabnav .tabcontent { + padding-top: 30px; + height: 100%; + clear: both; + background: #f2f8ff; + padding: 20px 25px; } - -tr.hidden-lg { - display: table-row !important; +*:focus { + outline: 0; } - -th.hidden-lg, -td.hidden-lg { - display: table-cell !important; +::selection { + background: #e1eef4; } - -@media (max-width: 767px) { - .hidden-lg.hidden-xs { - display: none !important; - } - tr.hidden-lg.hidden-xs { - display: none !important; - } - th.hidden-lg.hidden-xs, - td.hidden-lg.hidden-xs { - display: none !important; - } +::-moz-selection { + background: #e1eef4; } -@media (min-width: 768px) and (max-width: 991px) { - .hidden-lg.hidden-sm { - display: none !important; - } - tr.hidden-lg.hidden-sm { - display: none !important; - } - th.hidden-lg.hidden-sm, - td.hidden-lg.hidden-sm { - display: none !important; - } +/* ----- fork on github banner ----- */ +#forkongithubp { + text-align: center; } -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-lg.hidden-md { - display: none !important; - } - tr.hidden-lg.hidden-md { - display: none !important; - } - th.hidden-lg.hidden-md, - td.hidden-lg.hidden-md { - display: none !important; - } +#forkongithub a { + color:#428bca; +} +.bg-grey { background-color: #333 !important; } +#forkongithub a::before, #forkongithub a::after { + content:""; width:100%; display:block; position:absolute; + top:1px; left:0; height:1px; background:#fff; +} +#forkongithub a::after { bottom:1px; top:auto; } + +@media screen and (min-width:992px) { + #forkongithub { + position:fixed; + display:block; + top:0; + right:0; + width:200px; + overflow:hidden; + height:200px; + z-index:9999; + } + #forkongithub a { + color:#fff; + text-decoration:none; + font-family:arial,sans-serif; + text-align:center; + font-weight:700; + font-size:1.5rem; + line-height:3rem; + padding:5px 40px; + width:200px; + position:absolute; + top:50px; + right:-75px; + transform:rotate(45deg); + -webkit-transform:rotate(45deg); + -ms-transform:rotate(45deg); + -moz-transform:rotate(45deg); + -o-transform:rotate(45deg); + box-shadow:4px 4px 10px rgba(0,0,0,0.8); + box-sizing: content-box; + } + .bg-grey { background-color: #444 !important; } +} + + +#toc { + border: 0; + display: none; } @media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } - tr.hidden-lg { - display: none !important; - } - th.hidden-lg, - td.hidden-lg { - display: none !important; + #toc { + display: block; } } -.visible-print { - display: none !important; +#toc ul { + text-transform: none; + white-space: nowrap; + padding-left: 5px; + line-height: 2.5; } -tr.visible-print { - display: none !important; +#toc .nav li a { + padding-right : 5px; } -th.visible-print, -td.visible-print { - display: none !important; +#toc ul.sectlevel1 { + text-transform: uppercase; } -@media print { - .visible-print { - display: block !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } - .hidden-print { - display: none !important; - } - tr.hidden-print { - display: none !important; - } - th.hidden-print, - td.hidden-print { - display: none !important; - } -} \ No newline at end of file +/* red hat tabzilla */ +.dropup { + right: 180px; +} + +#toctitle { + visibility: hidden; +} diff --git a/docs/Scribble_Protocol_Language_Guide.pdf b/docs/Scribble_Protocol_Language_Guide.pdf deleted file mode 100644 index 506b15a..0000000 Binary files a/docs/Scribble_Protocol_Language_Guide.pdf and /dev/null differ diff --git a/docs/dev/developer-guide.html b/docs/dev/developer-guide.html new file mode 100644 index 0000000..555c750 --- /dev/null +++ b/docs/dev/developer-guide.html @@ -0,0 +1,250 @@ + + + + + Scribble - How to develop with Scribble + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + +
+
+

How to develop with Scribble

+

Developing with Scribble

+
+
+ + + +
+
+ +
+

Developing Scribble

+
+
+

Project Code

+
+

The source code for the Scribble project is located on github in the Scribble organisation.

+
+
+

The organisation is divided into a number of git repositories. The main repositories currently are:

+
+
+

Scribble Java

+
+

The repository is located here.

+
+
+

This repository contains the core java code for the Scribble parser, validation, projection and monitoring capabilities.

+
+
+
+

Scribble Web

+
+

The repository is located here.

+
+
+

This repository provides the web tooling. The server side capabilities are implemented in java, with the UI implemented using AngularJS/Bootstrap.

+
+
+
+
+

Contributing to the Project

+
+

The best way to initially contribute to the project is to try out the tools and provide feedback by creating issues for feature requests or problems found.

+
+
+

The next step could be to provide contributions for the issues listed against any of the git repositories. These can be contributed as pull requests, which can then be reviewed by the project developers.

+
+
+ + + + + +
+ + +Documentation for the older version of the tools can be found here. +
+
+
+
+
+
+
+ +
+ + +
+
+

© Scribble.org, 2009-2015 | Baked with JBake v2.3.2

+

+ + Fork me on GitHub + +

+
+
+ + + + + + + + + + + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..805fab3 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,195 @@ + + + + + Scribble - Documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + +
+
+

Documentation

+

Documentation for Scribble

+
+
+ + + +
+
+
+

Documentation for Scribble

+
+
+ +
+
+
+ +
+ + +
+
+

© Scribble.org, 2009-2015 | Baked with JBake v2.3.2

+

+ + Fork me on GitHub + +

+
+
+ + + + + + + + + + + + + diff --git a/docs/langref.html b/docs/langref.html deleted file mode 100644 index 3ec5a68..0000000 --- a/docs/langref.html +++ /dev/null @@ -1,1169 +0,0 @@ - - - - Scribble Language Reference - - Version 0.2 - - - - - - - - - - -

- Scribble Language Reference -
- Version 0.2 -

The Scribble team


-

Contents


-

Chapter 1  Introduction

-

This document is the Scribble language reference. It defines the -language syntax and conventions -for Scribble protocols. -It also defines the semantics of -Scribble protocols -in terms of event traces.


-

1.1  Notation

Scribble syntax is specified using a BNF-like notation. Terminal -symbols are in purple with typewriter -font. Non-terminal -symbols are in italic. Each grammar rule starts with a non-terminal (the name defined by the rule) and ::=. - Parentheses ( ) are used for grouping grammar elements, square -brackets [ ] for an optional element, vertical bar | for separating - alternatives, and star * for zero or more repetitions of the preceding -element. An ellipsis is used for choice of any single character from an -inclusive range of ASCII characters, e.g. a … z means any lower case letter. -


-

1.2  Terminology

This document uses the following terminology related to -Scribble protocols.

-Principal
- An identifiable network entity that can function as a conversation endpoint. -
Conversation
- A communication session between principals.
Role
A role is an abstract principal inside a -conversation. It represents one endpoint of this conversation. -
Global protocol
- A global protocol is an abstract specification of a conversation. It -specifies the communication between roles from a global (neutral) -perspective.

Local protocol
- A local protocol specifies the local behaviour of a role (i.e. from the perspective of that role). -
-Message
- A unit of communication between - principals in a conversation.
Network
- The - interconnect between principals responsible for message delivery. -
Message dispatch
- The event of - a principal - committing - a message to the network for delivery. -
Message delivery
- The - event of delivering a dispatched message to the - target principal. -
Message consume
- The event of a principal - consuming a message delivered by the network. -

-

Chapter 2  Lexical Structure

This section specifies the lexical structure of the Scribble language.


-

2.1  White Space

White - space is defined as the ASCII space and horizontal tab characters, and -line terminators (ASCII LF, CR or CRLF). White space in Scribble -protocols serves only to delimit lexical tokens. -


-

2.2  Comments

Block comments are opened by /* and closed by -*/. Single-line comments start from // - and end at the first line terminator. -Comments do not nest. Block comments have no special meaning within a -single-line comment and vice versa. Comments delimit lexical tokens -similarly to white space.


-

2.3  Identifiers

- - -
- - - - -
  identifier::=letter  |  _ ) -  ( letter  |  digit  |  _ -  )* 
  extidentifier::=letter  |  _ |  symbol) -  ( letter  |  digit  |  _ | symbol -  )* 
  letter::=a … z  |  A … Z 
  digit::=0 … 9
  symbol::={ | } | ( | ) | [ | ] | : | / | \ | . | # | & | ? | !
-
-

An identifier is a sequence of ASCII letters, digits and the _ character that does not start with a digit. -Identifiers cannot be among the reserved keywords. Identifiers should not be longer than 256 characters.


-

2.4  Keywords

The following character sequences are reserved -as Scribble keywords. -They cannot be used as identifiers or message operators.

-
- - - - -
and    as    at    by    catch 
choice    continue    create    do    enter 
from    global    import    instantiates    interruptible 
local    or    par    protocol    rec 
role    spawns    throw    to    with

-

Chapter 3  Syntax

This chapter -specifies -the syntax of the Scribble language.


-

3.1  Packages and Modules


-

3.1.1  Packages

The Scribble package hierarchy is a tree of package nodes. Leaf nodes are modules, which are Scribble source files. Non-leaf nodes are simply called packages, which may contain other packages and modules as subpackages. - Scribble packages correspond to directories on the file system, with -subpackages nested inside their parent package directories. -

- - -
- -
package-name::=identifier ( . identifier )*
-
-
-

Every package has a simple package name and a fully qualified package name. The simple package name is an identifier. The fully qualified package name -(package-name) -is a dot-separated sequence of simple package names, where each identifier - in the sequence denotes a package that is a direct subpackage of the -preceding package, starting from the root package and ending with its -simple package name.


-

3.1.2  Modules

A -Scribble module is a leaf package. -A module is a text file with four parts: a package declaration, an optional list of -import declarations, a list of zero or more payload type declarations, -and a list of zero or more protocol declarations. -The start symbol of the grammar for -the contents of a Scribble module -is -module: -

- - -
- -
module - - - - ::= package-decl - ( import-decl )* ( payload-type-decl )*  ( - protocol-decl - )*
-
-
-

A module starts with a package declaration that specifies the fully qualified package name of the module.

- - -
-
package-decl - - ::= package package-name ;
-
-
-

The filename of the module is required to be the simple package name appended with the suffix .spr.


-

3.1.3  Import Declarations

- - -
- - -
import-decl - - ::= import package-name - ;
| from package-name - import identifier [ as identifier ] ;
-
-
-

The first case is called a module import. -The package-name -specifies the fully qualified package name of the module to import. -The second case is called a module member import. -The package-name specifies the fully qualified package name of the module to import from, -and the first identifier specifies a module member name, which together specify the imported member. The second identifier in the module member import is an optional alias by which the imported member may be referred to within the current module.

Module - files must be situated within the package directory to which they -belong. Package directories must be nested according to their subpackage - structure. -When a module is imported, the Scribble tool searches the locations specified in the Scribble import path for the source file. The tool does so by looking for a file of the same simple name appended with .spr - in the subdirectory corresponding to the module’s package from each of -the base directories in the import path. -The import path is specified as an argument to the tool. The tool -searches the import path in order and uses the first match that it -finds. If the tool is unable to find the module, the tool will terminate - with an error.


-

3.1.4  Module Members and Visibility

The members of a module are the payload types and protocols declared in the module. -Like packages, module members have simple member names and fully qualified member names. - The simple member names of payload types and protocols are declared by -the corresponding payload type and protocol declarations. The fully -qualified member names are given by the fully qualified package name of the module to which the member belongs, appended with a dot (.) and the simple member name.

The -payload types and protocols -that are visible within a module are:


-

3.2  Payload Type Declarations

A payload type represents the data carried as a payload by a Scribble message. -

- - -
-
payload-type-decl - ::=  type -  < identifier > extidentifier  from extidentifier -  as identifier ; -  
-
-
-

Payload types are declared by the keyword type. The first identifier -in angle brackets specifies a message schema type (e.g. YSD), and the following extidentifier specifies the name -of the payload type to be imported from an external message schema. -The format of the payload type name will depend on the specified schema type. -The second extidentifier specifies the filename of the schema source file from which the payload type is to be imported. -The -final identifier -specifies the alias -by which the payload type should be referred to within the -current module. -

When a payload type is declared, the Scribble tool searches for the specified file on the Scribble payload type path. - The payload type path is specified as an argument to the tool. The tool - searches the payload type path in order and uses the first match that -it finds. If the tool is unable to find the payload type, the tool will -terminate with an error.


-

3.2.1  Visible Payload Types

The payload types that are visible within a module are the declared payload types when referred to by their aliases.


-

3.3  Message Signatures

A Scribble message signature comprises an operator header and an optional comma-separated list of payload types.

- - -
- - - -
message-operator::=letter  | digit | _ )*
message-signature::=message-operator  ( [ payload-type ( , payload-type )* ] ) 
payload-type - ::=identifier  : ] identifier 
- -
-
-

A message operator is a (possibly empty) sequence of letters, digits and the ASCII -underscore character. An operator cannot be among the reserved -keywords. The payload of the message is specified by the optional -group inside the parentheses. -The optional identifier in a payload type is a annotation that associates a variable name to the payload. If present, the annotation is followed by a colon. The mandatory identifier is the data type of the payload. -The data type must be a visible payload type.


-

3.4  Protocol Declarations

A protocol declaration is either a global protocol declaration or a local protocol declaration.

-
-

-

3.5  Global Protocols

A global protocol declaration has the following syntax.

- - -
- - - - - - - -
global-protocol-decl - - ::= global protocol identifier global-protocol-definition
global-protocol-definition - - ::=< parameter-list > ] ( [ role-list ] ) global-protocol-body
| ( [ role-list ] ) instantiates identifier [ < argument-list > ] ;
role-list - - ::= role role-name ( , role role-name )*
role-name - ::= identifier
parameter-list - - ::= sig identifier  ( , sig identifier )*
argument-list - - ::= message-signature  ( , message-signature )*
-
-
-

A global protocol declaration starts with the keywords global -protocol. It is followed by a name for the protocol, a role list -and an optional parameter list. A role list is a comma-separated list -of identifiers each preceded by the -keyword role. A parameter list is a comma-separated list of -identifiers each preceded by the keyword sig (this sig -specifies the kind of entities we are abstracting, here meaning -a message signature: other kinds such as payload types -may be included in later versions).

The global protocol declaration then either ends with -a global protocol body, or the instantiates keyword followed by -an identifier. The identifier in the latter case specifies the name of the -parent global protocol being instantiated.


-

3.5.1  Global Interaction Blocks and Sequences

The body of a global protocol declaration is a global interaction -block. A global interaction block is a global interaction sequence enclosed by -curly braces { }.

-
-

A global interaction sequence is -a possibly empty sequence of global interactions: point-to-point message transfer, choice, parallel, recursion and continue.


-

3.5.2  Point-to-Point Message Transfer

A point-to-point message transfer -specifies the communication of a single message between two roles.

- - -
- -
message::=message-signature | identifier ]  from role-name -  to role-name ;
- -
-
-

A message transfer starts with a message-signature or an identifier declared as a generic message parameter. The -role-name immediately after the from keyword specifies the sender of the message. The -role-name after the to keyword specifies the receiver.


-

3.5.3  Choice

The choice construct specifies that one role chooses one out of a set -of interaction blocks for the protocol to follow. The choice of -an interaction block is mutually exclusive; the conversation follows -exactly one interaction block.

- - -
-
choice::=choice at role-name -  global-interaction-block  ( or -  global-interaction-block  )*
-
- -
-
-

A choice starts with the keywords choice at, -followed by a role-name designating the role responsible for the choice. -This is followed by a list of global interaction blocks separated by the keyword -or. The interaction block list cannot be empty.


-

3.5.4  Parallel

The parallel construct specifies a set of interactions that can -happen concurrently.

- - -
-
parallel::= par global-interaction-block  ( and - global-interaction-block  )*
-
- -
-
-

A parallel starts with the keyword par, -followed by a list of global interaction blocks separated by the keyword -and. The interaction block list cannot be empty.


-

3.5.5  Recursion

The recursion construct is used to specify loops in the control flow of a protocol.

- - -
- -
          recursion::=rec identifier global-interaction-block
continue::=continue identifier ;
-
- -
-
-

A -recursion point is specified by the keyword rec and an identifier -label for this point. -Within the following global interaction block, the keyword -continue followed by a recursion point identifier specifes that the control flow of the protocol should -return to that point.


-

3.5.6  Interruptible

The interruptible construct specifies a sequence of interactions that may be interrupted by the specified roles. -A raised interrupt is -communicated -to all other -roles -in the conversation. On raising or receiving an interrupt, the role -exits the interruptible block, activating the subsequent action(s). -In the present version, this means the endpoint will exit -the conversation.

- - -
- -
        interruptible - ::=interruptible global-interaction-block - with { ( interrupt )+ }
interrupt - ::= message-signature ( , message-signature )* by - role-name ( , role-name )* ;
-
- -
-
-

An interruptible starts with the keyword interruptible followed by a global -interaction block. This is followed by a list of the keyword with, each followed by a message signature and a global interaction block.


-

3.5.7  Do

...visibility...

The do construct specifies that -the interactions specified by another protocol (called the target protocol) -should be performed -inline with the current conversation. Note that the Scribble do construct should not be confused with do statements found in other languages, -such as for performing loops or for performing a sequence of -imperative actions.

- - -
- -
        do::=do identifier [ < argument-list > ] ( - role-instantiation-list - ) ;
role-instantiation-list::=role-name as role-name ( , role-name as role-name )*
-
- -
-
-

A do -starts with the keyword do -followed by the name of the target protocol, a -an optional argument list and a role instantiation list, and is terminated by a semicolon.

The protocol identifier should correspond to a known protocol. The parameter list and role list in the definition of the -target protocol must respectively be of the same length as the argument list and role instantiation list present in the -do construct. -For each R1 as R2 element where specified, where R1 and R2 are role-names, in the role instantiation -list, R1 must be a role of the current protocol and -R2 a role of the target protocol. -


-

3.5.8  Spawn

The spawn construct specifies that -an external conversation should be spawned -to perform -the interactions specified by another protocol (called the target protocol).

- - -
-
spawn::=role-name spawns identifier < [ argument-list ] > ( role-instantiation-list ) ;
-
- -
-
-

A spawn -starts with the name of the role performing the call followed by the keyword spawns, -followed by the name of the target protocol, a -an optional argument list and a role instantiation list, and is terminated by a semicolon.

The protocol identifier should correspond to a known protocol. The argument list in the definition of the -target protocol must be of the same length as the argument list present in the -spawn construct. -For each R1 as R2 element, where R1 and R2 are role-names, in the role instantiation -list, R1 must be a role of the current protocol and -R2 a role of the target protocol.


-

3.6  Local Protocols

A local protocol declaration has the following syntax.

- - -
- -
local-protocol-decl - - ::= local protocol identifier at role-name ( [ role-list ] ) local-protocol-body
-
-
-

A local protocol declaration starts with the keywords local -protocol. It is followed by a name for the protocol, the name of the local -role, a list of roles -and a local protocol body. The role list is a comma-separated list of -identifiers each preceded by the keyword role.


-

3.6.1  Local Interaction Blocks and Sequences

The body of a local protocol declaration is a local interaction block. A -local interaction block is a local interaction sequence enclosed by curly -braces { }.

-
-

A local interaction sequence is -a possibly empty sequence of local interactions: send and receive message transfer, choice, parallel, recursion and continue. -interruptible


-

3.6.2  Point-to-Point Message Transfer

A local message transfer is either a send or a receive of a message to or -from a role.

- - -
- - -
send::=message-signature -  to role-name ;
receive::=message-signature from role-name -  ;
- -
-
-

Both send and receive start with a message-signature. The -role-name immediately after the from keyword specifies the sender of -the message that has to be sent. The -role-name after the to keyword specifies the receiver of a message that -is expected to be received.


-

3.6.3  Choice

The - choice construct specifies that one role chooses one out of a set of -interaction blocks for the protocol to follow. The choice of interaction - block is mutually -exclusive; the conversation follows exactly one interaction block.

- - -
-
local-choice::=choice at role-name -  local-interaction-block  ( or -  local-interaction-block  )*
-
- -
-
-

A choice starts with the keywords choice at, -followed by a role-name designating the role responsible for the choice. -This is followed by a list of global interaction blocks separated by the keyword -or. The interaction block list cannot be empty.


-

3.6.4  Parallel

The parallel construct specifies a set of interactions that can -happen concurrently.

- - -
-
local-parallel::= par local-interaction-block  ( and - local-interaction-block  )*
-
- -
-
-

A parallel starts with the keyword par, -followed by a list of global interaction blocks separated by the keyword -and. The interaction block list cannot be empty.


-

3.6.5  Recursion

The recursion construct is used to specify loops in the control flow -of a protocol.

- - -
- -
          local-recursion::=rec identifier local-interaction-block
local-continue::=continue identifier ;
-
- -
-
-

A -recursion point is specified by the keyword rec and an identifier -label for this point. -Within the following global interaction block, the keyword -continue followed by a recursion point identifier specifes that the control flow of the protocol should -return to that point.


-

3.6.6  Interruptible

The interruptible construct is used to specify the -interrupts that can be thrown or caught within an interaction block.

- - -
- - -
        interruptible - ::=interruptible - local-interaction-block - [ throw | catch | throw catch ] ;
throw - ::= (throw message-signature ( , message-signature )*
catch - ::= (catch message-signature ( , message-signature )*
-
- -
-
-

An interruptible starts with a keyword interruptible followed by a local -interaction block specifying the main behaviour. This is followed by either a list of the keyword -throw or the keyword catch, each followed by a message signature. -


-

3.6.7  Protocol Creation and -Entrance

The create construct is used to specify the creation part of the call -to another external protocol. The enter construct, its counterpart, is -used to specify joining a newly created external protocol. Both -constructs are the projection of the global calls construct.

- - -
- -
create::=create identifier < parameter-list > ( [ role-instantiation-list ] ) -; 
        enter::=enter identifier as role-name
-
- -
-
-

A protocol creation is specified by the word create, the -identifier of the protocol being created, a parameter list and an -instantiation list.

A protocol entrance is specified by the word enter, the -identifier of the protocol being joined, the word as and the -role played inside the external protocol.


-

Chapter 4  Well-Formed Protocols

...annotations...

This chapter describes the conditions for Scribble protocols to be -well-formed, i.e. giving meaningful protocols, beyond the basic -syntax defined by the language grammar. This is necessary because some -of the protocols are unsafe or inconsistent even if they follow the -grammar (for example, two parallel interactions from the same sender -to the same receiver with the same message signature violates -linearity and leads to a confusion at the receiver). Therefore, -understanding well-formendess is also useful for writing safe -protocols. In the following we outline key conditions for -well-formedness, which will be enough for most protocols.

It is notable that you can check the well-formedness of your protocols -by validating your protocols by the Scribble tool: therefore, you can -also come back to this section when you try out your protocol and -it is refused by the provided Scribble tool.


-

4.1  Global Protocols

A well-formed Scribble global protocol observes the following conditions.


-

4.1.1  General Conditions

-

Syntax Conditions

-

Name Conditions


-

4.1.2  Local Choice Conditions

In a choice, of the form choice at A - block1 oror blockn, the -following conditions should be satisfied.


-

4.1.3  Parallel Conditions

-

Linearity

In a parallel, of the form par block1 and  -… and blockn, the following conditions should be -satisfied.


-

4.1.4  Recursion Conditions

-

Name Conditions


-

4.1.5  Interruptible Conditions


-

4.1.6  Spawn Conditions

-

Recursive Spawns

-

Role Conditions


-

Chapter 5  Semantics

This chapter describes -a denotational semantics -for the Scribble language. -The semantics is given by the communication model.


-

5.1  Communication Model

The -communication model -prescribes a denotational semantics for -Scribble protocols. -The communication model -correlates each -(well-formed) -protocol with a set of sequences -(traces) -of communication events -that are deemed valid for the protocol. -The communication model is asynchronous, meaning that the event of sending a message is -decoupled from the corresponding receive event, -but message order is preserved -between each pair of roles in a conversation.


-

5.1.1  Communication Events

In the -communication model, -a distributed system that implements a -Scribble protocol consists of principals communicating via a -network. -Three kinds of communication events (simply called events for short) are modelled: message dispatch, delivery and consume. These events represent the actions, either performed by a principal (consume and -dispatch) or the network itself (delivery), -involved in -the transfer of a message from the sender to the receiver. -The formulation of the communication model is intended to cater for diverse Scribble Runtime and network implementations.


- - - - - -
-
Figure 5.1: The three kinds of communication events in the communication model
-

Figure 1 -depicts a network configuration that supports conversations between three principals. -Assume that the lower and the right-hand principals are -engaged in -a conversation. -The red arrows illustrate the three kinds of events: -

A Scribble protocol -imposes -constraints on the events and the order in -which they can occur during a conversation -instance of the protocol. -The communication model expresses these constraints by defining the -execution traces of events that are valid for the protocol. -

-

Notation for Events

- The following notation is used for communication - events. Each event - specifies the source - role, the target role and the - message signature of the - message involved in the event. -
-A!B:op(T)
Dispatch event, -by a principal playing source role A, of a message of -signature op(T), addressed to the principal playing the -target role B. -
A>B:op(T)
-Delivery event by the network of a message of signature op(T), dispatched by the principal playing source role A, to the principal playing the target role B. -
B?A:op(T)
Consume event, by -the principal playing target role B, of a message of -signature op(T), dispatched by the principal playing the -source role A. -

The source role of a dispatch or consume event is also called the subject of the event.


-

5.1.2  Communication Event Traces

-

A communication event trace (event trace, or simply trace, for short) is a finte sequence of -events. The communication model -associates a -Scribble protocol with a (possibly infinite) set of traces called the -event trace set (trace set for short). Each trace in -the trace set -represents an execution order of events that is valid -for the -protocol, i.e. the trace may be exhibited by a system in which the -conversation principals conform to the protocol according to their -roles. -

-

Notation for Traces and Trace Sets

The length of a trace is the number of events in its sequence.

-

Operations on Traces

-

Operations on Trace Sets


-

5.2  Global Interaction Semantics

The denotation of a global-interaction, global-interaction-sequence, global-interaction-block or a global-protocol-decl is written D(g), where g belongs to one of the aforementioned syntax categories. The denotation is the trace set -representing all the execution orders of events that are valid according to -the -specified protocol or protocol fragment. Two variants of the D(g) notation are also used:

- - -
Didentifier(g)  i.e. DX(g) for some identifier X;
D(g)  stands for either D(g) or Didentifier(g).
-

D(g) is called the -denotation, and DX(g) the -X-denotation, -of the syntax g. -The X-denotation is used in the treatment of protocol recursion to parameterise the denotation by -an identifier label. -


-

5.2.1  Global Protocol Declaration and Global Interaction Block

The denotations of global-protocol-decl and global-interaction-block are defined in the table below. The denotations of global-interaction-sequence and the global-interaction constructs are defined in the following subsections.

- - - - - -
Category  Denotation
p is a global-protocol-decl  D(p) = D(b)  where b is the global-interaction-block specified by the global-protocol-body of p
b is a global-interaction-block  D(b) = D(s)  where s is the global-interaction-sequence contained by b
global-interaction-sequence  Section 5.2.2
global-interaction  point-to-point message transfer, choice, parallel, recursion, interruptible, do

-

5.2.2  Interaction Sequence

A global-interaction-sequence is a (possibly empty) list of global-interaction elements. -The denotation of an interaction sequence s, D(s), is defined as:

  1. - if s is the empty sequence, then D(s) = {є};
  2. otherwise, s is a global interaction i followed by a (possibly empty) interaction sequence s. Then the •-denotation of s is the -permutation-closure of the trace set given by recursively concatenating -to traces in the •-denotation of i, -the traces in the •-denotation of -s. Formally:
    D(s) -= Π({t · t’ | t ∈ -D(i), t’D(s)}) -

-

5.2.3  Point-to-Point Message Transfer

Recall the syntax of the point-to-point message transfer, which belongs to the global-interaction syntactic category:

- - -
- -
message::=message-signature | identifier ]  from role-name -  to role-name ;
- -
-
-

The denotation of a message transfer

MsgSig from Sender to Receiver ;

is defined as the trace set:

{[Sender!Receiver:MsgSig, -Sender>Receiver:MsgSig, -Receiver?Sender:MsgSig]}. -

Formally:

D(M from R to R’) -= - {[R!R’:M, -R>R’:M, -R’?R:M]} -

Note that the denotation is permutation-closed by definition.


-

5.2.4  Choice

Recall the syntax of the choice construct, which belongs to the -global-interaction syntactic category:

- - -
-
choice::=choice at role-name -  global-interaction-block  ( or -  global-interaction-block  )*
-
- -
-
-

The •-denotation of a choice

choice at -R b1 or -… or bn -

is defined as union of the -•-denotations of the global interaction blocks bi for 1 ≤ in. Formally:

D(choice at R b1 oror - bn) = - ∪i = 1..n D(bi) -

Note that the permutation-closure of each D(bi) implies the permutation-closure of the denotation of the choice. -


-

5.2.5  Parallel

Recall the syntax of the parallel construct, which belongs to the -global-interaction syntactic category:

- - -
-
parallel::= par global-interaction-block  ( and - global-interaction-block  )*
-
- -
-
-

The •-denotation of a parallel

par -b1 and … -and bn -

is defined as the -shuffling of the •-denotations of -the global interaction blocks bi for all 1 ≤ in. Formally:

D(par b1 and … - and bn) = - D(b1) ww D(bn) -

Note that, by the definition of shuffling, the permutation-closure of each D(bi) implies the permutation-closure of the denotation of the parallel. -


-

5.2.6  Recursion

Recall the syntax of the recursion and continuation constructs, which -belong to the global-interaction syntactic category:

- - -
- -
          recursion::=rec identifier global-interaction-block
continue::=continue identifier ;
-
- -
-
-

The •-denotation of a recursion

rec X -b -

comprises the traces in the -•-denotation of the block b, along with the traces in the X-denotation of b (i.e. the traces that flow through a continue specifying X) concatenated, -recursively, with traces in the •-denotation of the recursion.

Formally, the •-denotation of a recursion is defined as the permutation-closure of the least fixed point of the generator function F•, X, i.e.

D(rec X b) = Π(fix F•, X) -

where F is the following function over permutation-closed trace sets:

F•, X = TD(b) ∪ -Π({t’ · t | tT, t’ -∈ DX(b)}) -

The •-denotation of a continue is defined, for some identifier label X, as:

- -
D(continue X ;)= {є}  if • is X;
D(continue X ;)=  otherwise.
-

-

5.2.7  Interruptible

The pre-denotation of a global interaction block b, written Dpre(b), where b contains the global interaction sequence s, is -given by:

  1. - if s is the empty sequence, then Dpre(s) = {є};
  2. otherwise D(i, s - ) = Π({t · -t’ | tD(i), t’ ∈ -D(s)}) ∪ D(i). -

Note that Dpre(b) is the same as D(b) - except for interactions sequences, in which case the pre-denotation -additionally includes the denotations of the sub-sequences that are -syntactic prefixes of s.

Recall the syntax of the interruptible construct, which -belongs to the global-interaction syntactic category:

- - -
- -
        interruptible - ::=interruptible global-interaction-block - with { ( interrupt )+ }
interrupt - ::= message-signature ( , message-signature )* by - role-name ( , role-name )* ;
-
- -
-
-

- -Assume that the roles that occur in the global-interaction-block of the interruptible are -R1,…,Rm. The denotation is •-denotation of the interruptible is given by:

D(interruptible b by r1 with I1,…, -rn with In) = -{t=Π(t1 · Int(ri,Ii))| -t1·t1Dpre(b) ∧ -Correct(t) ∧ i ∈ {1,…,n}}

with (supposing ri = Rj ) Int(ri,Ii) defined as:

ri!R1:Ii, ri>R1:Ii, -R1?ri:Ii,…,ri!Rj-1:Ii, -ri>Rj-1:Ii, -Rj-1?ri:Ii,ri!Rj+1:Ii, -ri>Rj+1:Ii, -Rj+1?ri:Ii,…, -ri!Rm:Ii, ri>Rm:Ii, -Rm?ri:Ii

and Correct(t) defined as the following predicate:


-

5.2.8  Do

Recall the syntax of the do construct, which -belongs to the global-interaction syntactic category:

- - -
- -
        do::=do identifier [ < argument-list > ] ( - role-instantiation-list - ) ;
role-instantiation-list::=role-name as role-name ( , role-name as role-name )*
-
- -
-
-

The •-denotation of a do

do p < op1(Arg1) , , opn(Argn) > ( R1 as R1, , Rn as Rn ) ; -

where p is the name of the target protocol, is the -•-denotation of p with the roles R1′, …, Rn′ in p substituted for R1, …, Rn and the parameters -identifier1, …identifiern -in p substituted for op1(Arg1), …, opn(Argn).


-

5.2.9  Spawn

We use the refined semantics by annotating the denotation with the -session-id:

Ds(b) = -{s:e1, …, s:en | -e1,…,enD(b)}

We recall the syntax for spawn:

- - -
-
spawn::=role-name spawns identifier < [ argument-list ] > ( role-instantiation-list ) ;
-
- -
-
-

Supposing Prot is defined with global protocol Prot < -arg > (role r1role rn) : -

Ds(R calls  Prot < par > -(r1 as ri1,…,rm as rim) -)= { -Π(Invit(R,{(r1,ri1),…,(rm,rim)},kt)| t ∈ -Dk(Prot){par/arg}{r1/ri1}…{rm/rim}, k fresh -}

with Invit(R,{(r1,ri1),…,(rm,rim)},k) -defined as (supposing R = rj): -

R!r1:k, -R>r1:k, -r1?R:Ii,…,R!rj-1:k, -R>rj-1:k, -rj-1?R:k,R!rj+1:k, -R>rj+1:k, -rj+1?R:k,…, -R!rm:k, R>rm:k, -rm?R:k

-

5.3  Local Interaction Semantics

– similar setup to global traces


-

5.4  Global-to-Local Protocol Projection

– trace filtering

- - - -
This document was translated from LATEX by -HEVEA.
- - \ No newline at end of file diff --git a/docs/langref_files/ConversationCommunicationmodel.png b/docs/langref_files/ConversationCommunicationmodel.png deleted file mode 100644 index abf4004..0000000 Binary files a/docs/langref_files/ConversationCommunicationmodel.png and /dev/null differ diff --git a/docs/overview/getting-started.html b/docs/overview/getting-started.html new file mode 100644 index 0000000..0d2164c --- /dev/null +++ b/docs/overview/getting-started.html @@ -0,0 +1,215 @@ + + + + + Scribble - Getting Started + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + +
+
+

Getting Started

+

How to get started with Scribble

+
+
+ + + +
+
+
+

Getting Started with Scribble.

+
+
+
+
module example;
+
+type <xsd> "{http://www.acme.com/types}Greetings" from "http://www.acme.com/types/Greetings.xsd" as Greetings;
+type <xsd> "{http://www.acme.com/types}Compliments" from "http://www.acme.com/types/Compliments.xsd" as Compliments;
+type <xsd> "{http://www.acme.com/types}Salutations" from "http://www.acme.com/types/Salutations.xsd" as Salutations;
+
+global protocol HelloWorld(role Me, role World) {
+	hello(Greetings) from Me to World;
+	choice at World {
+		goodMorning(Compliments) from World to Me;
+	} or {
+		goodAfternoon(Salutations) from World to Me;
+	}
+}
+
+
+
+

A very simply example, but this illustrates the basic syntax for a hello world interaction, where a party performing the role Me sends a message of type Greetings to another party performing the role 'World', who subsequently makes a decision which determines which path of the choice will be followed, resulting in a goodMorning or goodAfternoon message being exchanged.

+
+
+

Working on Scribble source

+
+

If you are interested in building Scribble from source, then check out +Development resources

+
+
+
+
+
+
+ +
+ + +
+
+

© Scribble.org, 2009-2015 | Baked with JBake v2.3.2

+

+ + Fork me on GitHub + +

+
+
+ + + + + + + + + + + + + diff --git a/docs/scribble-java.html b/docs/scribble-java.html new file mode 100644 index 0000000..1eba5c5 --- /dev/null +++ b/docs/scribble-java.html @@ -0,0 +1,3816 @@ + + + + + + + Scribble-Java tutorial + + + + + + + + + + + + +

+ Scribble-Java tutorial +

+ + + +

+ This is a tutorial for using the Scribble-Java toolchain (for Scribble version 0.4). +

+ + + + +

+ + +

+ Contents: + +
+ +

    +
  1. + About this tutorial +
  2. + +
    + +
  3. + Quick Start: the Adder application protocol +
      +
    1. + Protocol overview +
    2. +
    3. + Scribble global protocol + +
    4. +
    5. + An Adder client + +
    6. +
    7. + An Adder server + +
    8. +
    +
  4. + +
    + +
  5. + Scribble modules and global protocols +
      +
    1. + Scribble modules +
    2. +
    3. + Message signatures +
    4. +
    5. + Global protocol declarations +
    6. +
    7. + The message interaction statement +
    8. +
    9. + The choice statement +
    10. + +
    11. + The do statement + +
    12. +
    +
  6. + +
    + +
  7. + Further global protocol features +
      +
    1. + Message signature name declarations +
    2. +
    3. + The connection interaction statement +
    4. + +
    +
  8. + +
    + +
  9. + Scribble protocol validation +
      +
    1. + Valid global protocols and well-formed modules +
    2. +
    3. + Characteristics of Endpoint FSMs +
    4. +
    5. + Safety and liveness of Scribble global protocols +
    6. +
    +
  10. + +
    + +
  11. + Endpoint API generation +
      +
    1. + Endpoint API overview +
    2. +
    3. + Names as singleton types +
    4. +
    5. + State Channel API +
    6. +
    7. + Output state API +
    8. +
    9. + Receive state API +
    10. +
    11. + Accept state API +
    12. +
    13. + Disconnect state API +
    14. +
    15. + Linear usage of state channel instances +
    16. +
    +
  12. + +
    + +
  13. + Endpoint implementation using Scribble-generated APIs +
      +
    1. + Connection establishment for non-explicit global protocols +
    2. +
    3. + Usage contract of Endpoint APIs and endpoint implementation safety +
    4. +
    +
  14. + +
    + +
  15. + Building/installing Scribble-Java +
  16. + +
    + +
  17. + Running the Scribble-Java command line tool +
  18. +
+

+ + +

+ + +

+ About this tutorial +

+ +

+ Scribble-Java is a toolchain for programming distributed applications in Java based on the theory of multiparty session types. +

+ +

+ The main input and output of the toolchain are: + +

+

+ + + +

+ Useful links and resources +

+ +

+

+

+ +

+ Tutorial version history +

+ + + + +

+ Upcoming in future tutorial versions +

+ +

+

+

+ + +

+ Upcoming in future Scribble versions +

+ +

+

+

+ + +

+ < + top; + next + > +

+ + +

+ + +

+ + Quick Start: the Adder application protocol + +

+ +

+ This quick start will run through the specification of a simple +application protocol in Scribble, to Java implementations of client and +server endpoints using the Scribble-generated APIs. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Protocol overview

+ +

+ We illustrate a client-server protocol for a network service that adds two numbers. +

+ +

+ An outline of the protocol: + +

+

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Scribble global protocol

+ +

+ Below we give a Scribble specification of the Adder application protocol. +

+ +

+ This code is available from the Scribble GitHub repository: + +

+

+ + + + + +
+ Adder.scr +

+ Lst. 2.1: Scribble specification of the Adder application protocol. +
   +
  1. module tutorial.adder.Adder;
  2.  
  3. type <java> "java.lang.Integer" from "rt.jar" as Int;
  4.  
  5. global protocol Adder(role C, role S) {
  6. choice at C {
  7. Add(Int, Int) from C to S;
  8. Res(Int) from S to C;
  9. do Adder(C, S);
  10. } or {
  11. Bye() from C to S;
  12. }
  13. }
+
+ +

+ We use the above example to give a brief overiew of Scribble syntax. The links give further details of each element. + +

+

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Running the Scribble-Java command line tool

+ +

+ The command given below assumes: + +

+

+ +

+ In a Linux, Cygwin/Windows, or Mac OS terminal, the command is: + +

    ./scribblec.sh scribble-demos/scrib/tutorial/src/tutorial/adder/Adder.scr -api Adder C -d scribble-demos/scrib/tutorial/src/
+
+

+ +

+ The above command performs the following tasks. + +

+

+ +

+ See here for more information on using the command line tool. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

An Adder client

+ +

+ We use the Endpoint API generated in the previous step to summarise the key elements behind Scribble Endpoint APIs. + +

+

+ +

+ We then give an example implementation using the above Endpoint API. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Endpoint FSM

+ +

+ Below is the endpoint finite state machine (FSM) for the C role in Adder. +

+ + + + + + +
+ Fig. 2.3.1: The FSM for C in Adder. +
+ +
+ +

+

+

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Endpoint API overview

+ +

+ So that they may be used as types in Java, Scribble generates the various role and operator names in the source protocol as singleton types. For the Adder protocol, Scribble generates the following singleton types as API constants: + +

+ + + + + + + + + +
+ Roles + + C, + S +
+ Operators   + + Add, + Res, + Bye +
+
+

+ +

+ The API generation renders each state in the Endpoint FSM as a Java class for a state-specific communication channel (which we call a state channel for short). + +

+

+ +

+ See here for an example Javadoc generated (by the standard javadoc tool) from the Scribble-generated API for C in Adder. +

+ +

+ The following summarises the key state channel classes and their I/O methods. +

+ +

+ Adder_C_1 (state 1 in the FSM). + +

+ + + + + + + + + + + + + + +
+ Type + + Method +
+ Adder_C_2   + + send(S role, Add op, Integer arg0, Integer arg1) +
+ EndSocket + + send(S role, Bye op) +
+ + +

+ +

+ Adder_C_2 (state 2 in the FSM). + +

+ + + + + + + + + + +
+ Type + + Method +
+ Adder_C_1   + + receive(S role, Res op, Buf<? super Integer> arg0) +
+ + +

+ +

+ EndSocket (state 3 in the FSM) has no I/O methods. +

+ +

+ We explain the Endpoint API for S later. It features the API generation for non-unary receive (i.e., branch) states, which is not demonstrated by the API for C. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Endpoint implementation

+ +

+ Usage contract of Scribble-generated Endpoint APIs +

+ +
+ Starting from an instance of the initial state channel, an endpoint implemention should proceed by calling one method on the current channel to obtain the next, up to the end of the protocol (if any). +
+ +

+ Below we give an example implementation of a C endpoint in an application of Adder. We use the Scribble-generated API following the above usage contract. This client uses the Adder service to calculate the n-th Fibonacci number. +

+ +

+ The full code is available from the Scribble GitHub repository: + +

+

+ + + + + +
+ AdderC.java +

+ Lst. 2.3.1: Java implementation of a C endpoint in Adder using the Scribble-generated API. +
   + +
  1. package tutorial.adder;
  2.  
  3. /* Imports omitted */
  4.  
  5. public class AdderC {
  6.  
  7. public static void main(String[] args) throws Exception {
  8. Adder adder = new Adder();
  9. try (MPSTEndpoint<Adder, C> client =
  10. new MPSTEndpoint<>(adder, C, new ObjectStreamFormatter())) {
  11. client.connect(S, SocketChannelEndpoint::new, "localhost", 8888);
  12. int n = 10;
  13. System.out.println(n + "th Fibonacci number: "
  14. + fibo(new Adder_C_1(client), n));
  15. }
  16. }
  17. private static int fibo(Adder_C_1 c1, int n) throws Exception {
  18. Buf<Integer> x = new Buf<>(0);
  19. Buf<Integer> y = new Buf<>(1);
  20. Buf<Integer> i = new Buf<>(1);
  21. while (i.val < n) {
  22. Adder_C_2 c2 = c1.send(S, Add, x.val, y.val);
  23. x.val = y.val;
  24. c1 = c2.receive(S, Res, y);
  25. c1 = add1(c1, i);
  26. }
  27. c1.send(S, Bye); // EndSocket
  28. return x.val;
  29. }
  30.  
  31. private static Adder_C_1 add1(Adder_C_1 c1, Buf<Integer> i) throws Exception {
  32. return c1.send(S, Add, i.val, 1).receive(S, Res, i);
  33. }
  34. }
+ +
+ +

+ We summarise the key elements in the above code. +

+ +

+ The main method contains a typical preamble for an implemention of a client endpoint using an Endpoint API. + +

+

+ +

+ The fibo method contains the main body of the protocol implementation using the Endpoint API explained earlier. It takes the initial state channel, Adder_C_1, and follows the protocol through to the terminal state channel, EndSocket, returned by c1.send(S, Bye). + +

+

+ +

+ < + prev; + top; + next + > +

+ + + + + + + + + + + + + + + + + + + + +
+ + +

An Adder server

+ +

Endpoint implementation

+ +

+ We give an example implementation of an S server for Adder. We highlight the features that are different or not shown in the example client implementation. +

+ +

+ The full code is available from the Scribble GitHub repository: + +

+

+ + + + + +
+ AdderS.java +

+ Lst. 2.3.2: Java implementation of a S endpoint in Adder using the Scribble-generated API. +
   + +
  1. package tutorial.adder;
  2.  
  3. /* Imports omitted */
  4.  
  5. public class AdderS {
  6.  
  7. public static void main(String[] args) throws Exception {
  8. try (ScribServerSocket ss = new SocketChannelServer(8888)) {
  9. while (true) {
  10. Adder adder = new Adder();
  11. try (MPSTEndpoint<Adder, S> server
  12. = new MPSTEndpoint<>(adder, S, new ObjectStreamFormatter())) {
  13. server.accept(ss, C);
  14. new AdderS().run(new Adder_S_1(server));
  15. } catch (ScribbleRuntimeException | IOException | ClassNotFoundException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. }
  20. }
  21.  
  22. private void run(Adder_S_1 s1) throws Exception {
  23. Buf<Integer> x = new Buf<>();
  24. Buf<Integer> y = new Buf<>();
  25. while (true) {
  26. Adder_S_1_Cases cases = s1.branch(C);
  27. switch (cases.op) {
  28. case Add: s1 = cases.receive(Add, x, y)
  29. .send(C, Res, x.val+y.val); break;
  30. case Bye: cases.receive(Bye); return;
  31. }
  32. }
  33. }
  34. }
+ +
+ + + + +

+ < + prev; + top; + next + > +

+ + + +

+ + +

+ Scribble modules and global protocols +

+ +

+ This section describes the syntax of Scribble modules and global protocols in more detail. It describes the syntactic constraints imposed by Scribble on global protocol definitions. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Scribble modules

+ +

+ A Scribble module is a file with the following elements, in order. +

+ + + +

+ The notion of well-formed module is discussed here. +

+ + +

+ < + prev; + top; + next + > +

+ + +
+ + +

+ Message signatures +

+ +

+ A message signature specifies the key elements of a message. +

+ +
    op ( pay1, ..., payn )
+
+ +

+

+

+ + +

+ < + prev; + top; + next + > +

+ + + +
+ + +

Global protocol declarations

+ +

+ A Scribble global protocol describes the interactions between the participants of a communication session from the global (i.e., neutral) perspective. A Scribble protocol abstracts session participants as named roles. Sessions are sometimes referred to as conversations. +

+ +

+ Scribble protocols are strictly explicit about session +interactions -- the only application-level messages to be communicated +in a Scribble session are those that are explicitly specified in the +protocol. +

+ +
    global protocol MyProto(role r1, ..., role rn) {
+        ...
+    }
+
+ +

+

+

+ + + + + + + + + + +

+ < + prev; + top; + next + > +

+ + + +
+ + +

The message interaction statement

+ + + +

+ A message interaction is a role-to-role pairing of a send action and a receive action of a message. +

+ +

+ The message may be specified as a message signature, i.e., an operator and a payload: +

+ +
		op(pay) from r1 to r2;
+
+ +

+ or as a message signature name: +

+ +
		Msg from r1 to r2;
+
+ +

+ In both cases, r1 is the sender role and r2 is the receiver role. + +

+

+ +

+ The communication model of Scribble is that message delivery is output-asynchronous, reliable, and ordered in each direction between each pair of roles. Output-asynchronous means the send action is non-blocking for the sender, but the receive action is blocking for the receiver (i.e., until the message arrives). This model caters for applications using, e.g., TCP channels, or (unbounded) FIFOs in shared memory. +

+ +

+ Send actions are considered output actions, and receive actions are considered input actions. +

+ + + + + +

+ < + prev; + top; + next + > +

+ + + +
+ + +

The choice statement

+ + + +

+ The choice statement designates a branch point in the protocol. The protocol proceeds according to one of the or-separated cases. +

+ +
    choice at r { ... } or ... or { ... }
+
+ +

+

+

+ +

+ A choice statement is subject to the following syntactic constraints. + +

+

+ + + + + + +

+ < + prev; + top; + next + > +

+ + + +
+ + + + + + +

The do statement

+ +

+ + The do statement instructs the specified roles to perform the interactions of the specified protocol inline with the current session. +

+ + + +
do MyProto(r1, ..., rn);
+
+ +

+

+

+ +

+ In other words, each role in the role argument list plays the corresponding role in the role declaration list of the target protocol declaration. +

+ + + + + + + + + + + + + + + + + + + + + + +

+ < + prev; + top; + next + > +

+ + + +
+ + +

+ Recursive protocols +

+ +

+ A do statement may be used to define (mutually) recursive protocols. +

+ +

+ In addition to the previously stated constraints on do statements, Scribble global protocol definitions must be tail recursive per role. This means: + +

+

+ + + + + + +

+ < + prev; + top; + next + > +

+ + +

+ + +

+ Further global protocol features +

+ + +
+ + +

Message signature name declarations

+ +

+ Message signature name declarations may occur alongside payload type declarations. + +

    sig <java> "javapackage.JavaClass" from "myjar.jar" as MyMessage;
+
+ + + +

+ In message interactions that specify message signature names, the message signature name itself is used to identify the message (cf. the operator in a message signature). +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

The connection interaction statement

+ +

+ A global protocol declaration may have the modifier explicit. +

+ +
    explicit global protocol MyProto(...) { ... }
+
+ +

+ The communication model of a non-explicit global protocol starts with all roles pairwise connected by binary channels. +

+ +

+ By contrast, the communication model of an explicit global protocol starts with all roles unconnected. A pair of roles are connected by: +

+ +
    connect r1 to r2;
+
+ +

+ A connection interaction is a role-to-role pairing of a connection request action and a connection accept action. Role r1 is the client role, and r2 is the server role. +

+ + + +

+ A connection interaction is a synchronous interaction between the client and server, i.e., + the first role to perform either connection action is blocked until the + other role performs the counterpart action. The connection interaction + establishes a bidirectional binary (i.e., two-party) channel with the characteristics of the Scribble communication model, i.e. message delivery is reliable and ordered in each direction. +

+ +

A pair of roles are disconnected by: + +

    disconnect r1 and r2;
+
+ +

+ Each of the two disconnect actions in the above pairing is a local action, i.e. + it does not directly pertain to any interaction between the two roles. + A disconnect action closes the input queue at the local endpoint of the + binary channel between these two roles. +

+ +

+ In the context of Scribble, request actions are considered output actions, and accept actions are considered input actions. +

+ +

+ An explicit global protocol is subject to the following syntactic constraints. +

+ + + +

+ This means there is at most one connection between any two roles. +

+ +

+ < + prev; + top; + next + > +

+ + + + + + + + + + +

+ + +

+ Scribble protocol validation +

+ +

+ This section describes the notion of whether a global protocol is valid in Scribble. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Valid global protocols and well-formed modules

+ +

+ Scribble validates that a global protocol satisfies a set of desirable properties. These include safety properties, such as no reception errors (a role never receives an unexpected message), and liveness properties, such as eventual reception (a sent message can always eventually be received). +

+ +

+ A Scribble global protocol is validated by two steps. + +

+

+ +

+ Specifically, the second step is conducted on a 1-bounded +model of the protocol. That is, the model given by the exhaustive +execution of the system of Endpoint FSMs where each communication +channel is limited to a maximum capacity of one message in each +direction. +

+ +

+

+

+ +

+ The Scribble validation of global protocols is sound. This means a valid protocol satisfies the safety and liveness properties in the general setting, i.e., the system of Endpoint FSMs with unbounded channels. Soundness is due to the characteristics of the protocol (i.e., the restrictions on endpoint behaviours) imposed by syntactic well-formedness. +

+ +

Well-formed modules

+ +

+ A module is well-formed if every global protocol in the module is valid. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Characteristics of Endpoint FSMs

+ +

+ The Endpoint FSM for any role of a syntactically well-formed Scribble global protocol has the following characteristics. +

+ +

+

+

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Safety and liveness of Scribble global protocols

+ +

+ We first introduce some terminology. + +

+

+ +

+ A valid Scribble global protocol satisfies the following safety properties. + +

+

+ +

+ A valid Scribble global protocol satisfies the following liveness properties. + +

+

+ + +

Fairness of output choice implementations

+ +

+ Scribble supports an option to consider unfair endpoint implementations of the choice between actions at output states. Here, "unfair" means that the implementation of the choice may never perform a particular action, even if the choice may be repeated infinitely often (i.e., in a recursive protocol). +

+ +

+ For this option, Scribble adopts a "worst case" view where endpoint implementations exercise a minimal number of output choice options during session execution. This is affected by a model transformation that commits a role to perform again the same action whenever an output state is revisited. +

+ +

+ See here for the instructions on enabling or disabling this option in the command line tool. +

+ +

+ < + prev; + top; + next + > +

+ + +

+ + +

+ Endpoint API generation +

+ +

+ This section describes the generation of protocol-specific Java Endpoint APIs by Scribble in more detail. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Endpoint API overview

+ +

+ An Endpoint API for a role in a global protocol has two parts. +

+ + + +

+ For a global protocol, e.g. Adder, in the Scribble module tutorial.adder.Adder, Scribble generates the Session Class as follows. +

+ + + +

+ An Endpoint API uses classes from the base Scribble API, which will be referred to in the following sections. +

+ + + +

+ < + prev; + top; + next + > +

+ + +
+ + +

Names as singleton types

+ +

+ A global protocol may feature several kinds of names: roles, message operators and message signature names. +

+ +

+ Scribble generates a Java singleton type for each of these names. The following illustrates the code generated for the C role in Adder. +

+ +
    package tutorial.adder.Adder.Adder.roles;
+
+    public final class C extends org.scribble.sesstype.name.Role {
+        private static final long serialVersionUID = -6429099329627603991L;
+        public static final C C = new C();
+        private C() {
+            super("C");
+        }
+    }
+
+ +

+

+

+ +

+ The generation for message operators and message signature names is similar. +

+ +

+ For convenience, the Session Class is also generated with field constants referring to the singleton type instances. E.g., the Adder Session Class has the following fields: +

+ +
    public static final C C = tutorial.adder.Adder.Adder.roles.C.C;
+    public static final S S = tutorial.adder.Adder.Adder.roles.S.S;
+    public static final Add Add = tutorial.adder.Adder.Adder.ops.Add.Add;
+    public static final Bye Bye = tutorial.adder.Adder.Adder.ops.Bye.Bye;
+    public static final Res Res = tutorial.adder.Adder.Adder.ops.Res.Res;
+
+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

State Channel API

+ +

+ The generation of a State Channel API for a role in a global protocol is based on the Endpoint FSM of that role. +

+ +

+ Assume a valid global protocol G in a well-formed module mypack.MyMod. Let s be a state in the Endpoint FSM of G for role r. +

+ +
+

+ If s is a terminal state in the Endpoint FSM, the Scribble generates: +

+ + +
+ +

+ N.B. Henceforth, references to a class G_r_s where s is a terminal state should be considered as EndSocket. +

+ +
+

+ Otherwise (i.e., if s is not a terminal state): +

+ + +
+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Output state API

+ +

+ Let: +

+ + + +

+ For each send action ai to receiver role r_i for message m: +

+ + + +

+ The send methods are generated to return without blocking. +

+ +

+ For each connect action ai to receiver role r_i, Scribble generates an instance method in class G_r_s: +

+ +
    public G_r_si connect(ri role, Callable<? extends BinaryChannelEndpoint> cons, String host, int port)
+            throws ScribbleRuntimeException, IOException
+
+ + + +

+ The connect method is generated to block until the connection is established or an exception is thrown. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Receive state APIs

+ +

+ Let: +

+ + + +
+

+ If s is a unary receive state, i.e., n = 1, and a1 specifies message m, then: +

+ + + +

+ The receive methods are generated to block until a message is received. +

+
+ +
+ +
+

+ Otherwise, i.e., n > 1, Scribble generates: +

+ + + +

+ The branch method is generated to block until a message is received. +

+ +

+ For each (receive) action ai from sender r' for message mi: +

+ + +
+ +

+ org.scribble.net.Buf<T> is a utility class in the Scribble API. +

+ + + +

+ The receive methods in both of the above cases are generated to write the each of the received payload values or message object to the val field of the corresponding Buf argument before returning. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Accept state API

+ +

+ Let: +

+ + + +

+ Scribble generates an instance method in class G_r_s: +

+ +
    public G_r_s1 accept(ri role, ScribServerSocket ss) throws ScribbleRuntimeException, IOException
+
+ + + +

+ The accept method is generated to block until the connection is established or an exception is thrown. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Disconnect state API

+ +

+ If s is a disconnect state in the Endpoint FSM of G for role r: +

+ + + +

+ < + prev; + top; + next + > +

+ + +
+ + +

Linear usage of state channel instances

+ +

+ Scribble enforces a linear usage discipline on state channel +instances, by generating run-time checks into the Endpoint API. This +means an endpoint implementation should invoke one I/O method on every instance of a state channel, apart from EndSocket. The following situations throw a ScribbleRuntimeException. +

+ + + +

+ < + prev; + top; + next + > +

+ + +

+ + +

+ Endpoint implementation using Scribble-generated APIs +

+ +

+ This section describes additional details of endpoint implementation +using Scribble-generated APIs and the associated safety properties. +

+ +

+ < + prev; + top; + next + > +

+ + +
+ + +

Connection establishment for non-explicit global protocols

+ +Endpoint implementation using an Endpoint API generated from a non-explicit global protocol relies on a connection establishment phase between creating the MPSTEndpoint and the initial state channel. + + +

Client-side connection requests

+ +

+ The following is from the example implementation of a C client in Adder. +

+ +
    Adder adder = new Adder();
+    try (MPSTEndpoint<Adder, C> client =
+                new MPSTEndpoint<>(adder, C, new ObjectStreamFormatter())) {
+        client.connect(S, SocketChannelEndpoint::new, "localhost", 8888);
+        /* Body of endpoint implementation, starting from new Adder_C_1(client)*/
+    }
+
+ +

+ Client-side connection requests are peformed by the connect method of MPSTEndpoint. +

+ +
    client.connect(S, SocketChannelEndpoint::new, "localhost", 8888);
+
+ +

+ The above method has the same signature as the State Channel API connect method generated for explicit connect actions. +

+ + + + +

Server-side connection accepts

+ +

+ The following is from the example implementation of a S server in Adder. +

+ +
    try (ScribServerSocket ss = new SocketChannelServer(8888)) {
+        while (true) {
+            Adder adder = new Adder();
+            try (MPSTEndpoint<Adder, S> server
+                    = new MPSTEndpoint<>(adder, S, new ObjectStreamFormatter())) {
+                server.accept(ss, C);
+                new AdderS().run(new Adder_S_1(server));
+            } catch (ScribbleRuntimeException | IOException | ClassNotFoundException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+ +

+ Server-side connections are accepted via an instance of org.scrible.net.scribsock.ScribServerSocket. +

+ +
    try (ScribServerSocket ss = new SocketChannelServer(8888)) { ... }
+
+ + + +

+ A connection is accepted by the accept method of MPSTEndpoint. +

+ +
    server.accept(ss, C);
+
+ + + + +

Safety warning for non-explicit connection actions

+ +

+ The actions performed in a non-explicit connection phase are not verified in any way. This means it is up to the programmer to avoid errors such as the following. +

+ + + +

+ < + prev; + top; + next + > +

+ + +
+ + +

Usage contract of Endpoint APIs and endpoint implementation safety

+ +

+ The following is the API usage contract for endpoint implementations using Scribble-generated Endpoint APIs. +

+ +
+ Starting from an instance of the initial state channel, an endpoint implemention should proceed by calling one method on the current channel to obtain the next, up to the end of the protocol (if any). +
+ +

+ An Endpoint API is generated to throw a ScribbleRuntimeException at run-time if the above rule, i.e. linear usage of state channels, is violated. The I/O action of the offending method invocation will not be performed. +

+ +

+ Note that the only way that an endpoint implementation using an Endpoint API may attempt + to violate the protocol is by violating state channel linearity. This +confers the following form of safety for Scribble endpoint +implementations. +

+ + + +

+ < + prev; + top; + next + > +

+ + +

+ + +

+ Building/installing Scribble-Java +

+ +

+ The source code of the master version of Scribble-Java is available from GitHub. +

+ + + +

+ We give basic instructions for two ways of building the Scribble-Java tool from source. Both ways will create the file +

+ +
    dist/target/scribble-dist-0.4-SNAPSHOT.zip
+
+ +

+ under the root directory of the scribble-java project. +

+ + +
+

+ Building Scribble-Java using command line Maven +

+ +

+ These instructions have been tested on Ubuntu 16.04.2 using: +

+ + + +

+ From the root directory of the scribble-java project: +

+ + +
+ +
+ +
+

+ Building Scribble-Java using Eclipse +

+ +

+ These instructions have been tested for: +

+ + + +

+ N.B. Eclipse must be configured to use a JDK 8 (Preferences → Java → Installed JREs). +

+ +

+ Steps: +

+ + +
+ + +

Installing the Scribble-Java command line tool

+ +

+ The scribble-dist-0.4-SNAPSHOT.zip built by the above instructions contains: +

+ + + +

+ The script is immediately executable after extracting the zip contents. +

+ +

+ Alternatively, the script is executable from the scribble-java root directory, without lib, by: +

+ + + +

+ < + prev; + top; + next + > +

+ + +

+ + +

+ Running the Scribble-Java command line tool +

+ +

+ Assuming the scribblec.sh script is installed at the current directory, various command line options are shown by: +

+ +
    ./scribblec.sh --help
+
+ +

+ The following summarises a few options mentioned in this tutorial: +

+ + + + + + + + + + +
+ -ip import_path     + + Sets the import path for module imports. +
+ -fair + + Disables the model transformation and checking for "unfair" endpoint implementations. +
+ + +

+ A command for validating the example Adder protocol and generating the API for the C role was given here. +

+ +

+ Further examples of using the scribblec.sh script can be found in this README. +

+ +

+ < + prev; + top; + > +

+ + +

+ + + + + + diff --git a/docs/scribble-scala.html b/docs/scribble-scala.html new file mode 100644 index 0000000..a74184b --- /dev/null +++ b/docs/scribble-scala.html @@ -0,0 +1,1708 @@ + + + + + + Scribble-Scala: Tutorial and Demo Artifact + + + + + + + +

+ + Scribble-Scala: Tutorial and Demo Artifact +

+ +

+ Alceste Scalas, + Ornela Dardha, + Raymond Hu, + Nobuko Yoshida +

+ +

Table of Contents

+ + + + +

Overview

+ +

+ + This is a tutorial and demo of the Scribble-Scala tool for specifying and validating multiparty protocols, and Scala API generation for endpoint implementation. +

+ +

+ This tutorial is accompanied by a demo artifact, published along with a paper on this work to appear in the proceedings of ECOOP '17. These are available online at the following: +

+ + + + + +

+ The artifact contains a VirtualBox image for a ready-to-use, streamlined Ubuntu 16.04.2 + operating system + (thanks to OSBoxes.org), + plus an installation of Scribble + and lchannels (see above) with their + dependencies. +

+ +

+ See here for instructions on how to build Scribble-Scala from source. +

+ +

+ In a nutshell, the interplay between Scribble + and lchannels is the following: +

+ +
    +
  1. + the Scribble tool can read a global protocol + specification, describing the interactions between + several roles (see Figure 9 in the paper), and + validate it against various communication errors; +
  2. +
  3. + then, for each role r in the protocol, our Scala + extension to Scribble can generate a set of Scala class definitions, + dubbed multiparty session classes: their API + consists of typed send()/receive() + methods, and guides the type-safe implementation of programs + playing role r; +
  4. +
  5. + internally, the multiparty session classes perform their + communications through typed binary channels, using + the lchannels library. The theory that allows + Scribble-Scala to decompose the source multiparty + protocols into typed binary channels is developed in the paper + (from §2 to §6). +
  6. +
+ +

+ This tutorial presents several Scribble global protocols, + and their Scala implementations. The Scala endpoint programs + use the multiparty session classes generated by Scribble. +

+ +

Quick Start (Kick-the-Tires)

+ +

+ In this section we provide basic instructions + to setup the VirtualBox image, and try out the + demos. +

+ +

Setting Up and Running the VirtualBox Image

+ +

+ The following instructions have been tested + using VirtualBox + version 4.3.36 (on Ubuntu 14.04) and version 5.1.18 (on Windows + 10 and Mac OS X). + Start VirtualBox, and: +

+ + + +

+ You can now start the newly-added VM, by selecting it and + clicking "Start". To log in, use the + following credentials: +

+ + + +

Trying Out the Demos

+ +

+ After logging in, double-click on the "ECOOP'17 artifact + demo" icon on the desktop, and follow the instructions. +

+ +

+ Each demo will: +

+
    +
  1. + show its Scribble global protocol specification; +
  2. +
  3. + run Scribble, and show its output: i.e., the Scala multiparty + session classes corresponding to the global protocol; +
  4. +
  5. + launch an example implementation based on the multiparty session + classes above (at this point, one or more terminals will pop up). +
  6. +
+ +

+ All demos should run without troubles. You might + occasionally see a log message similar to the following, which + is harmless: +

+ +
+[ERROR] [04/11/2017 17:09:16.721] [GreetingServerSys-akka.remote.default-remote-dispatcher-2] [akka.tcp://GreetingServerSys@127.0.0.1:31337/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2FGreetingClientSys%40127.0.0.1%3A31338-0/endpointWriter] AssociationError [akka.tcp://GreetingServerSys@127.0.0.1:31337] <- [akka.tcp://GreetingClientSys@127.0.0.1:31338]: Error [Shut down address: akka.tcp://GreetingClientSys@127.0.0.1:31338] [
+akka.remote.ShutDownAssociation: Shut down address: akka.tcp://GreetingClientSys@127.0.0.1:31338
+Caused by: akka.remote.transport.Transport$InvalidAssociationException: The remote system terminated the association because it is shutting down.
+ +

+ If you do not encounter other issues, then the artifact should + be working, and ready for further evaluation. +

+ +

Contents of the VirtualBox Image

+ + These are the main contents of the VirtualBox image, and their locations: + + + +

How to run Scribble (command line)

+ +

+ The Scribble tool can be used to check the well-formedness of + MPST protocols. In this artifact, we present an extended + version that also allows to generate the Scala APIs for + implementing the protocol endpoints. +

+ +

+ Once logged in the VM, you can: +

+ + + +

+ A concrete example: +

+ +
+./scribblec-linmp.sh modules/linmp-scala/src/test/scrib/Greeting.scr Proto
+
+ +

+ For an explanation of Scribble syntax and the tool output, see + the Greeting protocol tutorial. +

+ +

Scribble Tutorial: Greeting Protocol

+ +

+ We now give an overview of Scribble + syntax and the Scribble-Scala tool + output, using the "Greeting protocol" example originally + described + in this + ECOOP'16 paper. +

+ +

Specifying an MPST Protocol in Scribble

+ +

+ Scribble provides a user-friendly, Java-inspired notation for + defining structured "global protocols" among multiple + participants. Such global protocols correspond to global types + in MPST theory (cf. section "Global Types" in the paper, page 10). +

+ +

+ The Scribble specification of the Greeting protocol is available + in: /home/osboxes/scribble/modules/linmp-scala/src/test/scrib/Greeting.scr + (and also + here): +

+ +
+module Greeting;
+
+type <java> "java.lang.String" from "rt.jar" as String;
+
+global protocol Proto(role c, role s) {
+    choice at c {
+        Greet(String) from c to s;
+  choice at s {
+            Hello(String) from s to c;
+      do Proto(c, s);
+        } or {
+            Bye(String) from s to c;
+        }
+    } or {
+        Quit() from c to s;
+    }
+}
+ +

+ The above defines a simple protocol between two + participants, or roles: c (client) + and s (server). The protocol can be + read as follows: +

+ + + +

+ For reference, the formal notation for the corresponding global + type (see p.10, section "Global Types" in the paper) is: +

+
+μX.c⟶s{
+  Greet(String).s⟶c{ Hello(String).X, Bye(String).end },
+  Quit(Unit).end
+}
+ +

+ We now briefly explain the various elements appearing in the + above Scribble specification: +

+ + + +

+ NOTE: just like formal global types, this + version of Scribble supports action + prefixing: i.e., sequential composition of + role-to-role message passing actions followed by other message + actions, do statements + or choice statements. However, + sequential composition following a + do or + a choice is not permitted. +

+ +

Running the Scribble-Scala tool on the + Greeting protocol

+ +

+ Using the command line script: +

+ +
+cd ~/scribble
+./scribblec-linmp.sh modules/linmp-scala/src/test/scrib/Greeting.scr Proto
+ +

+ The output will be a set of Scala class definitions, similar to + the following: +

+ +
+// Global type (from modules/linmp-scala/src/test/scrib/Greeting.scr)
+//    μ(Greeting_Proto___c__s_).c->s{Greet(String).s->c{Hello(String).Greeting_Proto___c__s_, Bye(String).end}, Quit(Unit).end}
+
+// -----------------------------------------------------
+// Local type for role s:
+//    μ(Greeting_Proto___c__s_).c&{Greet(String).c⊕{Hello(String).Greeting_Proto___c__s_, Bye(String).end}, Quit(Unit).end}
+package test.proto.s
+
+import scala.concurrent.duration.Duration
+import lchannels._
+
+// Input message types for multiparty sessions
+sealed abstract class MsgMPGreetOrQuit
+case class Greet(p: String, cont: MPByeOrHello) extends MsgMPGreetOrQuit
+case class Quit(p: Unit) extends MsgMPGreetOrQuit
+
+// Output message types for multiparty sessions
+case class Hello(p: String)
+case class Bye(p: String)
+
+// Multiparty session classes
+case class MPGreetOrQuit(c: In[binary.GreetOrQuit]) {
+  def receive(implicit timeout: Duration = Duration.Inf) = {
+    c.receive(timeout) match {
+      case m @ binary.Greet(p) => {
+        Greet(p, MPByeOrHello(m.cont))
+      }
+      case m @ binary.Quit(p) => {
+        Quit(p)
+      }
+    }
+  }
+}
+case class MPByeOrHello(c: Out[binary.ByeOrHello]) {
+  def send(v: Bye) = {
+    val cnt = c ! binary.Bye(v.p)
+    ()
+  }
+  def send(v: Hello) = {
+    val cnt = c !! binary.Hello(v.p)_
+    MPGreetOrQuit(cnt)
+  }
+}
+
+// Classes representing messages (with continuations) in binary sessions
+package object binary {
+  sealed abstract class GreetOrQuit
+  case class Greet(p: String)(val cont: Out[ByeOrHello]) extends GreetOrQuit
+  case class Quit(p: Unit) extends GreetOrQuit
+
+  sealed abstract class ByeOrHello
+  case class Bye(p: String) extends ByeOrHello
+  case class Hello(p: String)(val cont: Out[GreetOrQuit]) extends ByeOrHello
+}
+// -----------------------------------------------------
+
+// -----------------------------------------------------
+// Local type for role c:
+//    μ(Greeting_Proto___c__s_).s⊕{Greet(String).s&{Hello(String).Greeting_Proto___c__s_, Bye(String).end}, Quit(Unit).end}
+package test.proto.c
+
+// ... [OMITTED]
+
+// -----------------------------------------------------
+ +

+ We now explain the elements of the above tool output, + and how the generated Scala APIs may be used to implement the + session endpoints. +

+ + + +

+ Note that an analogous set of classes (for input/output + messages, multiparty sessions, binary channels) is also + generated for the other roles of the global protocol. In this + example, the only other role is s + (for which we have omitted the resulting classes, in lines 59-63). +

+ +

Using the Scribble-Generated Multiparty Session Classes

+ +

+ Now, the classes in the binary + package could be used directly + with lchannels (as + described here) + to implement type-safe point-to-point interactions between each + pair of roles involved in a multiparty session. However, doing + so has two drawbacks: +

+ +
    +
  1. + a programmer would be (partly) exposed to the + continuation-passing-style + of lchannels, and +
  2. +
  3. + if a multiparty session has n participants, a + programmer implementing one of its participants would need to + handle up to n-1 point-to-point channels, without any + guidance on their usage order: this can introduce deadlocks + (see §7 of the paper). This is not a problem for the + greeting protocol (that only has two participants), but will + be relevant, e.g., for the Game + and ThreeBuyer examples later on. +
  4. +
+ +

+ These issues are addressed by the multiparty session + classes MPGreetOrQuit + and MPByeOrHello (seen above): they offer a + simplified interface where a programmer only uses the + input/output message classes Greet, + Quit, Bye + and Hello (seen above), without + visible continuations. The binary classes (and their + continuations) are handled + internally by MPGreetOrQuit + and MPByeOrHello, following the + formalisation in §5 of the paper. Moreover, if a session + involves more than two participants, the interface ensures that + the interactions will not result in a deadlock. +

+ +

+ Here is an implementation of the greeting protocol server, based + on the multiparty session classes above. +

+ +
+def server(c: MPGreetOrQuit)
+          (implicit timeout: Duration): Unit = {
+  c.receive match {
+    case Greet(whom, cont) => {
+      val c2 = cont.send(Hello(whom)) // Use "cont" to continue the session
+      server(c2) // The return value of .send above allows to keep interacting
+    }
+    case Quit(()) => {
+      () // The session is terminated
+    }
+  }
+}
+ +

+ The code should be pretty self-explanatory. Note that + all send calls are type-safe, and the + Scala compiler will warn if a .receive match { + ... } does not cover all possible input messages + (depending on the state of the session). Also note that the + multiparty session objects have the same runtime linearity + usage rules of the underlying linear channels: i.e., the + programmer is supposed to use each instance exactly + once to send/receive a message. If + .send()/.receive() + is called twice on the same + object, lchannels will throw a runtime + exception + (see the + ECOOP'16 paper for more details). +

+ +

+ One remaining question is: how does one produce an instance + of MPGreetOrQuit, to invoke + the server function above? Here is an + example: +

+ +
+// Create channel for local client/server interaction...
+val (in, out) = LocalChannel.factory[binary.GreetOrQuit]
+// ...and spawn server and client (note: we wrap channels in sesison objs)
+val sf = Future { server(MPGreetOrQuit(in)) }
+val cf = Future { client(...(out)) }
+ +

+ In other words, the caller creates a pair of linear channel + endpoints connecting the client to the server, uses one of them + to instantiate MPGreetOrQuit(in), and + passes it to the server function. + Note that the type of the parameter + of MPGreetOrQuit constrains the + carried type of the binary channel, that on line 2 must + be + binary.GreetOrQuit (or a subtype). +

+ +

+ The example above uses LocalChannels + for inter-thread communication, but a similar approach can be + used with socket-based + or Akka actor-based channels (both + provided by lchannels), thus + allowing server to interact with a + remote client (indeed, the server code + is independent from the message transport). +

+ +

Implementation

+ +

+ An implementation of the greeting protocol, based on the + Scribble-generated multiparty session classes, is available in + ScribbleGreeting.scala. + The file contains the autogenerated classes for both + roles s + and c, enclosed in different + namespaces to avoid clashes. +

+ +

+ The artifact demo script launches a + greeting server and client interacting remotely, using Akka + actor-based channels. The implementation, however, includes more + examples, with the the greeting client/server launched as + interacting threads, or the client talking through a socket with a + simple server written in Python. + If you want to try them, you can go to + the lchannels + installation directory and follow + the lchannels + documentation. +

+ +

+ + NOTE: + the ScribbleGreeting.scala + example is functionally equivalent to the + pre-existing Greeting.scala + example; the difference is that the latter interacts directly + via lchannels without using + Scribble-generated multiparty session classes. + +

+ +

HTTP (GET fragment)

+ +

+ This example implements fragment of the HTTP/1.1 protocol, + focused on the GET method. The purpose is to show that our + artifact is flexible enough to handle non-trivial "real-world" + protocols, and produce endpoint code that is interoperable with + existing (compliant) implementations of such protocols (in this + example, existing Web browsers). +

+ +

+ Similarly to the greeting protocol in + the tutorial above, HTTP is a + binary protocol --- i.e., a multiparty protocol with two roles + (client and server). Its Scribble specification is + available in /home/osboxes/scribble/modules/linmp-scala/src/test/scrib/Http.scr + (and also + here). + Its only new feature is a recursive protocol block, + that behaves as expected: +

+ +
+rec X {
+    choice at c {
+        Host(String) from c to s;
+        continue X;
+    } or {
+        UserAgent(String) from c to s;
+        continue X;
+    } or {
+        ...
+    } or {
+        RequestBody(Body) from c to s;
+        do Response(c, s);
+    }
+}
+ +

+ To generate the session classes from the Scribble HTTP specification, + you can run: +

+ +
+cd ~/scribble
+./scribblec-linmp.sh modules/linmp-scala/src/test/scrib/Http.scr Http
+ +

Implementation Details

+ +

+ The Scribble-generated classes have been integrated in the + HTTP server implementation. More in detail: +

+ + + +

Running the HTTP Server

+ +

+ To run the HTTP server, you can launch + the artifact demo script or follow + the lchannels + documentation. While the server is running, you can connect + to http://127.0.0.1:8080/ + with your browser. You can also "stress test" the implementation by + recursively downloading all the files being served: +

+ +
+cd /tmp
+wget -l 100 -r http://127.0.0.1:8080/
+ +

+ NOTE: wget might + report some transient read errors ("Connection reset by peer"), + because our HTTP server does not currently observe the client's + keep-alive requests. Still, the download will + proceed through a new connection. +

+ +

Example: Peer-to-Peer Game

+ +

+ This is the main running example in + the paper (first introduced in §1), + that concisely leverages all MPST features (session with more + than two roles, branching, selection, recursion, delegation, + inter-role dependencies, projection, merging). Its Scribble + specification (corresponding to Figure 9 in the paper) is + available + in /home/osboxes/scribble/modules/linmp-scala/src/test/scrib/Game.scr + (and also + here). +

+ +

+ Unlike the greeting protocol and + HTTP examples, the game protocol involves three + roles. Moreover, it features session delegation: +

+ +
+global protocol ClientA(role p, role q) {
+    PlayA(Game@a) from q to p;
+}
+
+global protocol ClientB(role p, role q) {
+    PlayB(Game@b) from q to p;
+}
+
+global protocol ClientC(role p, role q) {
+    PlayC(Game@c) from q to p;
+}
+
+global protocol Game(role a, role b, role c) {
+    ...
+}
+ +

+ Above, the message PlayA(Game@a) + carries as payload a multiparty session channel: it + allows the recipient to join an instance of the + the Game protocol, by playing the + role a. Here, + "@" is the projection + operator, and is one of our main additions to Scribble, + based on the theory of our paper. It means that the type of the + payload of PlayA(Game@a) is determined + by projecting Game onto + role a (cf. p.10 and §A.2 in the + paper; note that before being + projected, Game is first converted + into the formal syntax for global types). The same intuition + applies for messages PlayB(Game@b) + and PlayC(Game@c). As one might + expect, the projection of a Scribble global + protocol G onto a + role r is only allowed + if r appears + in G's declaration; e.g., in this + example, Game can only be projected + onto a, b + and c. +

+ +

Generating and Using the Session Classes

+ +

+ The Scribble specification above contains multiple global + protocols, and each one can be used to generate multiparty + protocol classes. Assume that we want to implement a Scala + program that talks to the game server, and then plays + role a: to do so, we can generate the + session classes for the global + protocol ClientA, and write our + program using those pertaining to role p + (recall that, from §1 of the + paper, p is the client that receives + the game delegation, while q is the + game server). +

+ +
+cd ~/scribble
+./scribblec-linmp.sh modules/linmp-scala/src/test/scrib/Game.scr ClientA
+ +

+ Similarly, to implement roles b + and c, we can specify respectively the + global protocls ClientB + and ClientC, and in both cases, + use the Scribble-generated classes for the client + role p to write our code. +

+ +

+ Instead, if we want to implement the server, we will + need all the Scribble-generated session classes + obtained + from ClientA, ClientB + and ClientC --- but this time, we will + need to write our code using those pertaining to the server + role q. The reason is intuitive: the + game server will need to interact with clients willing to play + any role in the game; therefore, the server must implement the + server-side of all the necessary protocols. +

+ +

Implementation Details

+ + + +

Running the Game Example

+ +

+ To run the game example, you can launch + the artifact demo script or follow + the lchannels + documentation. Note that the demo script will launch the + example using distributed Akka actor-based channels; + the lchannels documentation also + includes a version where the server and clients run as + local threads, using a non-distributed message transport. +

+ +

Example: Three-Buyer Protocol

+ +

+ This is a widely-used example in MPST literature, inspired by + a W3C Web Services + Choreography use case (C-UC-001 Travel Agent). We use the + version presented in the following paper: + + M. Coppo, M. Dezani-Ciancaglini, N. Yoshida, L. Padovani. + "Global Progress for Dynamically Interleaved Multiparty Sessions". + Mathematical Structures in Computer Science, 2016 + (DOI). +

+ +

+ Quoting from the paper: +

+ +
+

+ The overall scenario, involving a Seller + (s), Alice + (a), Bob + (b) and Carol + (c), proceeds as follows. +

+
    +
  1. + Alice sends a book title to Seller, then Seller sends back a + quote to Alice and Bob. Then Alice tells Bob how much she + can contribute. +
  2. +
  3. + If the price is within Bob’s budget, Bob notifies both + Seller and Alice he accepts, then sends his address, and + Seller sends back the delivery date. +
  4. +
  5. + If the price exceeds the budget, Bob asks Carol to + collaborate together by establishing a new session. Then Bob + sends how much Carol must pay, then delegates the remaining + interactions with Alice and Seller to Carol. +
  6. +
  7. + If the rest of the price is within Carol’s budget, Carol + accepts the quote and notifies Alice, Bob and Seller, and + continues the rest of the protocol with Seller and Alice + transparently, as if she were Bob. Otherwise she notifies + Alice, Bob and Seller to quit the protocol. +
  8. +
+
+ +

+ Similarly to the multiparty game, this example + includes a three-party session --- here, involving the Seller + and the two buyers Alice and Bob. Depending on Alice's choice, + a third buyer (Carol) could be transparently involved by Bob, + using session delegation. +

+ +

+ The Scribble specification of this example is available + in /home/osboxes/scribble/modules/linmp-scala/src/test/scrib/ThreeBuyer.scr + (and also + here): +

+ +
+global protocol PlayAlice(role alice, role seller) {
+    PlayAlice(TwoBuyer@alice) from seller to alice;
+}
+
+global protocol PlayBob(role bob, role seller) {
+    PlayBob(TwoBuyer@bob) from seller to bob;
+}
+
+global protocol TwoBuyer(role alice, role bob, role seller) {
+    Title(String) from alice to seller;
+    QuoteA(Int) from seller to alice;
+    QuoteB(Int) from seller to bob;
+    ShareA(Int) from alice to bob;
+    do TwoBuyerChoice(alice, bob, seller);
+}
+
+aux global protocol TwoBuyerChoice(role alice, role bob, role seller) {
+    choice at bob {
+        OkA() from bob to alice;
+        OkS() from bob to seller;
+        Address(String) from bob to seller;
+        Deliver(ZonedDateTime) from seller to bob;
+    } or {
+        QuitA() from bob to alice;
+        QuitS() from bob to seller;
+    }
+}
+
+
+global protocol Delegation(role carol, role bob) {
+    Contrib(Int) from bob to carol;  // Should be the Int on line 19
+    Delegate(TwoBuyerChoice@bob) from bob to carol;
+    choice at carol {
+        OkC() from carol to bob;
+    } or {
+        QuitC() from carol to bob;
+    }
+}
+ +

+ We model this example by letting the Seller behave similarly to + the server in the multiparty game. The Seller + will wait for Alice's and Bob's connections, and then it will + create a three-party session (based on + the TwoBuyer protocol, on line 9) + involving the Seller itself, Alice and Bob. For this purpose, + the Seller first establishes binary sessions with Alice and Bob + (based on the PlayAlice + and PlayBob protocols, on lines 1 and + 5); after they are connected, the Seller sends them + the PlayAlice + and PlayBob messages (lines 2 and 6), + using delegation to let them join the three-party session. +

+ +

+ The global protocol Delegation only + involves Carol and Bob, and is used by the former to let Carol + know how much she should contribute, and then pass her what is + left of Bob's duties in the TwoBuyer + session (specifically, Bob delegates + the TwoBuyerChoice part of the session). +

+ + +

Generating and Using the Session Classes

+ +

+ The Scribble specification above contains multiple global + protocols, and each one can be used to generate multiparty + protocol classes. Assume that we want to implement a Scala + program that talks to the Seller, and then plays + role Alice: to do so, we can generate the + session classes for the global + protocol PlayAlice, and write our + program using those pertaining to role alice. +

+ +
+cd ~/scribble
+./scribblec-linmp.sh modules/linmp-scala/src/test/scrib/ThreeBuyer.scr PlayAlice
+ +

+ Similarly, to implement role bob, we + can specify the global + protocls PlayBob, and use the + Scribble-generated classes for role + bob to write our code. Note, however, + that to fully implement Bob and his interaction with Carol, we + will also need bob's session classes + generated from the Delegation global + protocol. +

+ +

+ Instead, if we want to implement the Seller, we will + need all the Scribble-generated session classes + obtained from PlayAlice + and PlayBob, using those pertaining to + role seller. The reason is that + Seller will need to interact with both Alice and Bob, and must + therefore implement the "other side" of both their protocols. +

+ +

+ Finally, if we want to implement Carol, we need to specify the + global protocol Delegation, and then + use carol's session classes. +

+ +

Implementation Details

+ +

+ This implementation adopts several solutions already seen in + the game example. +

+ + + +

Running the ThreeBuyer Example

+ +

+ To run the game example, you can launch + the artifact demo script or follow + the lchannels + documentation. Note that the demo script will launch the + example using distributed Akka actor-based channels; + the lchannels documentation also + includes a version where the server and clients run as + local threads, using a non-distributed message transport. +

+ +

Notes on Scribble with Scala API Extension

+ +

Implementation

+ + + +

Known Limitations

+ + + + +

Building Scribble-Scala from Source

+ +

Prerequisites

+ + + +

Command Line Instructions

+ + + +

+ If all goes well, you will finally see a report like this: +

+ +
+    [INFO] ------------------------------------------------------------------------
+    [INFO] Reactor Summary:
+    [INFO]
+    [INFO] Scribble .......................................... SUCCESS [7.924s]
+    [INFO] Scribble::Modules::Core ........................... SUCCESS [3:29.963s]
+    [INFO] Scribble::Modules::Parser ......................... SUCCESS [7.706s]
+    [INFO] Scribble::Modules::CLI ............................ SUCCESS [55.630s]
+    [INFO] linmp-scala ....................................... SUCCESS [1.763s]
+    [INFO] Scribble::Distribution ............................ SUCCESS [2.364s]
+    [INFO] Scribble::Modules::Demos .......................... SUCCESS [0.145s]
+    [INFO] ------------------------------------------------------------------------
+    [INFO] BUILD SUCCESS
+    [INFO] ------------------------------------------------------------------------
+    [INFO] Total time: 4:45.961s
+    [INFO] Finished at: Thu Jun 22 22:32:21 BST 2017
+    [INFO] Final Memory: 30M/203M
+    [INFO] ------------------------------------------------------------------------
+    
+ +

+ Scribble-Scala is now ready to use via the scribblec-linmp.sh script in the project root directory, e.g., following the instructions here. +

+ + + diff --git a/docs/user/Scribble-Java-tutorial_files/fsm-Adder-C.png b/docs/user/Scribble-Java-tutorial_files/fsm-Adder-C.png new file mode 100644 index 0000000..26c670f Binary files /dev/null and b/docs/user/Scribble-Java-tutorial_files/fsm-Adder-C.png differ diff --git a/docs/user/Scribble-Java-tutorial_files/prettify-scribble.js b/docs/user/Scribble-Java-tutorial_files/prettify-scribble.js new file mode 100644 index 0000000..44ec706 --- /dev/null +++ b/docs/user/Scribble-Java-tutorial_files/prettify-scribble.js @@ -0,0 +1,1478 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + * + *

+ * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

+ * Usage:

    + *
  1. include this source file in an html page via + * {@code } + *
  2. define style rules. See the example page for examples. + *
  3. mark the {@code
    } and {@code } tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code } tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  // We use things that coerce to strings to make them compact when minified
    +  // and to defeat aggressive optimizers that fold large string constants.
    +  var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
    +  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," + 
    +      "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," +
    +      "static,struct,switch,typedef,union,unsigned,void,volatile"];
    +  var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
    +      "new,operator,private,protected,public,this,throw,true,try,typeof"];
    +  var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," +
    +      "concept,concept_map,const_cast,constexpr,decltype," +
    +      "dynamic_cast,explicit,export,friend,inline,late_check," +
    +      "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," +
    +      "template,typeid,typename,using,virtual,where"];
    +  var JAVA_KEYWORDS = [COMMON_KEYWORDS,
    +      "abstract,boolean,byte,extends,final,finally,implements,import," +
    +      "instanceof,null,native,package,strictfp,super,synchronized,throws," +
    +      "transient"];
    +  var CSHARP_KEYWORDS = [JAVA_KEYWORDS,
    +      "as,base,by,checked,decimal,delegate,descending,dynamic,event," +
    +      "fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock," +
    +      "object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed," +
    +      "stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];
    +  var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
    +      "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
    +      "true,try,unless,until,when,while,yes";
    +  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
    +      "debugger,eval,export,function,get,null,set,undefined,var,with," +
    +      "Infinity,NaN"];
    +  var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
    +      "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
    +      "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
    +  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
    +      "elif,except,exec,finally,from,global,import,in,is,lambda," +
    +      "nonlocal,not,or,pass,print,raise,try,with,yield" +
    +      "False,True,None"];
    +  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
    +      "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
    +      "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
    +      "BEGIN,END"];
    +  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
    +      "function,in,local,set,then,until"];
    +    var SCRIBBLE_KEYWORDS = "import,as,protocol,role,from,to,choice,rec,or,type,try,interrupt,at,continue,package,module,include,interruptible,by,with,sig,instantiates,spawns";
    +  var ALL_KEYWORDS = [
    +      CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS +
    +      PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS, SCRIBBLE_KEYWORDS];
    +  var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;
    +
    +  // token style names.  correspond to css classes
    +  /**
    +   * token style for a string literal
    +   * @const
    +   */
    +  var PR_STRING = 'str';
    +  /**
    +   * token style for a keyword
    +   * @const
    +   */
    +  var PR_KEYWORD = 'kwd';
    +  /**
    +   * token style for a comment
    +   * @const
    +   */
    +  var PR_COMMENT = 'com';
    +  /**
    +   * token style for a type
    +   * @const
    +   */
    +  var PR_TYPE = 'typ';
    +  /**
    +   * token style for a literal value.  e.g. 1, null, true.
    +   * @const
    +   */
    +  var PR_LITERAL = 'lit';
    +  /**
    +   * token style for a punctuation string.
    +   * @const
    +   */
    +  var PR_PUNCTUATION = 'pun';
    +  /**
    +   * token style for a punctuation string.
    +   * @const
    +   */
    +  var PR_PLAIN = 'pln';
    +
    +  /**
    +   * token style for an sgml tag.
    +   * @const
    +   */
    +  var PR_TAG = 'tag';
    +  /**
    +   * token style for a markup declaration such as a DOCTYPE.
    +   * @const
    +   */
    +  var PR_DECLARATION = 'dec';
    +  /**
    +   * token style for embedded source.
    +   * @const
    +   */
    +  var PR_SOURCE = 'src';
    +  /**
    +   * token style for an sgml attribute name.
    +   * @const
    +   */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /**
    +   * token style for an sgml attribute value.
    +   * @const
    +   */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   * @const
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +
    +
    +/**
    + * A set of tokens that can precede a regular expression literal in
    + * javascript
    + * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
    + * has the full list, but I've removed ones that might be problematic when
    + * seen in languages that don't support regular expression literals.
    + *
    + * <p>Specifically, I've removed any keywords that can't precede a regexp
    + * literal in a syntactically legal javascript program, and I've removed the
    + * "in" keyword since it's not a keyword in many languages, and might be used
    + * as a count of inches.
    + *
    + * <p>The link a above does not accurately describe EcmaScript rules since
    + * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    + * very well in practice.
    + *
    + * @private
    + * @const
    + */
    +var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
    +
    +// CAVEAT: this does not properly handle the case where a regular
    +// expression immediately follows another since a regular expression may
    +// have flags for case-sensitivity and the like.  Having regexp tokens
    +// adjacent is not valid in any language I'm aware of, so I'm punting.
    +// TODO: maybe style special characters inside a regexp as punctuation.
    +
    +
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union of the sets of strings matched by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +  
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +  
    +    var escapeCharToCodeUnit = {
    +      'b': 8,
    +      't': 9,
    +      'n': 0xa,
    +      'v': 0xb,
    +      'f': 0xc,
    +      'r': 0xd
    +    };
    +  
    +    function decodeEscape(charsetPart) {
    +      var cc0 = charsetPart.charCodeAt(0);
    +      if (cc0 !== 92 /* \\ */) {
    +        return cc0;
    +      }
    +      var c1 = charsetPart.charAt(1);
    +      cc0 = escapeCharToCodeUnit[c1];
    +      if (cc0) {
    +        return cc0;
    +      } else if ('0' <= c1 && c1 <= '7') {
    +        return parseInt(charsetPart.substring(1), 8);
    +      } else if (c1 === 'u' || c1 === 'x') {
    +        return parseInt(charsetPart.substring(2), 16);
    +      } else {
    +        return charsetPart.charCodeAt(1);
    +      }
    +    }
    +  
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +  
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        if (/\\[bdsw]/i.test(p)) {  // Don't muck with named groups.
    +          groups.push(p);
    +        } else {
    +          var start = decodeEscape(p);
    +          var end;
    +          if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +            end = decodeEscape(charsetParts[i + 2]);
    +            i += 2;
    +          } else {
    +            end = start;
    +          }
    +          ranges.push([start, end]);
    +          // If the range might intersect letters, then expand it.
    +          // This case handling is too simplistic.
    +          // It does not deal with non-latin case folding.
    +          // It works for latin source code identifiers though.
    +          if (!(end < 65 || start > 122)) {
    +            if (!(end < 65 || start > 90)) {
    +              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +            }
    +            if (!(end < 97 || start > 122)) {
    +              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +            }
    +          }
    +        }
    +      }
    +  
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +  
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +  
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +  
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +  
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +  
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +  
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +  
    +      // Expand letters to groups to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +  
    +      return parts.join('');
    +    }
    +  
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +  
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +
    +  /**
    +   * Split markup into a string of source code and an array mapping ranges in
    +   * that string to the text nodes in which they appear.
    +   *
    +   * <p>
    +   * The HTML DOM structure:</p>
    +   * <pre>
    +   * (Element   "p"
    +   *   (Element "b"
    +   *     (Text  "print "))       ; #1
    +   *   (Text    "'Hello '")      ; #2
    +   *   (Element "br")            ; #3
    +   *   (Text    "  + 'World';")) ; #4
    +   * </pre>
    +   * <p>
    +   * corresponds to the HTML
    +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
    +   *
    +   * <p>
    +   * It will produce the output:</p>
    +   * <pre>
    +   * {
    +   *   sourceCode: "print 'Hello '\n  + 'World';",
    +   *   //                 1         2
    +   *   //       012345678901234 5678901234567
    +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
    +   * }
    +   * </pre>
    +   * <p>
    +   * where #1 is a reference to the {@code "print "} text node above, and so
    +   * on for the other text nodes.
    +   * </p>
    +   *
    +   * <p>
    +   * The {@code} spans array is an array of pairs.  Even elements are the start
    +   * indices of substrings, and odd elements are the text nodes (or BR elements)
    +   * that contain the text for those substrings.
    +   * Substrings continue until the next index or the end of the source.
    +   * </p>
    +   *
    +   * @param {Node} node an HTML DOM subtree containing source-code.
    +   * @return {Object} source code and the text nodes in which they occur.
    +   */
    +  function extractSourceSpans(node) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +  
    +    var chunks = [];
    +    var length = 0;
    +    var spans = [];
    +    var k = 0;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { return; }
    +          for (var child = node.firstChild; child; child = child.nextSibling) {
    +            walk(child);
    +          }
    +          var nodeName = node.nodeName;
    +          if ('BR' === nodeName || 'LI' === nodeName) {
    +            chunks[k] = '\n';
    +            spans[k << 1] = length++;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          var text = node.nodeValue;
    +          if (text.length) {
    +            if (!isPreformatted) {
    +              text = text.replace(/[ \t\r\n]+/g, ' ');
    +            } else {
    +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
    +            }
    +            // TODO: handle tabs here?
    +            chunks[k] = text;
    +            spans[k << 1] = length;
    +            length += text.length;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +      }
    +    }
    +  
    +    walk(node);
    +  
    +    return {
    +      sourceCode: chunks.join('').replace(/\n$/, ''),
    +      spans: spans
    +    };
    +  }
    +
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      sourceCode: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  var notWs = /\S/;
    +
    +  /**
    +   * Given an element, if it contains only one child element and any text nodes
    +   * it contains contain only space characters, return the sole child element.
    +   * Otherwise returns undefined.
    +   * <p>
    +   * This is meant to return the CODE element in {@code <pre><code ...>} when
    +   * there is a single child element that contains all the non-space textual
    +   * content, but not to return anything where there are multiple child elements
    +   * as in {@code <pre><code>...</code><code>...</code></pre>} or when there
    +   * is textual content.
    +   */
    +  function childContentWrapper(element) {
    +    var wrapper = undefined;
    +    for (var c = element.firstChild; c; c = c.nextSibling) {
    +      var type = c.nodeType;
    +      wrapper = (type === 1)  // Element Node
    +          ? (wrapper ? element : c)
    +          : (type === 3)  // Text Node
    +          ? (notWs.test(c.nodeValue) ? element : wrapper)
    +          : wrapper;
    +    }
    +    return wrapper === element ? undefined : wrapper;
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +
    +    /**
    +     * Lexes job.sourceCode and produces an output array job.decorations of
    +     * style classes preceded by the position at which they start in
    +     * job.sourceCode in order.
    +     *
    +     * @param {Object} job an object like <pre>{
    +     *    sourceCode: {string} sourceText plain text,
    +     *    basePos: {int} position of job.sourceCode in the larger chunk of
    +     *        sourceCode.
    +     * }</pre>
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.sourceCode, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    var hc = options['hashComments'];
    +    if (hc) {
    +      if (options['cStyleComments']) {
    +        if (hc > 1) {  // multiline hash comments
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
    +        } else {
    +          // Stop C preprocessor declarations at an unclosed open comment
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +               null, '#']);
    +        }
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      /**
    +       * @const
    +       */
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var types = options['types'];
    +    if (types) {
    +      fallthroughStylePatterns.push([PR_TYPE, types]);
    +    }
    +
    +    var keywords = ("" + options['keywords']).replace(/^ | $/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/[\s,]+/g, '|') + ')\\b'),
    +           null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
    +        [PR_PLAIN,       /^\\[\s\S]?/, null],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /**
    +   * Given a DOM subtree, wraps it in a list, and puts each line into its own
    +   * list item.
    +   *
    +   * @param {Node} node modified in place.  Its content is pulled into an
    +   *     HTMLOListElement, and each line is moved into a separate list item.
    +   *     This requires cloning elements, so the input might not have unique
    +   *     IDs after numbering.
    +   */
    +  function numberLines(node, opt_startLineNum) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +    var lineBreak = /\r\n?|\n/;
    +  
    +    var document = node.ownerDocument;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    // If it's preformatted, then we need to split lines on line breaks
    +    // in addition to <BR>s.
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    var li = document.createElement('LI');
    +    while (node.firstChild) {
    +      li.appendChild(node.firstChild);
    +    }
    +    // An array of lines.  We split below, so this is initialized to one
    +    // un-split line.
    +    var listItems = [li];
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { break; }
    +          if ('BR' === node.nodeName) {
    +            breakAfter(node);
    +            // Discard the <BR> since it is now flush against a </LI>.
    +            if (node.parentNode) {
    +              node.parentNode.removeChild(node);
    +            }
    +          } else {
    +            for (var child = node.firstChild; child; child = child.nextSibling) {
    +              walk(child);
    +            }
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          if (isPreformatted) {
    +            var text = node.nodeValue;
    +            var match = text.match(lineBreak);
    +            if (match) {
    +              var firstLine = text.substring(0, match.index);
    +              node.nodeValue = firstLine;
    +              var tail = text.substring(match.index + match[0].length);
    +              if (tail) {
    +                var parent = node.parentNode;
    +                parent.insertBefore(
    +                    document.createTextNode(tail), node.nextSibling);
    +              }
    +              breakAfter(node);
    +              if (!firstLine) {
    +                // Don't leave blank text nodes in the DOM.
    +                node.parentNode.removeChild(node);
    +              }
    +            }
    +          }
    +          break;
    +      }
    +    }
    +  
    +    // Split a line after the given node.
    +    function breakAfter(lineEndNode) {
    +      // If there's nothing to the right, then we can skip ending the line
    +      // here, and move root-wards since splitting just before an end-tag
    +      // would require us to create a bunch of empty copies.
    +      while (!lineEndNode.nextSibling) {
    +        lineEndNode = lineEndNode.parentNode;
    +        if (!lineEndNode) { return; }
    +      }
    +  
    +      function breakLeftOf(limit, copy) {
    +        // Clone shallowly if this node needs to be on both sides of the break.
    +        var rightSide = copy ? limit.cloneNode(false) : limit;
    +        var parent = limit.parentNode;
    +        if (parent) {
    +          // We clone the parent chain.
    +          // This helps us resurrect important styling elements that cross lines.
    +          // E.g. in <i>Foo<br>Bar</i>
    +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
    +          var parentClone = breakLeftOf(parent, 1);
    +          // Move the clone and everything to the right of the original
    +          // onto the cloned parent.
    +          var next = limit.nextSibling;
    +          parentClone.appendChild(rightSide);
    +          for (var sibling = next; sibling; sibling = next) {
    +            next = sibling.nextSibling;
    +            parentClone.appendChild(sibling);
    +          }
    +        }
    +        return rightSide;
    +      }
    +  
    +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
    +  
    +      // Walk the parent chain until we reach an unattached LI.
    +      for (var parent;
    +           // Check nodeType since IE invents document fragments.
    +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
    +        copiedListItem = parent;
    +      }
    +      // Put it on the list of lines for later processing.
    +      listItems.push(copiedListItem);
    +    }
    +  
    +    // Split lines while there are lines left to split.
    +    for (var i = 0;  // Number of lines that have been split so far.
    +         i < listItems.length;  // length updated by breakAfter calls.
    +         ++i) {
    +      walk(listItems[i]);
    +    }
    +  
    +    // Make sure numeric indices show correctly.
    +    if (opt_startLineNum === (opt_startLineNum|0)) {
    +      listItems[0].setAttribute('value', opt_startLineNum);
    +    }
    +  
    +    var ol = document.createElement('OL');
    +    ol.className = 'linenums';
    +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
    +    for (var i = 0, n = listItems.length; i < n; ++i) {
    +      li = listItems[i];
    +      // Stick a class on the LIs so that stylesheets can
    +      // color odd/even rows, or any other row pattern that
    +      // is co-prime with 10.
    +      li.className = 'L' + ((i + offset) % 10);
    +      if (!li.firstChild) {
    +        li.appendChild(document.createTextNode('\xA0'));
    +      }
    +      ol.appendChild(li);
    +    }
    +  
    +    node.appendChild(ol);
    +  }
    +
    +  /**
    +   * Breaks {@code job.sourceCode} around style boundaries in
    +   * {@code job.decorations} and modifies {@code job.sourceNode} in place.
    +   * @param {Object} job like <pre>{
    +   *    sourceCode: {string} source as plain text,
    +   *    spans: {Array.<number|Node>} alternating span start indices into source
    +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
    +   *       span.
    +   *    decorations: {Array.<number|string} an array of style classes preceded
    +   *       by the position at which they start in job.sourceCode in order
    +   * }</pre>
    +   * @private
    +   */
    +  function recombineTagsAndDecorations(job) {
    +    var isIE = /\bMSIE\b/.test(navigator.userAgent);
    +    var newlineRe = /\n/g;
    +  
    +    var source = job.sourceCode;
    +    var sourceLength = source.length;
    +    // Index into source after the last code-unit recombined.
    +    var sourceIndex = 0;
    +  
    +    var spans = job.spans;
    +    var nSpans = spans.length;
    +    // Index into spans after the last span which ends at or before sourceIndex.
    +    var spanIndex = 0;
    +  
    +    var decorations = job.decorations;
    +    var nDecorations = decorations.length;
    +    // Index into decorations after the last decoration which ends at or before
    +    // sourceIndex.
    +    var decorationIndex = 0;
    +  
    +    // Remove all zero-length decorations.
    +    decorations[nDecorations] = sourceLength;
    +    var decPos, i;
    +    for (i = decPos = 0; i < nDecorations;) {
    +      if (decorations[i] !== decorations[i + 2]) {
    +        decorations[decPos++] = decorations[i++];
    +        decorations[decPos++] = decorations[i++];
    +      } else {
    +        i += 2;
    +      }
    +    }
    +    nDecorations = decPos;
    +  
    +    // Simplify decorations.
    +    for (i = decPos = 0; i < nDecorations;) {
    +      var startPos = decorations[i];
    +      // Conflate all adjacent decorations that use the same style.
    +      var startDec = decorations[i + 1];
    +      var end = i + 2;
    +      while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {
    +        end += 2;
    +      }
    +      decorations[decPos++] = startPos;
    +      decorations[decPos++] = startDec;
    +      i = end;
    +    }
    +  
    +    nDecorations = decorations.length = decPos;
    +  
    +    var decoration = null;
    +    while (spanIndex < nSpans) {
    +      var spanStart = spans[spanIndex];
    +      var spanEnd = spans[spanIndex + 2] || sourceLength;
    +  
    +      var decStart = decorations[decorationIndex];
    +      var decEnd = decorations[decorationIndex + 2] || sourceLength;
    +  
    +      var end = Math.min(spanEnd, decEnd);
    +  
    +      var textNode = spans[spanIndex + 1];
    +      var styledText;
    +      if (textNode.nodeType !== 1  // Don't muck with <BR>s or <LI>s
    +          // Don't introduce spans around empty text nodes.
    +          && (styledText = source.substring(sourceIndex, end))) {
    +        // This may seem bizarre, and it is.  Emitting LF on IE causes the
    +        // code to display with spaces instead of line breaks.
    +        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
    +        // space to appear at the beginning of every line but the first.
    +        // Emitting an old Mac OS 9 line separator makes everything spiffy.
    +        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
    +        textNode.nodeValue = styledText;
    +        var document = textNode.ownerDocument;
    +        var span = document.createElement('SPAN');
    +        span.className = decorations[decorationIndex + 1];
    +        var parentNode = textNode.parentNode;
    +        parentNode.replaceChild(span, textNode);
    +        span.appendChild(textNode);
    +        if (sourceIndex < spanEnd) {  // Split off a text node.
    +          spans[spanIndex + 1] = textNode
    +              // TODO: Possibly optimize by using '' if there's no flicker.
    +              = document.createTextNode(source.substring(end, spanEnd));
    +          parentNode.insertBefore(textNode, span.nextSibling);
    +        }
    +      }
    +  
    +      sourceIndex = end;
    +  
    +      if (sourceIndex >= spanEnd) {
    +        spanIndex += 2;
    +      }
    +      if (sourceIndex >= decEnd) {
    +        decorationIndex += 2;
    +      }
    +    }
    +  }
    +
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        sourceCode: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.sourceCode in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if (window['console']) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'types': C_TYPES
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null,true,false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true,
    +          'types': C_TYPES
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': COFFEE_KEYWORDS,
    +          'hashComments': 3,  // ### style block comments
    +          'cStyleComments': true,
    +          'multilineStrings': true,
    +          'tripleQuotedStrings': true,
    +          'regexLiterals': true
    +        }), ['coffee']);
    +  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var opt_langExtension = job.langExtension;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndSpans = extractSourceSpans(job.sourceNode);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndSpans.sourceCode;
    +      job.sourceCode = source;
    +      job.spans = sourceAndSpans.spans;
    +      job.basePos = 0;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +
    +      // Integrate the decorations and tags back into the source code,
    +      // modifying the sourceNode in place.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  /**
    +   * @param sourceCodeHtml {string} The HTML to pretty print.
    +   * @param opt_langExtension {string} The language name to use.
    +   *     Typically, a filename extension like 'cpp' or 'java'.
    +   * @param opt_numberLines {number|boolean} True to number lines,
    +   *     or the 1-indexed number of the first line in sourceCodeHtml.
    +   */
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
    +    var container = document.createElement('PRE');
    +    // This could cause images to load and onload listeners to fire.
    +    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
    +    // We assume that the inner HTML is from a trusted source.
    +    container.innerHTML = sourceCodeHtml;
    +    if (opt_numberLines) {
    +      numberLines(container, opt_numberLines);
    +    }
    +
    +    var job = {
    +      langExtension: opt_langExtension,
    +      numberLines: opt_numberLines,
    +      sourceNode: container
    +    };
    +    applyDecorator(job);
    +    return container.innerHTML;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return +(new Date); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/;
    +    var prettyPrintRe = /\bprettyprint\b/;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock['now']() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock['now']() < endTime; k++) {
    +        var cs = elements[k];
    +        var className = cs.className;
    +        if (className.indexOf('prettyprint') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR.registerLangHandler.
    +          // HTML5 recommends that a language be specified using "language-"
    +          // as the prefix instead.  Google Code Prettify supports both.
    +          // http://dev.w3.org/html5/spec-author-view/the-code-element.html
    +          var langExtension = className.match(langExtensionRe);
    +          // Support <pre class="prettyprint"><code class="language-c">
    +          var wrapper;
    +          if (!langExtension && (wrapper = childContentWrapper(cs))
    +              && "CODE" === wrapper.tagName) {
    +            langExtension = wrapper.className.match(langExtensionRe);
    +          }
    +
    +          if (langExtension) {
    +            langExtension = langExtension[1];
    +          }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                p.className && p.className.indexOf('prettyprint') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // Look for a class like linenums or linenums:<n> where <n> is the
    +            // 1-indexed number of the first line.
    +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
    +            lineNums = lineNums
    +                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
    +                  : false;
    +            if (lineNums) { numberLines(cs, lineNums); }
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              langExtension: langExtension,
    +              sourceNode: cs,
    +              numberLines: lineNums
    +            };
    +            applyDecorator(prettyPrintingJob);
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +   /**
    +    * Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +    * {@code class=prettyprint} and prettify them.
    +    *
    +    * @param {Function?} opt_whenDone if specified, called when the last entry
    +    *     has been finished.
    +    */
    +  window['prettyPrintOne'] = prettyPrintOne;
    +   /**
    +    * Pretty print a chunk of code.
    +    *
    +    * @param {string} sourceCodeHtml code as html
    +    * @return {string} code as html, but prettier
    +    */
    +  window['prettyPrint'] = prettyPrint;
    +   /**
    +    * Contains functions for creating and registering new language handlers.
    +    * @type {Object}
    +    */
    +  window['PR'] = {
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff --git a/docs/user/Scribble-Java-tutorial_files/prettify.css b/docs/user/Scribble-Java-tutorial_files/prettify.css
    new file mode 100644
    index 0000000..0d9854e
    --- /dev/null
    +++ b/docs/user/Scribble-Java-tutorial_files/prettify.css
    @@ -0,0 +1,52 @@
    +/* Pretty printing styles. Used with prettify.js. */
    +
    +/* SPAN elements with the classes below are added by prettyprint. */
    +.pln { color: #000 }  /* plain text */
    +
    +@media screen {
    +  .str { color: #080 }  /* string content */
    +  .kwd { color: blue }  /* a keyword */
    +  .com { color: #800 }  /* a comment */
    +  .typ { color: #606 }  /* a type name */
    +  .lit { color: #066 }  /* a literal value */
    +  /* punctuation, lisp open bracket, lisp close bracket */
    +  .pun, .opn, .clo { color: #660 }
    +  .tag { color: #008 }  /* a markup tag name */
    +  .atn { color: #606 }  /* a markup attribute name */
    +  .atv { color: #080 }  /* a markup attribute value */
    +  .dec, .var { color: #606 }  /* a declaration; a variable name */
    +  .fun { color: red }  /* a function name */
    +}
    +
    +/* Use higher contrast and text-weight for printable form. */
    +@media print, projection {
    +  .str { color: #060 }
    +  .kwd { color: #006; font-weight: bold }
    +  .com { color: #600; font-style: italic }
    +  .typ { color: #404; font-weight: bold }
    +  .lit { color: #044 }
    +  .pun, .opn, .clo { color: #440 }
    +  .tag { color: #006; font-weight: bold }
    +  .atn { color: #404 }
    +  .atv { color: #060 }
    +}
    +
    +/* Put a border around prettyprinted code snippets. */
    +pre.prettyprint { padding: 2px; border: 1px solid #888 }
    +
    +/* Specify class=linenums on a pre to get line numbering */
    +ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
    +li.L0,
    +li.L1,
    +li.L2,
    +li.L3,
    +li.L5,
    +li.L6,
    +li.L7,
    +li.L8 { list-style-type: none }
    +/* Alternate shading for lines */
    +li.L1,
    +li.L3,
    +li.L5,
    +li.L7,
    +li.L9 { background: #eee }
    diff --git a/docs/user/Scribble-Java-tutorial_files/style.css b/docs/user/Scribble-Java-tutorial_files/style.css
    new file mode 100644
    index 0000000..d808767
    --- /dev/null
    +++ b/docs/user/Scribble-Java-tutorial_files/style.css
    @@ -0,0 +1,80 @@
    +body {
    +	background-color: White; 
    +	color: Black;
    +	/*padding-left: 2%;
    +	padding-right: 2%;*/
    +	counter-reset: chapter;
    +}
    +
    +/*img {
    +	border: 2px solid black
    +}*/
    +
    +/*
    +h1, h2, h3 {
    +	padding-left: 2%;
    +	color: Black;
    +	background-color :White;
    +	border: 2px solid black ;
    +}*/
    +
    +/*.alignleft {
    +	float: left;
    +}
    +.alignright {
    +	float: right;
    +}*/
    +
    +h2:before {
    +	content: counter(chapter) ". ";
    +	counter-increment: chapter;
    +}
    +
    +h2 {
    +	counter-reset: section;  /* Set section to 0 */
    +}
    +
    +h3:before {
    +	content: counter(chapter) "." counter(section) " ";
    +	counter-increment: section;  /* Add 1 to section */
    +}
    +
    +ol.nested {
    +	counter-reset: item
    +}
    +
    +li.nested:before {
    +	content: counters(item, ".") ". ";
    +	counter-increment: item
    +}
    +
    +li.nested {
    +	display: block
    +}
    +
    +
    +/*h1, h2 {
    +	padding: 3px;
    +	background-color: rgb(252,199,18);
    +}
    +h3 {
    +	border-bottom: thick solid rgb(252,199,18);
    +}
    +blockquote {
    +	border-left: thick solid rgb(252,199,18);
    +	padding-left: 5px;
    +	font-style: italic;
    +}
    +h1, h2, h3, h4 { color: black; }
    +p.authors { font-style: italic; }
    +pre.code {
    +	margin-left: 40px; margin-right: 40px; padding: 2px;
    +	background-color: #000;
    +	color: white;
    +	overflow-x:auto;
    +}
    +pre.prompt {
    +	margin-left: 40px; margin-right: 40px; padding: 2px;
    +	background-color: black; color: white;
    +}*/
    +
    diff --git a/docs/user/user-guide.html b/docs/user/user-guide.html
    new file mode 100644
    index 0000000..66b9e61
    --- /dev/null
    +++ b/docs/user/user-guide.html
    @@ -0,0 +1,300 @@
    +<!DOCTYPE html>
    +<html lang="en">
    +  <head>
    +    <meta charset="utf-8"/>
    +    <title>Scribble - Working with Scribble</title>
    +    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    +    <meta name="description" content="">
    +    <meta name="author" content="">
    +    <meta name="keywords" content="">
    +    <meta name="generator" content="JBake">
    +
    +    <!-- css -->
    +    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
    +    <link href="../../css/bootstrap.min.css" rel="stylesheet">
    +    <link href="../../css/asciidoctor.css" rel="stylesheet">
    +    <link href="../../css/base.css" rel="stylesheet">
    +    <link href="../../css/styles.css" rel="stylesheet">
    +    <link href="../../css/prettify.css" rel="stylesheet">
    +
    +    <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
    +    <!--[if lt IE 9]>
    +      <script src="../../js/html5shiv.min.js"></script>
    +    <![endif]-->
    +
    +    <!-- Fav and touch icons -->
    +    <!--<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">-->
    +    <link rel="shortcut icon" href="../../favicon.ico">
    +  </head>
    +  <body onload="prettyPrint()" data-spy="scroll" data-offset="80" data-target="#toc">
    +    <div id="wrap">
    +      <div class="dropup">
    +        <script>
    +            window.addEventListener('load', function() {
    +                 renderTabzilla("Scribble", "https://scribble.github.io", true );
    +            }, false);
    +        </script>
    +      </div>
    +
    +  <!-- Fixed navbar -->
    +    <nav class="navbar navbar-fixed-top" role="navigation">
    +      <div class="container">
    +        <!-- Brand and toggle get grouped for better mobile display -->
    +<!--
    +-->
    +        <div class="navbar-header">
    +          <button class="navbar-toggle collapsed" data-target="#bs-example-navbar-collapse-1" data-toggle="collapse" type="button">
    +            <span class="sr-only">Toggle navigation</span>
    +            <span class="icon-bar"></span>
    +            <span class="icon-bar"></span>
    +            <span class="icon-bar"></span>
    +          </button>
    +        </div>
    +        <!-- Collect the nav links, forms, and other content for toggling -->
    +        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
    +          <ul class="nav navbar-nav">
    +            <li><a href="../../index.html">Home</a></li>
    +            <li>
    +              <a href="../../docs/overview/getting-started.html">Getting
    +                  Started</a>
    +            </li>
    +                <li class="dropdown">
    +                  <a aria-expanded="false" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
    +                    Documentation<span class="caret"></span>
    +                  </a>
    +                  <ul class="dropdown-menu" role="menu">
    +                    <!--<li>
    +                      <a href="../../docs/user/user-guide.html">User Documentation</a>
    +                    </li>-->
    +                    <li>
    +                      <a href="../../docs/scribble-java.html#QUICK">Quick Start (Scribble-Java)</a>
    +                    </li>
    +                    <li>
    +                      <a href="../../docs/scribble-java.html#SCRIBCORE">Language Reference</a>
    +                    </li>
    +                    <li class="menu-item dropdown dropdown-submenu">
    +                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Java Tooling</a>
    +                      <ul class="dropdown-menu">
    +                        <li class="menu-item ">
    +                          <a href="../../docs/scribble-java.html">API Generation Tutorial</a>
    +                        </li>
    +                      </ul>
    +                    </li>
    +                    <li class="menu-item dropdown dropdown-submenu">
    +                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Scala Tooling</a>
    +                      <ul class="dropdown-menu">
    +                        <li class="menu-item ">
    +                          <a href="../../docs/scribble-scala.html">API Generation Tutorial and Demo Artifact</a>
    +                        </li>
    +                      </ul>
    +                    </li>
    +                  </ul>
    +                </li>
    +
    +            <li class=""><a href="../../downloads.html">Downloads</a></li>
    +            <li class="dropdown"><a aria-expanded="false" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
    +              Community
    +              <span class="caret"></span>
    +            </a>
    +            <ul class="dropdown-menu" role="menu">
    +
    +              <li>
    +                <a href="https://groups.google.com/forum/#!forum/scribble-user">User Forum</a>
    +              </li>
    +              <li>
    +                <a href="https://groups.google.com/forum/#!forum/scribble-lang">Scribble Language Forum</a>
    +              </li>
    +              <li>
    +                <a href="../../community/issues.html">Reporting Issues</a>
    +              </li>
    +              <li>
    +                <a href="../../blog.html">Blog</a>
    +              </li>
    +              <li>
    +                <a href="../../community/collaborators.html">Collaborators</a>
    +              </li>
    +              <li>
    +                <a href="../../license.html">License</a>
    +              </li>
    +              <li>
    +                <a href="https://travis-ci.org/scribble">CI Builds</a>
    +              </li>
    +            </ul></li>
    +          </ul>
    +        </div>
    +      </div>
    +    </nav>
    +
    +      <section class="main-banner">
    +        <div class="container">
    +          <h1>Working with Scribble</h1>
    +          <p>How to describe, verify, generate artifacts and monitor protocols</p>
    +        </div>
    +      </section>
    +
    +	<!--<p><em>21 April 2015</em></p>-->
    +
    +	<section>
    +      <div class="container">
    +        <div id="preamble">
    +<div class="sectionbody">
    +<div id="toc" class="toc">
    +<div id="toctitle" class="title"></div>
    +<ul class="sectlevel1">
    +<li><a href="#_web_tooling">Web Tooling</a>
    +<ul class="sectlevel2">
    +<li><a href="#_installing_starting_the_server">Installing/Starting the Server</a></li>
    +<li><a href="#_using_the_user_interface">Using the User Interface</a></li>
    +</ul>
    +</li>
    +</ul>
    +</div>
    +</div>
    +</div>
    +<div class="sect1">
    +<h2 id="_web_tooling">Web Tooling</h2>
    +<div class="sectionbody">
    +<div class="paragraph">
    +<p>This section describes how to use the Web tooling within the Scribble project. These tools can be downloaded
    +using instructions in the <em>Downloads</em> section.</p>
    +</div>
    +<div class="sect2">
    +<h3 id="_installing_starting_the_server">Installing/Starting the Server</h3>
    +<div class="paragraph">
    +<p>The Web tooling distribution provides a complete server for running the Web tooling. Simply unpack the distribution
    +and running the following command from the root folder of the distribution, to start the server:</p>
    +</div>
    +<div class="listingblock">
    +<div class="content">
    +<pre>bin/standalone.sh</pre>
    +</div>
    +</div>
    +<div class="paragraph">
    +<p>By default, the folder containing the Scribble modules will be contained within the user&#8217;s home directory, under a hidden
    +sub-folder called <em>.scribble</em>.</p>
    +</div>
    +<div class="paragraph">
    +<p>If you wish to change this location, then include the path when starting the server:</p>
    +</div>
    +<div class="listingblock">
    +<div class="content">
    +<pre>bin/standalone.sh -DSCRIBBLE_PATH=&lt;location of scribble modules&gt;</pre>
    +</div>
    +</div>
    +<div class="paragraph">
    +<p>Once the server has been started, simply start a web browser and navigate to the URI: <a href="http://localhost:8080" class="bare">http://localhost:8080</a></p>
    +</div>
    +</div>
    +<div class="sect2">
    +<h3 id="_using_the_user_interface">Using the User Interface</h3>
    +<div class="paragraph">
    +<p>The initial page shown within the Web application (located at <a href="http://localhost:8080" class="bare">http://localhost:8080</a>) is the list of modules.</p>
    +</div>
    +<div class="paragraph">
    +<p>At the top of the page, there is a text field that can be used to specify a new module, as a dot separate name. For example, <em>dept.finance.Accounting</em>.</p>
    +</div>
    +<div class="paragraph">
    +<p>Any existing modules will be listed in the main part of the page, with a trash symbol at the end of each module&#8217;s line, which can be used to delete the module.</p>
    +</div>
    +<div class="paragraph">
    +<p>When either a new module is created, or an existing module selected, the browser will navigate to the editor page
    +for the module.</p>
    +</div>
    +<div class="paragraph">
    +<p>At the top of the editor page, a description text field is provided to enable a description of the module to be
    +provided.</p>
    +</div>
    +<div class="paragraph">
    +<p>The main body of the page is the editor for the module definition. Any keywords are colour coded.</p>
    +</div>
    +<div class="sect3">
    +<h4 id="_validation">Validation</h4>
    +<div class="paragraph">
    +<p>When any changes are applied to the module definition and saved, this will trigger a validation step which may
    +result in any warnings or errors being displayed below the editor window. For some errors, the location of the
    +error can be highlighted by selecting the error message.</p>
    +</div>
    +</div>
    +<div class="sect3">
    +<h4 id="_roles">Roles</h4>
    +<div class="paragraph">
    +<p>When a valid definition has been created, with a set of roles, then the role names (that are associated with a
    +local projection) will be listed on the right hand side above the editor window.</p>
    +</div>
    +<div class="paragraph">
    +<p>By selecting a role name, the browser will navigate to the local projection of the global protocol.</p>
    +</div>
    +<div class="admonitionblock note">
    +<table>
    +<tr>
    +<td class="icon">
    +<i class="fa icon-note" title="Note"></i>
    +</td>
    +<td class="content">
    +This window currently displays a graph (dot notation) that is hardcoded currently, just to show what may
    +also be possible to derive from the local projection. Further work is required.
    +</td>
    +</tr>
    +</table>
    +</div>
    +<div class="admonitionblock note">
    +<table>
    +<tr>
    +<td class="icon">
    +<i class="fa icon-note" title="Note"></i>
    +</td>
    +<td class="content">
    +Documentation for the older (no longer developed or supported) Eclipse and Command Line tools can be
    +found <a href="http://docs.jboss.org/scribble/latest/userguide/html">here</a>.
    +</td>
    +</tr>
    +</table>
    +</div>
    +</div>
    +</div>
    +</div>
    +</div>
    +      </div>
    +    </section>
    +
    +		</div>
    +    </div>
    +    
    +    <section>
    +      <div class="container">
    +        <p class="muted credit">&copy; Scribble.org, 2009-2015 | Baked with <a href="http://jbake.org">JBake v2.3.2</a></p>
    +    <p id="forkongithubp"><span id="forkongithub">
    +      <a href="https://github.com/scribble" class="bg-grey">
    +        Fork me on GitHub
    +      </a>
    +    </span></p>
    +      </div>
    +    </section>
    +    
    +    <!-- javascript -->
    +    <!-- Placed at the end of the document so the pages load faster -->
    +    <!-- js -->
    +    <script src="../../js/jquery-1.11.2.min.js"></script>
    +    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
    +    <script src="../../js/behavior.js"></script>
    +    <script src="../../js/prettify.js"></script>
    +    
    +<script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-xxxyyyxy-z']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +
    +  </body>
    +</html>
    diff --git a/downloads.html b/downloads.html
    new file mode 100644
    index 0000000..1cd7c3d
    --- /dev/null
    +++ b/downloads.html
    @@ -0,0 +1,227 @@
    +<!DOCTYPE html>
    +<html lang="en">
    +  <head>
    +    <meta charset="utf-8"/>
    +    <title>Scribble - Downloads</title>
    +    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    +    <meta name="description" content="">
    +    <meta name="author" content="">
    +    <meta name="keywords" content="">
    +    <meta name="generator" content="JBake">
    +
    +    <!-- css -->
    +    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
    +    <link href="css/bootstrap.min.css" rel="stylesheet">
    +    <link href="css/asciidoctor.css" rel="stylesheet">
    +    <link href="css/base.css" rel="stylesheet">
    +    <link href="css/styles.css" rel="stylesheet">
    +    <link href="css/prettify.css" rel="stylesheet">
    +
    +    <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
    +    <!--[if lt IE 9]>
    +      <script src="js/html5shiv.min.js"></script>
    +    <![endif]-->
    +
    +    <!-- Fav and touch icons -->
    +    <!--<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">-->
    +    <link rel="shortcut icon" href="favicon.ico">
    +  </head>
    +  <body onload="prettyPrint()" data-spy="scroll" data-offset="80" data-target="#toc">
    +    <div id="wrap">
    +      <div class="dropup">
    +        <script>
    +            window.addEventListener('load', function() {
    +                 renderTabzilla("Scribble", "https://scribble.github.io", true );
    +            }, false);
    +        </script>
    +      </div>
    +
    +  <!-- Fixed navbar -->
    +    <nav class="navbar navbar-fixed-top" role="navigation">
    +      <div class="container">
    +        <!-- Brand and toggle get grouped for better mobile display -->
    +<!--
    +-->
    +        <div class="navbar-header">
    +          <button class="navbar-toggle collapsed" data-target="#bs-example-navbar-collapse-1" data-toggle="collapse" type="button">
    +            <span class="sr-only">Toggle navigation</span>
    +            <span class="icon-bar"></span>
    +            <span class="icon-bar"></span>
    +            <span class="icon-bar"></span>
    +          </button>
    +        </div>
    +        <!-- Collect the nav links, forms, and other content for toggling -->
    +        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
    +          <ul class="nav navbar-nav">
    +            <li><a href="index.html">Home</a></li>
    +            <li>
    +              <a href="docs/overview/getting-started.html">Getting
    +                  Started</a>
    +            </li>
    +                <li class="dropdown">
    +                  <a aria-expanded="false" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
    +                    Documentation<span class="caret"></span>
    +                  </a>
    +                  <ul class="dropdown-menu" role="menu">
    +                    <!--<li>
    +                      <a href="docs/user/user-guide.html">User Documentation</a>
    +                    </li>-->
    +                    <li>
    +                      <a href="docs/scribble-java.html#QUICK">Quick Start (Scribble-Java)</a>
    +                    </li>
    +                    <li>
    +                      <a href="docs/scribble-java.html#SCRIBCORE">Language Reference</a>
    +                    </li>
    +                    <li class="menu-item dropdown dropdown-submenu">
    +                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Java Tooling</a>
    +                      <ul class="dropdown-menu">
    +                        <li class="menu-item ">
    +                          <a href="docs/scribble-java.html">API Generation Tutorial</a>
    +                        </li>
    +                      </ul>
    +                    </li>
    +                    <li class="menu-item dropdown dropdown-submenu">
    +                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Scala Tooling</a>
    +                      <ul class="dropdown-menu">
    +                        <li class="menu-item ">
    +                          <a href="docs/scribble-scala.html">API Generation Tutorial and Demo Artifact</a>
    +                        </li>
    +                      </ul>
    +                    </li>
    +                  </ul>
    +                </li>
    +
    +            <li class=""><a href="downloads.html">Downloads</a></li>
    +            <li class="dropdown"><a aria-expanded="false" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
    +              Community
    +              <span class="caret"></span>
    +            </a>
    +            <ul class="dropdown-menu" role="menu">
    +
    +              <li>
    +                <a href="https://groups.google.com/forum/#!forum/scribble-user">User Forum</a>
    +              </li>
    +              <li>
    +                <a href="https://groups.google.com/forum/#!forum/scribble-lang">Scribble Language Forum</a>
    +              </li>
    +              <li>
    +                <a href="community/issues.html">Reporting Issues</a>
    +              </li>
    +              <li>
    +                <a href="blog.html">Blog</a>
    +              </li>
    +              <li>
    +                <a href="community/collaborators.html">Collaborators</a>
    +              </li>
    +              <li>
    +                <a href="license.html">License</a>
    +              </li>
    +              <li>
    +                <a href="https://travis-ci.org/scribble">CI Builds</a>
    +              </li>
    +            </ul></li>
    +          </ul>
    +        </div>
    +      </div>
    +    </nav>
    +
    +      <section class="main-banner">
    +        <div class="container">
    +          <h1>Downloads</h1>
    +          <p>Downloads for Scribble</p>
    +        </div>
    +      </section>
    +
    +	<!--<p><em>27 February 2015</em></p>-->
    +
    +	<section>
    +      <div class="container">
    +        <div class="sect2">
    +<h3 id="_web_browser_based_tooling">Web Browser based Tooling</h3>
    +<div class="paragraph">
    +<p>Download the latest version of the Web tooling from the <a href="https://github.com/scribble/scribble-web/releases">Scribble Web</a> releases page.</p>
    +</div>
    +</div>
    +<div class="sect2">
    +<h3 id="_old_tooling">Old Tooling</h3>
    +<div class="paragraph">
    +<p>See the <a href="http://docs.jboss.org/scribble/latest/userguide/html">User Guide</a> for information on how to use the tools within Eclipse or via the command line.</p>
    +</div>
    +<div class="sect3">
    +<h4 id="_command_line">Command Line</h4>
    +<div class="paragraph">
    +<p>The command line tools can be downloaded from <a href="http://downloads.jboss.org/scribble/tools/cli/scribble-0.3.0.Final.zip">here</a>.</p>
    +</div>
    +</div>
    +<div class="sect3">
    +<h4 id="_eclipse">Eclipse</h4>
    +<div class="paragraph">
    +<p>The Java tools are provided as a set of plugins within the Eclipse IDE (Integrated Development Environment), or a command line distribution. To install the tools into Eclipse:</p>
    +</div>
    +<div class="ulist">
    +<ul>
    +<li>
    +<p>Download Eclipse (see button on the right)</p>
    +</li>
    +<li>
    +<p>When Eclipse has been launched, go to the <em>Help&#8594; Install New Software&#8230;&#8203;</em> menu item.
    +This will show a dialog window.</p>
    +</li>
    +<li>
    +<p>Enter the URL <a href="http://download.jboss.org/scribble/tools/latest" class="bare">http://download.jboss.org/scribble/tools/latest</a> into the <em>Work With</em> field and
    +press the <em>return</em> key.</p>
    +</li>
    +<li>
    +<p>Select the <strong>Scribble</strong> top level node and press the <em>Next</em> button.</p>
    +</li>
    +<li>
    +<p>Follow the instructions and restart the Eclipse tooling when requested.</p>
    +</li>
    +</ul>
    +</div>
    +</div>
    +</div>
    +      </div>
    +    </section>
    +
    +		</div>
    +    </div>
    +    
    +    <section>
    +      <div class="container">
    +        <p class="muted credit">&copy; Scribble.org, 2009-2015 | Baked with <a href="http://jbake.org">JBake v2.3.2</a></p>
    +    <p id="forkongithubp"><span id="forkongithub">
    +      <a href="https://github.com/scribble" class="bg-grey">
    +        Fork me on GitHub
    +      </a>
    +    </span></p>
    +      </div>
    +    </section>
    +    
    +    <!-- javascript -->
    +    <!-- Placed at the end of the document so the pages load faster -->
    +    <!-- js -->
    +    <script src="js/jquery-1.11.2.min.js"></script>
    +    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
    +    <script src="js/behavior.js"></script>
    +    <script src="js/prettify.js"></script>
    +    
    +<script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-xxxyyyxy-z']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +
    +  </body>
    +</html>
    diff --git a/favicon.ico b/favicon.ico
    new file mode 100644
    index 0000000..903d67c
    Binary files /dev/null and b/favicon.ico differ
    diff --git a/feed.xml b/feed.xml
    new file mode 100644
    index 0000000..9d37c73
    --- /dev/null
    +++ b/feed.xml
    @@ -0,0 +1,25 @@
    +<?xml version="1.0"?>
    +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    +  <channel>
    +    <title>Scribble Blog</title>
    +    <link>http://www.scribble.org</link>
    +    <atom:link href="http://www.scribble.org/feed.xml" rel="self" type="application/rss+xml" />
    +    <description>Blog posts about Scribble, a language for describing multiparty interactions.</description>
    +    <language>en-us</language>
    +    <pubDate>Tue, 27 Jun 2017 11:50:48 +0000</pubDate>
    +    <lastBuildDate>Tue, 27 Jun 2017 11:50:48 +0000</lastBuildDate>
    +
    +    <item>
    +      <title>Placeholder blog</title>
    +      <link>http://www.scribble.org/blog/2015/2015-03-03-1.html</link>
    +      <pubDate>Tue, 3 Mar 2015 00:00:00 +0000</pubDate>
    +      <guid isPermaLink="false">blog/2015/2015-03-03-1.html</guid>
    +      	<description>
    +	&lt;div class=&quot;paragraph&quot;&gt;
    +&lt;p&gt;This is a placeholder for a blog entry.&lt;/p&gt;
    +&lt;/div&gt;
    +	</description>
    +    </item>
    +
    +  </channel> 
    +</rss>
    diff --git a/fonts/glyphicons-halflings-regular.eot b/fonts/glyphicons-halflings-regular.eot
    index 423bd5d..4a4ca86 100644
    Binary files a/fonts/glyphicons-halflings-regular.eot and b/fonts/glyphicons-halflings-regular.eot differ
    diff --git a/fonts/glyphicons-halflings-regular.svg b/fonts/glyphicons-halflings-regular.svg
    index 4469488..e3e2dc7 100644
    --- a/fonts/glyphicons-halflings-regular.svg
    +++ b/fonts/glyphicons-halflings-regular.svg
    @@ -28,12 +28,12 @@
     <glyph unicode="&#x205f;" horiz-adv-x="326" />
     <glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
     <glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
    -<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
    +<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
    +<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
     <glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
     <glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
    -<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
     <glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
    -<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q17 -55 85.5 -75.5t147.5 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
    +<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
     <glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
     <glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
     <glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
    @@ -46,7 +46,7 @@
     <glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
     <glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
     <glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
    -<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
    +<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
     <glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
     <glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
     <glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
    @@ -58,7 +58,7 @@
     <glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
     <glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
     <glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
    -<glyph unicode="&#xe028;" d="M0 25v475l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
    +<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
     <glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
     <glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
     <glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
    @@ -71,14 +71,14 @@
     <glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
     <glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
     <glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
    -<glyph unicode="&#xe041;" d="M1 700v475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
    -<glyph unicode="&#xe042;" d="M2 700v475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
    +<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
    +<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
     <glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
     <glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
     <glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
     <glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
     <glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
    -<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v70h471q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
    +<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
     <glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
     <glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
     <glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
    @@ -93,10 +93,10 @@
     <glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
     <glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
     <glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
    -<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
    +<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
     <glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
     <glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
    -<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l566 567l-136 137l-430 -431l-147 147z" />
    +<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
     <glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
     <glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
     <glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
    @@ -110,13 +110,13 @@
     <glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
     <glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
     <glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
    -<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
    -<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h600v200h-600v-200z" />
    -<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141z" />
    +<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
    +<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
    +<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
     <glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
    -<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM363 700h144q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26 q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-105 0 -172 -56t-67 -183zM500 300h200v100h-200v-100z" />
    -<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
    -<glyph unicode="&#xe087;" d="M0 500v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200 v-206q149 48 201 206h-201v200h200q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210z" />
    +<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
    +<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
    +<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
     <glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
     <glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
     <glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
    @@ -127,14 +127,14 @@
     <glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
     <glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
     <glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
    -<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
    -<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100z M100 0h400v400h-400v-400zM200 900q-3 0 14 48t35 96l18 47l214 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
    +<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
    +<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
     <glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
     <glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
     <glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
     <glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
    -<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
    -<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -21 -13 -29t-32 1l-94 78h-222l-94 -78q-19 -9 -32 -1t-13 29v64 q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
    +<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
    +<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
     <glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
     <glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
     <glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
    @@ -148,33 +148,33 @@
     <glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
     <glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
     <glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
    -<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM99 500v250v5q0 13 0.5 18.5t2.5 13t8 10.5t15 3h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35q-56 337 -56 351z M1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
    -<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23t-167.5 -37 t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
    +<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
    +<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
     <glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
    -<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q123 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 212l100 213h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
    -<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
    +<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
    +<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
     <glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
    -<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 37h302l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 16.5 -10.5t26 -26t16.5 -36.5v-526q0 -13 -85.5 -93.5t-93.5 -80.5h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l106 89v502l-342 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM999 201v600h200v-600h-200z" />
    -<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
    -<glyph unicode="&#xe130;" d="M1 585q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85l-1 -302q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM76 565l237 339h503l89 -100v-294l-340 -130 q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
    -<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 500h300l-2 -194l402 294l-402 298v-197h-298v-201z" />
    -<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l400 -294v194h302v201h-300v197z" />
    -<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
    -<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
    -<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -34 5.5 -93t7.5 -87q0 -9 17 -44t16 -60q12 0 23 -5.5 t23 -15t20 -13.5q20 -10 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55.5t-20 -57.5q12 -21 22.5 -34.5t28 -27t36.5 -17.5q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q101 -2 221 111q31 30 47 48t34 49t21 62q-14 9 -37.5 9.5t-35.5 7.5q-14 7 -49 15t-52 19 q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q8 16 22 22q6 -1 26 -1.5t33.5 -4.5t19.5 -13q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5 t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23 q-19 -3 -37 0q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -46 0t-45 -3q-20 -6 -51.5 -25.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79zM518 915q3 12 16 30.5t16 25.5q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -18 8 -42.5t16.5 -44 t9.5 -23.5q-6 1 -39 5t-53.5 10t-36.5 16z" />
    +<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
    +<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
    +<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
    +<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
    +<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
    +<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
    +<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
    +<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
     <glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
     <glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
     <glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
     <glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
     <glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
    -<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM513 609q0 32 21 56.5t52 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-16 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5q-37 0 -62.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
    -<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36 q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60l517 511 q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
    -<glyph unicode="&#xe143;" d="M79 784q0 131 99 229.5t230 98.5q144 0 242 -129q103 129 245 129q130 0 227 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100l-84.5 84.5t-68 74t-60 78t-33.5 70.5t-15 78z M250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-106 48.5q-73 0 -131 -83l-118 -171l-114 174q-51 80 -124 80q-59 0 -108.5 -49.5t-49.5 -118.5z" />
    -<glyph unicode="&#xe144;" d="M57 353q0 -94 66 -160l141 -141q66 -66 159 -66q95 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-12 12 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141l19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -18q46 -46 77 -99l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
    +<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
    +<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
    +<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
    +<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
     <glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
     <glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
    -<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335l-27 7q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5v-307l64 -14 q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5zM700 237 q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
    -<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -11 2.5 -24.5t5.5 -24t9.5 -26.5t10.5 -25t14 -27.5t14 -25.5 t15.5 -27t13.5 -24h242v-100h-197q8 -50 -2.5 -115t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10 t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5t-30 142.5h-221z" />
    +<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
    +<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
     <glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
     <glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
     <glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
    @@ -187,15 +187,15 @@
     <glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
     <glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
     <glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
    -<glyph unicode="&#xe162;" d="M216 519q10 -19 32 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8l9 -1q13 0 26 16l538 630q15 19 6 36q-8 18 -32 16h-300q1 4 78 219.5t79 227.5q2 17 -6 27l-8 8h-9q-16 0 -25 -15q-4 -5 -98.5 -111.5t-228 -257t-209.5 -238.5q-17 -19 -7 -40z" />
    +<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
     <glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
     <glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
     <glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
     <glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
     <glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
     <glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
    -<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 401h700v699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
    -<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l248 -237v700h-699zM900 150h100v50h-100v-50z" />
    +<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
    +<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
     <glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
     <glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
     <glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
    @@ -204,11 +204,11 @@
     <glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
     <glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
     <glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
    -<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -117q-25 -16 -43.5 -50.5t-18.5 -65.5v-359z" />
    +<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
     <glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
     <glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
    -<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q16 17 13 40.5t-22 37.5l-192 136q-19 14 -45 12t-42 -19l-119 -118q-143 103 -267 227q-126 126 -227 268l118 118q17 17 20 41.5 t-11 44.5l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
    -<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -15 -35.5t-35 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
    +<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
    +<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
     <glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
     <glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
     <glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
    @@ -221,9 +221,9 @@
     <glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
     <glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
     <glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
    -<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300 h200l-300 -300z" />
    -<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104t60.5 178q0 121 -85 207.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
    +<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
    +<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
     <glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
    -<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -12t1 -11q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
    +<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
     </font>
     </defs></svg> 
    \ No newline at end of file
    diff --git a/fonts/glyphicons-halflings-regular.ttf b/fonts/glyphicons-halflings-regular.ttf
    index a498ef4..67fa00b 100644
    Binary files a/fonts/glyphicons-halflings-regular.ttf and b/fonts/glyphicons-halflings-regular.ttf differ
    diff --git a/fonts/glyphicons-halflings-regular.woff b/fonts/glyphicons-halflings-regular.woff
    index d83c539..8c54182 100644
    Binary files a/fonts/glyphicons-halflings-regular.woff and b/fonts/glyphicons-halflings-regular.woff differ
    diff --git a/images/body-bg.jpg b/images/body-bg.jpg
    deleted file mode 100644
    index 0e0f861..0000000
    Binary files a/images/body-bg.jpg and /dev/null differ
    diff --git a/images/download-button.png b/images/download-button.png
    deleted file mode 100644
    index df3f09a..0000000
    Binary files a/images/download-button.png and /dev/null differ
    diff --git a/images/github-button.png b/images/github-button.png
    deleted file mode 100644
    index efe07f9..0000000
    Binary files a/images/github-button.png and /dev/null differ
    diff --git a/images/header-bg.jpg b/images/header-bg.jpg
    deleted file mode 100644
    index 960bff7..0000000
    Binary files a/images/header-bg.jpg and /dev/null differ
    diff --git a/images/highlight-bg.jpg b/images/highlight-bg.jpg
    deleted file mode 100644
    index 4c4a78e..0000000
    Binary files a/images/highlight-bg.jpg and /dev/null differ
    diff --git a/images/sidebar-bg.jpg b/images/sidebar-bg.jpg
    deleted file mode 100644
    index 42890fe..0000000
    Binary files a/images/sidebar-bg.jpg and /dev/null differ
    diff --git a/img/banner-bg.jpg b/img/banner-bg.jpg
    new file mode 100644
    index 0000000..a24a430
    Binary files /dev/null and b/img/banner-bg.jpg differ
    diff --git a/imgs/cog_zdlc_logo.png b/img/cog_zdlc_logo.png
    similarity index 100%
    rename from imgs/cog_zdlc_logo.png
    rename to img/cog_zdlc_logo.png
    diff --git a/img/home-separator.png b/img/home-separator.png
    new file mode 100644
    index 0000000..7561284
    Binary files /dev/null and b/img/home-separator.png differ
    diff --git a/imgs/imperial_college.png b/img/imperial_college.png
    similarity index 100%
    rename from imgs/imperial_college.png
    rename to img/imperial_college.png
    diff --git a/imgs/ooi.png b/img/ooi.png
    similarity index 100%
    rename from imgs/ooi.png
    rename to img/ooi.png
    diff --git a/imgs/queen_mary.png b/img/queen_mary.png
    similarity index 100%
    rename from imgs/queen_mary.png
    rename to img/queen_mary.png
    diff --git a/imgs/redhat.jpg b/img/redhat.jpg
    similarity index 100%
    rename from imgs/redhat.jpg
    rename to img/redhat.jpg
    diff --git a/imgs/forkme_right_red_aa0000.png b/imgs/forkme_right_red_aa0000.png
    deleted file mode 100644
    index 1e19c21..0000000
    Binary files a/imgs/forkme_right_red_aa0000.png and /dev/null differ
    diff --git a/imgs/pi-256x256x32.png b/imgs/pi-256x256x32.png
    deleted file mode 100644
    index 212b75d..0000000
    Binary files a/imgs/pi-256x256x32.png and /dev/null differ
    diff --git a/imgs/pi-32x32x32.png b/imgs/pi-32x32x32.png
    deleted file mode 100644
    index be6f1c7..0000000
    Binary files a/imgs/pi-32x32x32.png and /dev/null differ
    diff --git a/imgs/pi-48x48x32.png b/imgs/pi-48x48x32.png
    deleted file mode 100644
    index d444cc0..0000000
    Binary files a/imgs/pi-48x48x32.png and /dev/null differ
    diff --git a/imgs/pi-64x64x32.png b/imgs/pi-64x64x32.png
    deleted file mode 100644
    index d5e30eb..0000000
    Binary files a/imgs/pi-64x64x32.png and /dev/null differ
    diff --git a/imgs/pi-symbol-hi.png b/imgs/pi-symbol-hi.png
    deleted file mode 100644
    index 44e1a76..0000000
    Binary files a/imgs/pi-symbol-hi.png and /dev/null differ
    diff --git a/imgs/pi-symbol-md.png b/imgs/pi-symbol-md.png
    deleted file mode 100644
    index 4ec12d4..0000000
    Binary files a/imgs/pi-symbol-md.png and /dev/null differ
    diff --git a/imgs/pi-symbol-th.png b/imgs/pi-symbol-th.png
    deleted file mode 100644
    index ed514f7..0000000
    Binary files a/imgs/pi-symbol-th.png and /dev/null differ
    diff --git a/imgs/scribble-banner-1180px.png b/imgs/scribble-banner-1180px.png
    deleted file mode 100644
    index 4138958..0000000
    Binary files a/imgs/scribble-banner-1180px.png and /dev/null differ
    diff --git a/index.html b/index.html
    index 6404630..1efd5db 100644
    --- a/index.html
    +++ b/index.html
    @@ -1,186 +1,223 @@
     <!DOCTYPE html>
    -<html lang="en"><head>
    -<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    -    <meta charset="utf-8">
    +<html lang="en">
    +  <head>
    +    <meta charset="utf-8"/>
    +    <title>Scribble</title>
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta name="description" content="">
         <meta name="author" content="">
    -    <link rel="shortcut icon" href="imgs/pi-32x32x32.png">
    -
    -    <title>Scribble</title>
    -
    -    <link href="css/bootstrap.css" rel="stylesheet">
    -    <link href="css/scribble.css" rel="stylesheet">
    -
    -    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    +    <meta name="keywords" content="">
    +    <meta name="generator" content="JBake">
    +
    +    <!-- css -->
    +    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
    +    <link href="css/bootstrap.min.css" rel="stylesheet">
    +    <link href="css/asciidoctor.css" rel="stylesheet">
    +    <link href="css/base.css" rel="stylesheet">
    +    <link href="css/styles.css" rel="stylesheet">
    +    <link href="css/prettify.css" rel="stylesheet">
    +
    +    <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
         <!--[if lt IE 9]>
    -      <script src="js/html5shiv.js"></script>
    -      <script src="js/respond.min.js"></script>
    +      <script src="js/html5shiv.min.js"></script>
         <![endif]-->
     
    +    <!-- Fav and touch icons -->
    +    <!--<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">-->
    +    <link rel="shortcut icon" href="favicon.ico">
       </head>
    -
    -  <body>
    -
    -    <div class="container">
    -      <div class="jumbotron" style="position:relative">
    -<!--
    -        <h1><i>Scribble</i></h1>
    -        <span class="lead">SOA Repository Artifact Model and Protocol</span>
    --->
    +  <body onload="prettyPrint()" data-spy="scroll" data-offset="80" data-target="#toc">
    +    <div id="wrap">
    +      <div class="dropup">
    +        <script>
    +            window.addEventListener('load', function() {
    +                 renderTabzilla("Scribble", "https://scribble.github.io", true );
    +            }, false);
    +        </script>
    +      </div>
    +  <!-- Fixed navbar -->
    +    <nav class="navbar navbar-fixed-top" role="navigation">
    +      <div class="container">
    +        <!-- Brand and toggle get grouped for better mobile display -->
     <!--
    -        <p><a class="btn btn-lg btn-success" href="#">Get Started Now</a>
    -        <a class="btn btn-lg btn-warning" href="http://downloads.jboss.org/overlord/sramp/s-ramp-0.3.0.Final.zip">Download Now</a></p>
     -->
    -        <a href="https://github.com/Scribble"><img style="position: absolute; top: 0; right: 0; border: 0;" src="imgs/forkme_right_red_aa0000.png" alt=""></a>
    +        <div class="navbar-header">
    +          <button class="navbar-toggle collapsed" data-target="#bs-example-navbar-collapse-1" data-toggle="collapse" type="button">
    +            <span class="sr-only">Toggle navigation</span>
    +            <span class="icon-bar"></span>
    +            <span class="icon-bar"></span>
    +            <span class="icon-bar"></span>
    +          </button>
    +        </div>
    +        <!-- Collect the nav links, forms, and other content for toggling -->
    +        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
    +          <ul class="nav navbar-nav">
    +            <li><a href="index.html">Home</a></li>
    +            <li>
    +              <a href="docs/overview/getting-started.html">Getting
    +                  Started</a>
    +            </li>
    +                <li class="dropdown">
    +                  <a aria-expanded="false" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
    +                    Documentation<span class="caret"></span>
    +                  </a>
    +                  <ul class="dropdown-menu" role="menu">
    +                    <!--<li>
    +                      <a href="docs/user/user-guide.html">User Documentation</a>
    +                    </li>-->
    +                    <li>
    +                      <a href="docs/scribble-java.html#QUICK">Quick Start (Scribble-Java)</a>
    +                    </li>
    +                    <li>
    +                      <a href="docs/scribble-java.html#SCRIBCORE">Language Reference</a>
    +                    </li>
    +                    <li class="menu-item dropdown dropdown-submenu">
    +                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Java Tooling</a>
    +                      <ul class="dropdown-menu">
    +                        <li class="menu-item ">
    +                          <a href="docs/scribble-java.html">API Generation Tutorial</a>
    +                        </li>
    +                      </ul>
    +                    </li>
    +                    <li class="menu-item dropdown dropdown-submenu">
    +                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Scala Tooling</a>
    +                      <ul class="dropdown-menu">
    +                        <li class="menu-item ">
    +                          <a href="docs/scribble-scala.html">API Generation Tutorial and Demo Artifact</a>
    +                        </li>
    +                      </ul>
    +                    </li>
    +                  </ul>
    +                </li>
    +
    +            <li class=""><a href="downloads.html">Downloads</a></li>
    +            <li class="dropdown"><a aria-expanded="false" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
    +              Community
    +              <span class="caret"></span>
    +            </a>
    +            <ul class="dropdown-menu" role="menu">
    +
    +              <li>
    +                <a href="https://groups.google.com/forum/#!forum/scribble-user">User Forum</a>
    +              </li>
    +              <li>
    +                <a href="https://groups.google.com/forum/#!forum/scribble-lang">Scribble Language Forum</a>
    +              </li>
    +              <li>
    +                <a href="community/issues.html">Reporting Issues</a>
    +              </li>
    +              <li>
    +                <a href="blog.html">Blog</a>
    +              </li>
    +              <li>
    +                <a href="community/collaborators.html">Collaborators</a>
    +              </li>
    +              <li>
    +                <a href="license.html">License</a>
    +              </li>
    +              <li>
    +                <a href="https://travis-ci.org/scribble">CI Builds</a>
    +              </li>
    +            </ul></li>
    +          </ul>
    +        </div>
           </div>
    -      
    -      <div class="inner">
    -
    -          <div class="overview row">
    -            <div class="col-lg-6">
    -              <h3>What is Scribble?</h3>
    -
    -	      <br>
    -
    -              <p>Scribble is a language to describe application-level protocols among communicating systems. A protocol represents an agreement on how participating systems interact with each other. Without a protocol, it is hard to do meaningful interaction: participants simply cannot communicate effectively, since they do not know when to expect the other parties to send data, or whether the other party is ready to receive data.</p>
    -
    -	      <p>However, having a description of a protocol has further benefits. It enables verification to ensure
    -	      that the protocol can be implemented without resulting in unintended consequences, such as deadlocks.</p>
    -
    -	      <br>
    -
    -	      <h4>Find out more ...</h4>
    -
    -              <div class="buttons">
    -		<a class="btn btn-lg btn-success" href="docs/Scribble_Protocol_Language_Guide.pdf">Language Guide</a>
    -		<div class="btn-group">
    -        	  <button type="button" class="btn btn-lg btn-primary dropdown-toggle" data-toggle="dropdown">Tools <span class="caret"></span></button>
    -        	  <ul class="dropdown-menu" role="menu">
    -          	    <li><a href="scribble-java.html">Java</a></li>
    -          	    <li><a href="scribble-python.html">Python</a></li>
    -        	  </ul>
    -      		</div>
    -		<a class="btn btn-lg btn-info" href="docs/langref.html">Specification</a>
    -		<a class="btn btn-lg btn-warning" href="https://groups.google.com/forum/?fromgroups#!forum/scribble-lang">Forum</a>
    -	      </div>
    -
    -            </div>
    -
    -            <div class="col-lg-6">
    -              <h3>An example</h3>
    -<pre><code>
    -<a style="color:blue">module</a> examples;
    -
    -<a style="color:blue">global protocol</a> HelloWorld(<a style="color:blue">role</a> Me, <a style="color:blue">role</a> World) {
    -	hello(Greetings) <a style="color:blue">from</a> Me <a style="color:blue">to</a> World;
    -	<a style="color:blue">choice at</a> World {
    -		goodMorning(Compliments) <a style="color:blue">from</a> World <a style="color:blue">to</a> Me;
    -	} <a style="color:blue">or</a> {
    -		goodAfternoon(Salutations) <a style="color:blue">from</a> World <a style="color:blue">to</a> Me;
    -	}
    -}
    -</code></pre>
    -		<p>
    -		A very simply example, but this illustrates the basic syntax for a hello world interaction, where a party performing the role <emphasis>Me</emphasis> sends a message of type <i>Greetings</i> to another party performing the role 'World', who subsequently makes a decision which determines which path of the choice will be followed, resulting in a <i>GoodMorning</i> or <i>GoodAfternoon</i> message being exchanged.
    -		</p>
    -            </div>
    -          </div>
    +    </nav>
    +
    +<div class="homepage">
    +    <section class="main-banner">
    +        <div class="container">
    +          <h1 class="fade-in-up one">
    +            Scribble: Describing Multi Party Protocols
    +          </h1>
    +        </div>
    +      </section>
    +
    +    <section class="description">
    +<p>
    +Scribble is a language to describe application-level protocols among communicating systems. A protocol represents an agreement on how participating systems interact with each other. Without a protocol, it is hard to do meaningful interaction: participants simply cannot communicate effectively, since they do not know when to expect the other parties to send data, or whether the other party is ready to receive data.
     
    +However, having a description of a protocol has further benefits. It enables verification to ensure that the protocol can be implemented without resulting in unintended consequences, such as deadlocks.
    +</p>
    +    </section>
     
    -          <!-- *** Features *** -->
    -          <div class="features row">
    +    <section class="main-features">
    +        <div class="container">
    +            <div class="row">
                 <div class="col-lg-2">
    -              <h3>Describe <span class="glyphicon glyphicon-pencil"></span></h3>
    +              <h3>Describe <span class="fa fa-pencil"></span></h3>
                   <p>Scribble is a language for describing multiparty protocols from a global, or endpoint neutral, perspective.</p>
                 </div>
                 <div class="col-lg-3">
    -              <h3>Verify <span class="glyphicon glyphicon-thumbs-up"></span></h3>
    +              <h3>Verify <span class="fa fa-thumbs-up"></span></h3>
                   <p>Scribble has a theoretical foundation, based on the Pi Calculus and Session Types, to ensure that protocols
     		described using the language are sound, and do not suffer from deadlocks or livelocks.</p>
                </div>
                 <div class="col-lg-2">
    -              <h3>Project <span class="glyphicon glyphicon-fullscreen"></h3>
    +              <h3>Project <span class="fa fa-arrows-alt"></h3>
                   <p>Endpoint projection is the term used for identifying the responsibility of a particular role (or endpoint)
     		within a protocol.</p>
                 </div>
                 <div class="col-lg-3">
    -              <h3>Implement <span class="glyphicon glyphicon-tasks"></h3>
    +              <h3>Implement <span class="fa fa-tasks"></h3>
                   <p>Various options exist, including (a) using the endpoint projection for a role to generate a skeleton code, (b) using session type APIs to clearly describe the behaviour, and (c) statically verify the code against the projection.</p>
                 </div>
                 <div class="col-lg-2">
    -              <h3>Monitor <span class="glyphicon glyphicon-search"></h3>
    +              <h3>Monitor <span class="fa fa-search"></h3>
                   <p>Use the endpoint projection for roles defined within a Scribble protocol, to monitor the activity of
     		a particular endpoint, to ensure it correctly implements the expected behaviour.</p>
                 </div>
    -          </div>
     
    -          <div class="row">
    -            <div class="col-lg-12">
    -	      <br>
    -<p>
    -<i>"Scribbling is necessary for architects, either physical or computing, since all great ideas of architectural construction come from that unconscious moment, when you do not realise what it is, when there is no concrete shape, only a whisper which is not a whisper, an image which is not an image, somehow it starts to urge you in your mind, in so small a voice but how persistent it is, at that point you start scribbling."</i> (Dr. Kohei Honda, 2007)
    -</p>
    -	      <br>
                 </div>
    -          </div>
    -
    -          <div class="collaborators row">
    -            <div class="col-lg-6">
    -              <h3>Academia</h3>
    -                <div>
    -		  <a href="http://www3.imperial.ac.uk">
    -		    <img src="imgs/imperial_college.png" alt="Imperial College London" height="44" width="168"> 
    -		  </a>
    -                </div>
    -		<br>
    -                <div>
    -		  <a href="http://www.qmul.ac.uk/">
    -		    <img src="imgs/queen_mary.png" alt="Query Mary University" height="44" width="168"> 
    -		  </a>
    -                </div>
     
    -            </div>
    -            <div class="col-lg-6">
    -              <h3>Industry</h3>
    -		<div>
    -		  <a href="http://www.cognizantzdlc.com/">
    -		    <img src="imgs/cog_zdlc_logo.png" alt="Cognizant" height="80" width="160"> 
    -		  </a>
    -		</div>
    -		<div>
    -		  <a href="http://oceanobservatories.org/">
    -		    <img src="imgs/ooi.png" alt="Ocean Observatories Initiative" height="50" width="150"> 
    -		  </a>
    -		</div>
    -		<br>
    -		<div>
    -		  <a href="http://www.redhat.com">
    -		    <img src="imgs/redhat.jpg" alt="RedHat" height="50" width="150"> 
    -		  </a>
    -		</div>
    +	  <hr>
     
    -            </div>
    -          </div>
    +          <h5><i>
    +"Scribbling is necessary for architects, either physical or computing, since all great ideas of architectural construction come from that unconscious moment, when you do not realise what it is, when there is no concrete shape, only a whisper which is not a whisper, an image which is not an image, somehow it starts to urge you in your mind, in so small a voice but how persistent it is, at that point you start scribbling." (Dr. Kohei Honda, 2007)
    +          </i></h5>
     
    -      </div>
    +        </div>
    +    </section>
    +</div>
     
    -      <!-- Site footer -->
    -      <div class="footer">
    -        scribble.org 2009-14
    +		</div>
    +    </div>
    +    
    +    <section>
    +      <div class="container">
    +        <p class="muted credit">&copy; Scribble.org, 2009-2015 | Baked with <a href="http://jbake.org">JBake v2.3.2</a></p>
    +    <p id="forkongithubp"><span id="forkongithub">
    +      <a href="https://github.com/scribble" class="bg-grey">
    +        Fork me on GitHub
    +      </a>
    +    </span></p>
           </div>
    -
    -    </div> <!-- /container -->
    -
    -    <!-- Bootstrap core JavaScript
    -    ================================================== -->
    +    </section>
    +    
    +    <!-- javascript -->
         <!-- Placed at the end of the document so the pages load faster -->
    -  
    -
    -<!--
    -<iframe style="display: none;" allowtransparency="true" id="rufous-sandbox" frameborder="0" scrolling="no"></iframe>
    --->
    -    <script src="js/jquery.js"></script>
    -    <script src="js/bootstrap.js"></script>
    -
    -</body></html>
    +    <!-- js -->
    +    <script src="js/jquery-1.11.2.min.js"></script>
    +    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
    +    <script src="js/behavior.js"></script>
    +    <script src="js/prettify.js"></script>
    +    
    +<script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-xxxyyyxy-z']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +
    +  </body>
    +</html>
    diff --git a/javascripts/main.js b/javascripts/main.js
    deleted file mode 100644
    index d8135d3..0000000
    --- a/javascripts/main.js
    +++ /dev/null
    @@ -1 +0,0 @@
    -console.log('This would be the main JS file.');
    diff --git a/js/behavior.js b/js/behavior.js
    new file mode 100644
    index 0000000..a56b934
    --- /dev/null
    +++ b/js/behavior.js
    @@ -0,0 +1,34 @@
    +$(document).ready(function(){
    +  if (!!$('#toc').offset()) {
    +    var topOffset = 100;
    +    var stickyTop = $('#toc').offset().top - topOffset ; 
    +    $(window).scroll(function(){ 
    +      var windowTop = $(window).scrollTop(); 
    + 
    +      if (stickyTop < windowTop) {
    +        $('#toc').css({ position: 'fixed', top: topOffset + 40 });
    +      } else {
    +        $('#toc').css('position','static');
    +      }
    +    });
    +  }
    +  
    +  /* adjusting the ToC (parent selectors cannot be done in plain CSS3) */
    +  $('#preamble:has(.sectionbody:has(#toc)) ~ div')
    +    .css('float', 'right')
    +    .css('width', '940px');
    +  /* http://stackoverflow.com/a/11842865/1594980 */
    +  $('#preamble:has(.sectionbody:has(#toc)) ~ div h1,h2,h3,h4,h5,h6')
    +    .css('padding-top', '70px', 'important')
    +    .css('margin-top', '-70px', 'important');
    +
    +  $('#preamble:has(.sectionbody:has(#toc))')
    +    .css('float', 'left')
    +    .css('padding-top', '40px')
    +    .css('float', 'left')
    +    .css('margin-right', '5px');
    +
    +  /* adding the nav class to ToC for scrollspy */
    +  $('#toc > ul:first-of-type').addClass('nav');
    +});
    +
    diff --git a/js/bootstrap.js b/js/bootstrap.js
    deleted file mode 100644
    index 850e6e5..0000000
    --- a/js/bootstrap.js
    +++ /dev/null
    @@ -1,2006 +0,0 @@
    -/*!
    - * Bootstrap v3.0.3 (http://getbootstrap.com)
    - * Copyright 2013 Twitter, Inc.
    - * Licensed under http://www.apache.org/licenses/LICENSE-2.0
    - */
    -
    -if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }
    -
    -/* ========================================================================
    - * Bootstrap: transition.js v3.0.3
    - * http://getbootstrap.com/javascript/#transitions
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
    -  // ============================================================
    -
    -  function transitionEnd() {
    -    var el = document.createElement('bootstrap')
    -
    -    var transEndEventNames = {
    -      'WebkitTransition' : 'webkitTransitionEnd'
    -    , 'MozTransition'    : 'transitionend'
    -    , 'OTransition'      : 'oTransitionEnd otransitionend'
    -    , 'transition'       : 'transitionend'
    -    }
    -
    -    for (var name in transEndEventNames) {
    -      if (el.style[name] !== undefined) {
    -        return { end: transEndEventNames[name] }
    -      }
    -    }
    -  }
    -
    -  // http://blog.alexmaccaw.com/css-transitions
    -  $.fn.emulateTransitionEnd = function (duration) {
    -    var called = false, $el = this
    -    $(this).one($.support.transition.end, function () { called = true })
    -    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
    -    setTimeout(callback, duration)
    -    return this
    -  }
    -
    -  $(function () {
    -    $.support.transition = transitionEnd()
    -  })
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: alert.js v3.0.3
    - * http://getbootstrap.com/javascript/#alerts
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // ALERT CLASS DEFINITION
    -  // ======================
    -
    -  var dismiss = '[data-dismiss="alert"]'
    -  var Alert   = function (el) {
    -    $(el).on('click', dismiss, this.close)
    -  }
    -
    -  Alert.prototype.close = function (e) {
    -    var $this    = $(this)
    -    var selector = $this.attr('data-target')
    -
    -    if (!selector) {
    -      selector = $this.attr('href')
    -      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
    -    }
    -
    -    var $parent = $(selector)
    -
    -    if (e) e.preventDefault()
    -
    -    if (!$parent.length) {
    -      $parent = $this.hasClass('alert') ? $this : $this.parent()
    -    }
    -
    -    $parent.trigger(e = $.Event('close.bs.alert'))
    -
    -    if (e.isDefaultPrevented()) return
    -
    -    $parent.removeClass('in')
    -
    -    function removeElement() {
    -      $parent.trigger('closed.bs.alert').remove()
    -    }
    -
    -    $.support.transition && $parent.hasClass('fade') ?
    -      $parent
    -        .one($.support.transition.end, removeElement)
    -        .emulateTransitionEnd(150) :
    -      removeElement()
    -  }
    -
    -
    -  // ALERT PLUGIN DEFINITION
    -  // =======================
    -
    -  var old = $.fn.alert
    -
    -  $.fn.alert = function (option) {
    -    return this.each(function () {
    -      var $this = $(this)
    -      var data  = $this.data('bs.alert')
    -
    -      if (!data) $this.data('bs.alert', (data = new Alert(this)))
    -      if (typeof option == 'string') data[option].call($this)
    -    })
    -  }
    -
    -  $.fn.alert.Constructor = Alert
    -
    -
    -  // ALERT NO CONFLICT
    -  // =================
    -
    -  $.fn.alert.noConflict = function () {
    -    $.fn.alert = old
    -    return this
    -  }
    -
    -
    -  // ALERT DATA-API
    -  // ==============
    -
    -  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: button.js v3.0.3
    - * http://getbootstrap.com/javascript/#buttons
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // BUTTON PUBLIC CLASS DEFINITION
    -  // ==============================
    -
    -  var Button = function (element, options) {
    -    this.$element = $(element)
    -    this.options  = $.extend({}, Button.DEFAULTS, options)
    -  }
    -
    -  Button.DEFAULTS = {
    -    loadingText: 'loading...'
    -  }
    -
    -  Button.prototype.setState = function (state) {
    -    var d    = 'disabled'
    -    var $el  = this.$element
    -    var val  = $el.is('input') ? 'val' : 'html'
    -    var data = $el.data()
    -
    -    state = state + 'Text'
    -
    -    if (!data.resetText) $el.data('resetText', $el[val]())
    -
    -    $el[val](data[state] || this.options[state])
    -
    -    // push to event loop to allow forms to submit
    -    setTimeout(function () {
    -      state == 'loadingText' ?
    -        $el.addClass(d).attr(d, d) :
    -        $el.removeClass(d).removeAttr(d);
    -    }, 0)
    -  }
    -
    -  Button.prototype.toggle = function () {
    -    var $parent = this.$element.closest('[data-toggle="buttons"]')
    -    var changed = true
    -
    -    if ($parent.length) {
    -      var $input = this.$element.find('input')
    -      if ($input.prop('type') === 'radio') {
    -        // see if clicking on current one
    -        if ($input.prop('checked') && this.$element.hasClass('active'))
    -          changed = false
    -        else
    -          $parent.find('.active').removeClass('active')
    -      }
    -      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
    -    }
    -
    -    if (changed) this.$element.toggleClass('active')
    -  }
    -
    -
    -  // BUTTON PLUGIN DEFINITION
    -  // ========================
    -
    -  var old = $.fn.button
    -
    -  $.fn.button = function (option) {
    -    return this.each(function () {
    -      var $this   = $(this)
    -      var data    = $this.data('bs.button')
    -      var options = typeof option == 'object' && option
    -
    -      if (!data) $this.data('bs.button', (data = new Button(this, options)))
    -
    -      if (option == 'toggle') data.toggle()
    -      else if (option) data.setState(option)
    -    })
    -  }
    -
    -  $.fn.button.Constructor = Button
    -
    -
    -  // BUTTON NO CONFLICT
    -  // ==================
    -
    -  $.fn.button.noConflict = function () {
    -    $.fn.button = old
    -    return this
    -  }
    -
    -
    -  // BUTTON DATA-API
    -  // ===============
    -
    -  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
    -    var $btn = $(e.target)
    -    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
    -    $btn.button('toggle')
    -    e.preventDefault()
    -  })
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: carousel.js v3.0.3
    - * http://getbootstrap.com/javascript/#carousel
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // CAROUSEL CLASS DEFINITION
    -  // =========================
    -
    -  var Carousel = function (element, options) {
    -    this.$element    = $(element)
    -    this.$indicators = this.$element.find('.carousel-indicators')
    -    this.options     = options
    -    this.paused      =
    -    this.sliding     =
    -    this.interval    =
    -    this.$active     =
    -    this.$items      = null
    -
    -    this.options.pause == 'hover' && this.$element
    -      .on('mouseenter', $.proxy(this.pause, this))
    -      .on('mouseleave', $.proxy(this.cycle, this))
    -  }
    -
    -  Carousel.DEFAULTS = {
    -    interval: 5000
    -  , pause: 'hover'
    -  , wrap: true
    -  }
    -
    -  Carousel.prototype.cycle =  function (e) {
    -    e || (this.paused = false)
    -
    -    this.interval && clearInterval(this.interval)
    -
    -    this.options.interval
    -      && !this.paused
    -      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
    -
    -    return this
    -  }
    -
    -  Carousel.prototype.getActiveIndex = function () {
    -    this.$active = this.$element.find('.item.active')
    -    this.$items  = this.$active.parent().children()
    -
    -    return this.$items.index(this.$active)
    -  }
    -
    -  Carousel.prototype.to = function (pos) {
    -    var that        = this
    -    var activeIndex = this.getActiveIndex()
    -
    -    if (pos > (this.$items.length - 1) || pos < 0) return
    -
    -    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
    -    if (activeIndex == pos) return this.pause().cycle()
    -
    -    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
    -  }
    -
    -  Carousel.prototype.pause = function (e) {
    -    e || (this.paused = true)
    -
    -    if (this.$element.find('.next, .prev').length && $.support.transition.end) {
    -      this.$element.trigger($.support.transition.end)
    -      this.cycle(true)
    -    }
    -
    -    this.interval = clearInterval(this.interval)
    -
    -    return this
    -  }
    -
    -  Carousel.prototype.next = function () {
    -    if (this.sliding) return
    -    return this.slide('next')
    -  }
    -
    -  Carousel.prototype.prev = function () {
    -    if (this.sliding) return
    -    return this.slide('prev')
    -  }
    -
    -  Carousel.prototype.slide = function (type, next) {
    -    var $active   = this.$element.find('.item.active')
    -    var $next     = next || $active[type]()
    -    var isCycling = this.interval
    -    var direction = type == 'next' ? 'left' : 'right'
    -    var fallback  = type == 'next' ? 'first' : 'last'
    -    var that      = this
    -
    -    if (!$next.length) {
    -      if (!this.options.wrap) return
    -      $next = this.$element.find('.item')[fallback]()
    -    }
    -
    -    this.sliding = true
    -
    -    isCycling && this.pause()
    -
    -    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
    -
    -    if ($next.hasClass('active')) return
    -
    -    if (this.$indicators.length) {
    -      this.$indicators.find('.active').removeClass('active')
    -      this.$element.one('slid.bs.carousel', function () {
    -        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
    -        $nextIndicator && $nextIndicator.addClass('active')
    -      })
    -    }
    -
    -    if ($.support.transition && this.$element.hasClass('slide')) {
    -      this.$element.trigger(e)
    -      if (e.isDefaultPrevented()) return
    -      $next.addClass(type)
    -      $next[0].offsetWidth // force reflow
    -      $active.addClass(direction)
    -      $next.addClass(direction)
    -      $active
    -        .one($.support.transition.end, function () {
    -          $next.removeClass([type, direction].join(' ')).addClass('active')
    -          $active.removeClass(['active', direction].join(' '))
    -          that.sliding = false
    -          setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
    -        })
    -        .emulateTransitionEnd(600)
    -    } else {
    -      this.$element.trigger(e)
    -      if (e.isDefaultPrevented()) return
    -      $active.removeClass('active')
    -      $next.addClass('active')
    -      this.sliding = false
    -      this.$element.trigger('slid.bs.carousel')
    -    }
    -
    -    isCycling && this.cycle()
    -
    -    return this
    -  }
    -
    -
    -  // CAROUSEL PLUGIN DEFINITION
    -  // ==========================
    -
    -  var old = $.fn.carousel
    -
    -  $.fn.carousel = function (option) {
    -    return this.each(function () {
    -      var $this   = $(this)
    -      var data    = $this.data('bs.carousel')
    -      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
    -      var action  = typeof option == 'string' ? option : options.slide
    -
    -      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
    -      if (typeof option == 'number') data.to(option)
    -      else if (action) data[action]()
    -      else if (options.interval) data.pause().cycle()
    -    })
    -  }
    -
    -  $.fn.carousel.Constructor = Carousel
    -
    -
    -  // CAROUSEL NO CONFLICT
    -  // ====================
    -
    -  $.fn.carousel.noConflict = function () {
    -    $.fn.carousel = old
    -    return this
    -  }
    -
    -
    -  // CAROUSEL DATA-API
    -  // =================
    -
    -  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
    -    var $this   = $(this), href
    -    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
    -    var options = $.extend({}, $target.data(), $this.data())
    -    var slideIndex = $this.attr('data-slide-to')
    -    if (slideIndex) options.interval = false
    -
    -    $target.carousel(options)
    -
    -    if (slideIndex = $this.attr('data-slide-to')) {
    -      $target.data('bs.carousel').to(slideIndex)
    -    }
    -
    -    e.preventDefault()
    -  })
    -
    -  $(window).on('load', function () {
    -    $('[data-ride="carousel"]').each(function () {
    -      var $carousel = $(this)
    -      $carousel.carousel($carousel.data())
    -    })
    -  })
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: collapse.js v3.0.3
    - * http://getbootstrap.com/javascript/#collapse
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // COLLAPSE PUBLIC CLASS DEFINITION
    -  // ================================
    -
    -  var Collapse = function (element, options) {
    -    this.$element      = $(element)
    -    this.options       = $.extend({}, Collapse.DEFAULTS, options)
    -    this.transitioning = null
    -
    -    if (this.options.parent) this.$parent = $(this.options.parent)
    -    if (this.options.toggle) this.toggle()
    -  }
    -
    -  Collapse.DEFAULTS = {
    -    toggle: true
    -  }
    -
    -  Collapse.prototype.dimension = function () {
    -    var hasWidth = this.$element.hasClass('width')
    -    return hasWidth ? 'width' : 'height'
    -  }
    -
    -  Collapse.prototype.show = function () {
    -    if (this.transitioning || this.$element.hasClass('in')) return
    -
    -    var startEvent = $.Event('show.bs.collapse')
    -    this.$element.trigger(startEvent)
    -    if (startEvent.isDefaultPrevented()) return
    -
    -    var actives = this.$parent && this.$parent.find('> .panel > .in')
    -
    -    if (actives && actives.length) {
    -      var hasData = actives.data('bs.collapse')
    -      if (hasData && hasData.transitioning) return
    -      actives.collapse('hide')
    -      hasData || actives.data('bs.collapse', null)
    -    }
    -
    -    var dimension = this.dimension()
    -
    -    this.$element
    -      .removeClass('collapse')
    -      .addClass('collapsing')
    -      [dimension](0)
    -
    -    this.transitioning = 1
    -
    -    var complete = function () {
    -      this.$element
    -        .removeClass('collapsing')
    -        .addClass('in')
    -        [dimension]('auto')
    -      this.transitioning = 0
    -      this.$element.trigger('shown.bs.collapse')
    -    }
    -
    -    if (!$.support.transition) return complete.call(this)
    -
    -    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
    -
    -    this.$element
    -      .one($.support.transition.end, $.proxy(complete, this))
    -      .emulateTransitionEnd(350)
    -      [dimension](this.$element[0][scrollSize])
    -  }
    -
    -  Collapse.prototype.hide = function () {
    -    if (this.transitioning || !this.$element.hasClass('in')) return
    -
    -    var startEvent = $.Event('hide.bs.collapse')
    -    this.$element.trigger(startEvent)
    -    if (startEvent.isDefaultPrevented()) return
    -
    -    var dimension = this.dimension()
    -
    -    this.$element
    -      [dimension](this.$element[dimension]())
    -      [0].offsetHeight
    -
    -    this.$element
    -      .addClass('collapsing')
    -      .removeClass('collapse')
    -      .removeClass('in')
    -
    -    this.transitioning = 1
    -
    -    var complete = function () {
    -      this.transitioning = 0
    -      this.$element
    -        .trigger('hidden.bs.collapse')
    -        .removeClass('collapsing')
    -        .addClass('collapse')
    -    }
    -
    -    if (!$.support.transition) return complete.call(this)
    -
    -    this.$element
    -      [dimension](0)
    -      .one($.support.transition.end, $.proxy(complete, this))
    -      .emulateTransitionEnd(350)
    -  }
    -
    -  Collapse.prototype.toggle = function () {
    -    this[this.$element.hasClass('in') ? 'hide' : 'show']()
    -  }
    -
    -
    -  // COLLAPSE PLUGIN DEFINITION
    -  // ==========================
    -
    -  var old = $.fn.collapse
    -
    -  $.fn.collapse = function (option) {
    -    return this.each(function () {
    -      var $this   = $(this)
    -      var data    = $this.data('bs.collapse')
    -      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
    -
    -      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
    -      if (typeof option == 'string') data[option]()
    -    })
    -  }
    -
    -  $.fn.collapse.Constructor = Collapse
    -
    -
    -  // COLLAPSE NO CONFLICT
    -  // ====================
    -
    -  $.fn.collapse.noConflict = function () {
    -    $.fn.collapse = old
    -    return this
    -  }
    -
    -
    -  // COLLAPSE DATA-API
    -  // =================
    -
    -  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
    -    var $this   = $(this), href
    -    var target  = $this.attr('data-target')
    -        || e.preventDefault()
    -        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
    -    var $target = $(target)
    -    var data    = $target.data('bs.collapse')
    -    var option  = data ? 'toggle' : $this.data()
    -    var parent  = $this.attr('data-parent')
    -    var $parent = parent && $(parent)
    -
    -    if (!data || !data.transitioning) {
    -      if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
    -      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
    -    }
    -
    -    $target.collapse(option)
    -  })
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: dropdown.js v3.0.3
    - * http://getbootstrap.com/javascript/#dropdowns
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // DROPDOWN CLASS DEFINITION
    -  // =========================
    -
    -  var backdrop = '.dropdown-backdrop'
    -  var toggle   = '[data-toggle=dropdown]'
    -  var Dropdown = function (element) {
    -    $(element).on('click.bs.dropdown', this.toggle)
    -  }
    -
    -  Dropdown.prototype.toggle = function (e) {
    -    var $this = $(this)
    -
    -    if ($this.is('.disabled, :disabled')) return
    -
    -    var $parent  = getParent($this)
    -    var isActive = $parent.hasClass('open')
    -
    -    clearMenus()
    -
    -    if (!isActive) {
    -      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
    -        // if mobile we use a backdrop because click events don't delegate
    -        $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
    -      }
    -
    -      $parent.trigger(e = $.Event('show.bs.dropdown'))
    -
    -      if (e.isDefaultPrevented()) return
    -
    -      $parent
    -        .toggleClass('open')
    -        .trigger('shown.bs.dropdown')
    -
    -      $this.focus()
    -    }
    -
    -    return false
    -  }
    -
    -  Dropdown.prototype.keydown = function (e) {
    -    if (!/(38|40|27)/.test(e.keyCode)) return
    -
    -    var $this = $(this)
    -
    -    e.preventDefault()
    -    e.stopPropagation()
    -
    -    if ($this.is('.disabled, :disabled')) return
    -
    -    var $parent  = getParent($this)
    -    var isActive = $parent.hasClass('open')
    -
    -    if (!isActive || (isActive && e.keyCode == 27)) {
    -      if (e.which == 27) $parent.find(toggle).focus()
    -      return $this.click()
    -    }
    -
    -    var $items = $('[role=menu] li:not(.divider):visible a', $parent)
    -
    -    if (!$items.length) return
    -
    -    var index = $items.index($items.filter(':focus'))
    -
    -    if (e.keyCode == 38 && index > 0)                 index--                        // up
    -    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
    -    if (!~index)                                      index=0
    -
    -    $items.eq(index).focus()
    -  }
    -
    -  function clearMenus() {
    -    $(backdrop).remove()
    -    $(toggle).each(function (e) {
    -      var $parent = getParent($(this))
    -      if (!$parent.hasClass('open')) return
    -      $parent.trigger(e = $.Event('hide.bs.dropdown'))
    -      if (e.isDefaultPrevented()) return
    -      $parent.removeClass('open').trigger('hidden.bs.dropdown')
    -    })
    -  }
    -
    -  function getParent($this) {
    -    var selector = $this.attr('data-target')
    -
    -    if (!selector) {
    -      selector = $this.attr('href')
    -      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
    -    }
    -
    -    var $parent = selector && $(selector)
    -
    -    return $parent && $parent.length ? $parent : $this.parent()
    -  }
    -
    -
    -  // DROPDOWN PLUGIN DEFINITION
    -  // ==========================
    -
    -  var old = $.fn.dropdown
    -
    -  $.fn.dropdown = function (option) {
    -    return this.each(function () {
    -      var $this = $(this)
    -      var data  = $this.data('bs.dropdown')
    -
    -      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
    -      if (typeof option == 'string') data[option].call($this)
    -    })
    -  }
    -
    -  $.fn.dropdown.Constructor = Dropdown
    -
    -
    -  // DROPDOWN NO CONFLICT
    -  // ====================
    -
    -  $.fn.dropdown.noConflict = function () {
    -    $.fn.dropdown = old
    -    return this
    -  }
    -
    -
    -  // APPLY TO STANDARD DROPDOWN ELEMENTS
    -  // ===================================
    -
    -  $(document)
    -    .on('click.bs.dropdown.data-api', clearMenus)
    -    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
    -    .on('click.bs.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)
    -    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: modal.js v3.0.3
    - * http://getbootstrap.com/javascript/#modals
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // MODAL CLASS DEFINITION
    -  // ======================
    -
    -  var Modal = function (element, options) {
    -    this.options   = options
    -    this.$element  = $(element)
    -    this.$backdrop =
    -    this.isShown   = null
    -
    -    if (this.options.remote) this.$element.load(this.options.remote)
    -  }
    -
    -  Modal.DEFAULTS = {
    -      backdrop: true
    -    , keyboard: true
    -    , show: true
    -  }
    -
    -  Modal.prototype.toggle = function (_relatedTarget) {
    -    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
    -  }
    -
    -  Modal.prototype.show = function (_relatedTarget) {
    -    var that = this
    -    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
    -
    -    this.$element.trigger(e)
    -
    -    if (this.isShown || e.isDefaultPrevented()) return
    -
    -    this.isShown = true
    -
    -    this.escape()
    -
    -    this.$element.on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
    -
    -    this.backdrop(function () {
    -      var transition = $.support.transition && that.$element.hasClass('fade')
    -
    -      if (!that.$element.parent().length) {
    -        that.$element.appendTo(document.body) // don't move modals dom position
    -      }
    -
    -      that.$element.show()
    -
    -      if (transition) {
    -        that.$element[0].offsetWidth // force reflow
    -      }
    -
    -      that.$element
    -        .addClass('in')
    -        .attr('aria-hidden', false)
    -
    -      that.enforceFocus()
    -
    -      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
    -
    -      transition ?
    -        that.$element.find('.modal-dialog') // wait for modal to slide in
    -          .one($.support.transition.end, function () {
    -            that.$element.focus().trigger(e)
    -          })
    -          .emulateTransitionEnd(300) :
    -        that.$element.focus().trigger(e)
    -    })
    -  }
    -
    -  Modal.prototype.hide = function (e) {
    -    if (e) e.preventDefault()
    -
    -    e = $.Event('hide.bs.modal')
    -
    -    this.$element.trigger(e)
    -
    -    if (!this.isShown || e.isDefaultPrevented()) return
    -
    -    this.isShown = false
    -
    -    this.escape()
    -
    -    $(document).off('focusin.bs.modal')
    -
    -    this.$element
    -      .removeClass('in')
    -      .attr('aria-hidden', true)
    -      .off('click.dismiss.modal')
    -
    -    $.support.transition && this.$element.hasClass('fade') ?
    -      this.$element
    -        .one($.support.transition.end, $.proxy(this.hideModal, this))
    -        .emulateTransitionEnd(300) :
    -      this.hideModal()
    -  }
    -
    -  Modal.prototype.enforceFocus = function () {
    -    $(document)
    -      .off('focusin.bs.modal') // guard against infinite focus loop
    -      .on('focusin.bs.modal', $.proxy(function (e) {
    -        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
    -          this.$element.focus()
    -        }
    -      }, this))
    -  }
    -
    -  Modal.prototype.escape = function () {
    -    if (this.isShown && this.options.keyboard) {
    -      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
    -        e.which == 27 && this.hide()
    -      }, this))
    -    } else if (!this.isShown) {
    -      this.$element.off('keyup.dismiss.bs.modal')
    -    }
    -  }
    -
    -  Modal.prototype.hideModal = function () {
    -    var that = this
    -    this.$element.hide()
    -    this.backdrop(function () {
    -      that.removeBackdrop()
    -      that.$element.trigger('hidden.bs.modal')
    -    })
    -  }
    -
    -  Modal.prototype.removeBackdrop = function () {
    -    this.$backdrop && this.$backdrop.remove()
    -    this.$backdrop = null
    -  }
    -
    -  Modal.prototype.backdrop = function (callback) {
    -    var that    = this
    -    var animate = this.$element.hasClass('fade') ? 'fade' : ''
    -
    -    if (this.isShown && this.options.backdrop) {
    -      var doAnimate = $.support.transition && animate
    -
    -      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
    -        .appendTo(document.body)
    -
    -      this.$element.on('click.dismiss.modal', $.proxy(function (e) {
    -        if (e.target !== e.currentTarget) return
    -        this.options.backdrop == 'static'
    -          ? this.$element[0].focus.call(this.$element[0])
    -          : this.hide.call(this)
    -      }, this))
    -
    -      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
    -
    -      this.$backdrop.addClass('in')
    -
    -      if (!callback) return
    -
    -      doAnimate ?
    -        this.$backdrop
    -          .one($.support.transition.end, callback)
    -          .emulateTransitionEnd(150) :
    -        callback()
    -
    -    } else if (!this.isShown && this.$backdrop) {
    -      this.$backdrop.removeClass('in')
    -
    -      $.support.transition && this.$element.hasClass('fade')?
    -        this.$backdrop
    -          .one($.support.transition.end, callback)
    -          .emulateTransitionEnd(150) :
    -        callback()
    -
    -    } else if (callback) {
    -      callback()
    -    }
    -  }
    -
    -
    -  // MODAL PLUGIN DEFINITION
    -  // =======================
    -
    -  var old = $.fn.modal
    -
    -  $.fn.modal = function (option, _relatedTarget) {
    -    return this.each(function () {
    -      var $this   = $(this)
    -      var data    = $this.data('bs.modal')
    -      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
    -
    -      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
    -      if (typeof option == 'string') data[option](_relatedTarget)
    -      else if (options.show) data.show(_relatedTarget)
    -    })
    -  }
    -
    -  $.fn.modal.Constructor = Modal
    -
    -
    -  // MODAL NO CONFLICT
    -  // =================
    -
    -  $.fn.modal.noConflict = function () {
    -    $.fn.modal = old
    -    return this
    -  }
    -
    -
    -  // MODAL DATA-API
    -  // ==============
    -
    -  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
    -    var $this   = $(this)
    -    var href    = $this.attr('href')
    -    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
    -    var option  = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
    -
    -    e.preventDefault()
    -
    -    $target
    -      .modal(option, this)
    -      .one('hide', function () {
    -        $this.is(':visible') && $this.focus()
    -      })
    -  })
    -
    -  $(document)
    -    .on('show.bs.modal',  '.modal', function () { $(document.body).addClass('modal-open') })
    -    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: tooltip.js v3.0.3
    - * http://getbootstrap.com/javascript/#tooltip
    - * Inspired by the original jQuery.tipsy by Jason Frame
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // TOOLTIP PUBLIC CLASS DEFINITION
    -  // ===============================
    -
    -  var Tooltip = function (element, options) {
    -    this.type       =
    -    this.options    =
    -    this.enabled    =
    -    this.timeout    =
    -    this.hoverState =
    -    this.$element   = null
    -
    -    this.init('tooltip', element, options)
    -  }
    -
    -  Tooltip.DEFAULTS = {
    -    animation: true
    -  , placement: 'top'
    -  , selector: false
    -  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
    -  , trigger: 'hover focus'
    -  , title: ''
    -  , delay: 0
    -  , html: false
    -  , container: false
    -  }
    -
    -  Tooltip.prototype.init = function (type, element, options) {
    -    this.enabled  = true
    -    this.type     = type
    -    this.$element = $(element)
    -    this.options  = this.getOptions(options)
    -
    -    var triggers = this.options.trigger.split(' ')
    -
    -    for (var i = triggers.length; i--;) {
    -      var trigger = triggers[i]
    -
    -      if (trigger == 'click') {
    -        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
    -      } else if (trigger != 'manual') {
    -        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focus'
    -        var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
    -
    -        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
    -        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
    -      }
    -    }
    -
    -    this.options.selector ?
    -      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
    -      this.fixTitle()
    -  }
    -
    -  Tooltip.prototype.getDefaults = function () {
    -    return Tooltip.DEFAULTS
    -  }
    -
    -  Tooltip.prototype.getOptions = function (options) {
    -    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
    -
    -    if (options.delay && typeof options.delay == 'number') {
    -      options.delay = {
    -        show: options.delay
    -      , hide: options.delay
    -      }
    -    }
    -
    -    return options
    -  }
    -
    -  Tooltip.prototype.getDelegateOptions = function () {
    -    var options  = {}
    -    var defaults = this.getDefaults()
    -
    -    this._options && $.each(this._options, function (key, value) {
    -      if (defaults[key] != value) options[key] = value
    -    })
    -
    -    return options
    -  }
    -
    -  Tooltip.prototype.enter = function (obj) {
    -    var self = obj instanceof this.constructor ?
    -      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
    -
    -    clearTimeout(self.timeout)
    -
    -    self.hoverState = 'in'
    -
    -    if (!self.options.delay || !self.options.delay.show) return self.show()
    -
    -    self.timeout = setTimeout(function () {
    -      if (self.hoverState == 'in') self.show()
    -    }, self.options.delay.show)
    -  }
    -
    -  Tooltip.prototype.leave = function (obj) {
    -    var self = obj instanceof this.constructor ?
    -      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
    -
    -    clearTimeout(self.timeout)
    -
    -    self.hoverState = 'out'
    -
    -    if (!self.options.delay || !self.options.delay.hide) return self.hide()
    -
    -    self.timeout = setTimeout(function () {
    -      if (self.hoverState == 'out') self.hide()
    -    }, self.options.delay.hide)
    -  }
    -
    -  Tooltip.prototype.show = function () {
    -    var e = $.Event('show.bs.'+ this.type)
    -
    -    if (this.hasContent() && this.enabled) {
    -      this.$element.trigger(e)
    -
    -      if (e.isDefaultPrevented()) return
    -
    -      var $tip = this.tip()
    -
    -      this.setContent()
    -
    -      if (this.options.animation) $tip.addClass('fade')
    -
    -      var placement = typeof this.options.placement == 'function' ?
    -        this.options.placement.call(this, $tip[0], this.$element[0]) :
    -        this.options.placement
    -
    -      var autoToken = /\s?auto?\s?/i
    -      var autoPlace = autoToken.test(placement)
    -      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
    -
    -      $tip
    -        .detach()
    -        .css({ top: 0, left: 0, display: 'block' })
    -        .addClass(placement)
    -
    -      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
    -
    -      var pos          = this.getPosition()
    -      var actualWidth  = $tip[0].offsetWidth
    -      var actualHeight = $tip[0].offsetHeight
    -
    -      if (autoPlace) {
    -        var $parent = this.$element.parent()
    -
    -        var orgPlacement = placement
    -        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop
    -        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()
    -        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
    -        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left
    -
    -        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :
    -                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :
    -                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :
    -                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :
    -                    placement
    -
    -        $tip
    -          .removeClass(orgPlacement)
    -          .addClass(placement)
    -      }
    -
    -      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
    -
    -      this.applyPlacement(calculatedOffset, placement)
    -      this.$element.trigger('shown.bs.' + this.type)
    -    }
    -  }
    -
    -  Tooltip.prototype.applyPlacement = function(offset, placement) {
    -    var replace
    -    var $tip   = this.tip()
    -    var width  = $tip[0].offsetWidth
    -    var height = $tip[0].offsetHeight
    -
    -    // manually read margins because getBoundingClientRect includes difference
    -    var marginTop = parseInt($tip.css('margin-top'), 10)
    -    var marginLeft = parseInt($tip.css('margin-left'), 10)
    -
    -    // we must check for NaN for ie 8/9
    -    if (isNaN(marginTop))  marginTop  = 0
    -    if (isNaN(marginLeft)) marginLeft = 0
    -
    -    offset.top  = offset.top  + marginTop
    -    offset.left = offset.left + marginLeft
    -
    -    $tip
    -      .offset(offset)
    -      .addClass('in')
    -
    -    // check to see if placing tip in new offset caused the tip to resize itself
    -    var actualWidth  = $tip[0].offsetWidth
    -    var actualHeight = $tip[0].offsetHeight
    -
    -    if (placement == 'top' && actualHeight != height) {
    -      replace = true
    -      offset.top = offset.top + height - actualHeight
    -    }
    -
    -    if (/bottom|top/.test(placement)) {
    -      var delta = 0
    -
    -      if (offset.left < 0) {
    -        delta       = offset.left * -2
    -        offset.left = 0
    -
    -        $tip.offset(offset)
    -
    -        actualWidth  = $tip[0].offsetWidth
    -        actualHeight = $tip[0].offsetHeight
    -      }
    -
    -      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
    -    } else {
    -      this.replaceArrow(actualHeight - height, actualHeight, 'top')
    -    }
    -
    -    if (replace) $tip.offset(offset)
    -  }
    -
    -  Tooltip.prototype.replaceArrow = function(delta, dimension, position) {
    -    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
    -  }
    -
    -  Tooltip.prototype.setContent = function () {
    -    var $tip  = this.tip()
    -    var title = this.getTitle()
    -
    -    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
    -    $tip.removeClass('fade in top bottom left right')
    -  }
    -
    -  Tooltip.prototype.hide = function () {
    -    var that = this
    -    var $tip = this.tip()
    -    var e    = $.Event('hide.bs.' + this.type)
    -
    -    function complete() {
    -      if (that.hoverState != 'in') $tip.detach()
    -    }
    -
    -    this.$element.trigger(e)
    -
    -    if (e.isDefaultPrevented()) return
    -
    -    $tip.removeClass('in')
    -
    -    $.support.transition && this.$tip.hasClass('fade') ?
    -      $tip
    -        .one($.support.transition.end, complete)
    -        .emulateTransitionEnd(150) :
    -      complete()
    -
    -    this.$element.trigger('hidden.bs.' + this.type)
    -
    -    return this
    -  }
    -
    -  Tooltip.prototype.fixTitle = function () {
    -    var $e = this.$element
    -    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
    -      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
    -    }
    -  }
    -
    -  Tooltip.prototype.hasContent = function () {
    -    return this.getTitle()
    -  }
    -
    -  Tooltip.prototype.getPosition = function () {
    -    var el = this.$element[0]
    -    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
    -      width: el.offsetWidth
    -    , height: el.offsetHeight
    -    }, this.$element.offset())
    -  }
    -
    -  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
    -    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :
    -           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :
    -           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
    -        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }
    -  }
    -
    -  Tooltip.prototype.getTitle = function () {
    -    var title
    -    var $e = this.$element
    -    var o  = this.options
    -
    -    title = $e.attr('data-original-title')
    -      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
    -
    -    return title
    -  }
    -
    -  Tooltip.prototype.tip = function () {
    -    return this.$tip = this.$tip || $(this.options.template)
    -  }
    -
    -  Tooltip.prototype.arrow = function () {
    -    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
    -  }
    -
    -  Tooltip.prototype.validate = function () {
    -    if (!this.$element[0].parentNode) {
    -      this.hide()
    -      this.$element = null
    -      this.options  = null
    -    }
    -  }
    -
    -  Tooltip.prototype.enable = function () {
    -    this.enabled = true
    -  }
    -
    -  Tooltip.prototype.disable = function () {
    -    this.enabled = false
    -  }
    -
    -  Tooltip.prototype.toggleEnabled = function () {
    -    this.enabled = !this.enabled
    -  }
    -
    -  Tooltip.prototype.toggle = function (e) {
    -    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
    -    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
    -  }
    -
    -  Tooltip.prototype.destroy = function () {
    -    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
    -  }
    -
    -
    -  // TOOLTIP PLUGIN DEFINITION
    -  // =========================
    -
    -  var old = $.fn.tooltip
    -
    -  $.fn.tooltip = function (option) {
    -    return this.each(function () {
    -      var $this   = $(this)
    -      var data    = $this.data('bs.tooltip')
    -      var options = typeof option == 'object' && option
    -
    -      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
    -      if (typeof option == 'string') data[option]()
    -    })
    -  }
    -
    -  $.fn.tooltip.Constructor = Tooltip
    -
    -
    -  // TOOLTIP NO CONFLICT
    -  // ===================
    -
    -  $.fn.tooltip.noConflict = function () {
    -    $.fn.tooltip = old
    -    return this
    -  }
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: popover.js v3.0.3
    - * http://getbootstrap.com/javascript/#popovers
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // POPOVER PUBLIC CLASS DEFINITION
    -  // ===============================
    -
    -  var Popover = function (element, options) {
    -    this.init('popover', element, options)
    -  }
    -
    -  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
    -
    -  Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {
    -    placement: 'right'
    -  , trigger: 'click'
    -  , content: ''
    -  , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
    -  })
    -
    -
    -  // NOTE: POPOVER EXTENDS tooltip.js
    -  // ================================
    -
    -  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
    -
    -  Popover.prototype.constructor = Popover
    -
    -  Popover.prototype.getDefaults = function () {
    -    return Popover.DEFAULTS
    -  }
    -
    -  Popover.prototype.setContent = function () {
    -    var $tip    = this.tip()
    -    var title   = this.getTitle()
    -    var content = this.getContent()
    -
    -    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
    -    $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
    -
    -    $tip.removeClass('fade top bottom left right in')
    -
    -    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
    -    // this manually by checking the contents.
    -    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
    -  }
    -
    -  Popover.prototype.hasContent = function () {
    -    return this.getTitle() || this.getContent()
    -  }
    -
    -  Popover.prototype.getContent = function () {
    -    var $e = this.$element
    -    var o  = this.options
    -
    -    return $e.attr('data-content')
    -      || (typeof o.content == 'function' ?
    -            o.content.call($e[0]) :
    -            o.content)
    -  }
    -
    -  Popover.prototype.arrow = function () {
    -    return this.$arrow = this.$arrow || this.tip().find('.arrow')
    -  }
    -
    -  Popover.prototype.tip = function () {
    -    if (!this.$tip) this.$tip = $(this.options.template)
    -    return this.$tip
    -  }
    -
    -
    -  // POPOVER PLUGIN DEFINITION
    -  // =========================
    -
    -  var old = $.fn.popover
    -
    -  $.fn.popover = function (option) {
    -    return this.each(function () {
    -      var $this   = $(this)
    -      var data    = $this.data('bs.popover')
    -      var options = typeof option == 'object' && option
    -
    -      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
    -      if (typeof option == 'string') data[option]()
    -    })
    -  }
    -
    -  $.fn.popover.Constructor = Popover
    -
    -
    -  // POPOVER NO CONFLICT
    -  // ===================
    -
    -  $.fn.popover.noConflict = function () {
    -    $.fn.popover = old
    -    return this
    -  }
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: scrollspy.js v3.0.3
    - * http://getbootstrap.com/javascript/#scrollspy
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // SCROLLSPY CLASS DEFINITION
    -  // ==========================
    -
    -  function ScrollSpy(element, options) {
    -    var href
    -    var process  = $.proxy(this.process, this)
    -
    -    this.$element       = $(element).is('body') ? $(window) : $(element)
    -    this.$body          = $('body')
    -    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
    -    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
    -    this.selector       = (this.options.target
    -      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
    -      || '') + ' .nav li > a'
    -    this.offsets        = $([])
    -    this.targets        = $([])
    -    this.activeTarget   = null
    -
    -    this.refresh()
    -    this.process()
    -  }
    -
    -  ScrollSpy.DEFAULTS = {
    -    offset: 10
    -  }
    -
    -  ScrollSpy.prototype.refresh = function () {
    -    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
    -
    -    this.offsets = $([])
    -    this.targets = $([])
    -
    -    var self     = this
    -    var $targets = this.$body
    -      .find(this.selector)
    -      .map(function () {
    -        var $el   = $(this)
    -        var href  = $el.data('target') || $el.attr('href')
    -        var $href = /^#\w/.test(href) && $(href)
    -
    -        return ($href
    -          && $href.length
    -          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
    -      })
    -      .sort(function (a, b) { return a[0] - b[0] })
    -      .each(function () {
    -        self.offsets.push(this[0])
    -        self.targets.push(this[1])
    -      })
    -  }
    -
    -  ScrollSpy.prototype.process = function () {
    -    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
    -    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
    -    var maxScroll    = scrollHeight - this.$scrollElement.height()
    -    var offsets      = this.offsets
    -    var targets      = this.targets
    -    var activeTarget = this.activeTarget
    -    var i
    -
    -    if (scrollTop >= maxScroll) {
    -      return activeTarget != (i = targets.last()[0]) && this.activate(i)
    -    }
    -
    -    for (i = offsets.length; i--;) {
    -      activeTarget != targets[i]
    -        && scrollTop >= offsets[i]
    -        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
    -        && this.activate( targets[i] )
    -    }
    -  }
    -
    -  ScrollSpy.prototype.activate = function (target) {
    -    this.activeTarget = target
    -
    -    $(this.selector)
    -      .parents('.active')
    -      .removeClass('active')
    -
    -    var selector = this.selector
    -      + '[data-target="' + target + '"],'
    -      + this.selector + '[href="' + target + '"]'
    -
    -    var active = $(selector)
    -      .parents('li')
    -      .addClass('active')
    -
    -    if (active.parent('.dropdown-menu').length)  {
    -      active = active
    -        .closest('li.dropdown')
    -        .addClass('active')
    -    }
    -
    -    active.trigger('activate.bs.scrollspy')
    -  }
    -
    -
    -  // SCROLLSPY PLUGIN DEFINITION
    -  // ===========================
    -
    -  var old = $.fn.scrollspy
    -
    -  $.fn.scrollspy = function (option) {
    -    return this.each(function () {
    -      var $this   = $(this)
    -      var data    = $this.data('bs.scrollspy')
    -      var options = typeof option == 'object' && option
    -
    -      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
    -      if (typeof option == 'string') data[option]()
    -    })
    -  }
    -
    -  $.fn.scrollspy.Constructor = ScrollSpy
    -
    -
    -  // SCROLLSPY NO CONFLICT
    -  // =====================
    -
    -  $.fn.scrollspy.noConflict = function () {
    -    $.fn.scrollspy = old
    -    return this
    -  }
    -
    -
    -  // SCROLLSPY DATA-API
    -  // ==================
    -
    -  $(window).on('load', function () {
    -    $('[data-spy="scroll"]').each(function () {
    -      var $spy = $(this)
    -      $spy.scrollspy($spy.data())
    -    })
    -  })
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: tab.js v3.0.3
    - * http://getbootstrap.com/javascript/#tabs
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // TAB CLASS DEFINITION
    -  // ====================
    -
    -  var Tab = function (element) {
    -    this.element = $(element)
    -  }
    -
    -  Tab.prototype.show = function () {
    -    var $this    = this.element
    -    var $ul      = $this.closest('ul:not(.dropdown-menu)')
    -    var selector = $this.data('target')
    -
    -    if (!selector) {
    -      selector = $this.attr('href')
    -      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
    -    }
    -
    -    if ($this.parent('li').hasClass('active')) return
    -
    -    var previous = $ul.find('.active:last a')[0]
    -    var e        = $.Event('show.bs.tab', {
    -      relatedTarget: previous
    -    })
    -
    -    $this.trigger(e)
    -
    -    if (e.isDefaultPrevented()) return
    -
    -    var $target = $(selector)
    -
    -    this.activate($this.parent('li'), $ul)
    -    this.activate($target, $target.parent(), function () {
    -      $this.trigger({
    -        type: 'shown.bs.tab'
    -      , relatedTarget: previous
    -      })
    -    })
    -  }
    -
    -  Tab.prototype.activate = function (element, container, callback) {
    -    var $active    = container.find('> .active')
    -    var transition = callback
    -      && $.support.transition
    -      && $active.hasClass('fade')
    -
    -    function next() {
    -      $active
    -        .removeClass('active')
    -        .find('> .dropdown-menu > .active')
    -        .removeClass('active')
    -
    -      element.addClass('active')
    -
    -      if (transition) {
    -        element[0].offsetWidth // reflow for transition
    -        element.addClass('in')
    -      } else {
    -        element.removeClass('fade')
    -      }
    -
    -      if (element.parent('.dropdown-menu')) {
    -        element.closest('li.dropdown').addClass('active')
    -      }
    -
    -      callback && callback()
    -    }
    -
    -    transition ?
    -      $active
    -        .one($.support.transition.end, next)
    -        .emulateTransitionEnd(150) :
    -      next()
    -
    -    $active.removeClass('in')
    -  }
    -
    -
    -  // TAB PLUGIN DEFINITION
    -  // =====================
    -
    -  var old = $.fn.tab
    -
    -  $.fn.tab = function ( option ) {
    -    return this.each(function () {
    -      var $this = $(this)
    -      var data  = $this.data('bs.tab')
    -
    -      if (!data) $this.data('bs.tab', (data = new Tab(this)))
    -      if (typeof option == 'string') data[option]()
    -    })
    -  }
    -
    -  $.fn.tab.Constructor = Tab
    -
    -
    -  // TAB NO CONFLICT
    -  // ===============
    -
    -  $.fn.tab.noConflict = function () {
    -    $.fn.tab = old
    -    return this
    -  }
    -
    -
    -  // TAB DATA-API
    -  // ============
    -
    -  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
    -    e.preventDefault()
    -    $(this).tab('show')
    -  })
    -
    -}(jQuery);
    -
    -/* ========================================================================
    - * Bootstrap: affix.js v3.0.3
    - * http://getbootstrap.com/javascript/#affix
    - * ========================================================================
    - * Copyright 2013 Twitter, Inc.
    - *
    - * Licensed under the Apache License, Version 2.0 (the "License");
    - * you may not use this file except in compliance with the License.
    - * You may obtain a copy of the License at
    - *
    - * http://www.apache.org/licenses/LICENSE-2.0
    - *
    - * Unless required by applicable law or agreed to in writing, software
    - * distributed under the License is distributed on an "AS IS" BASIS,
    - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    - * See the License for the specific language governing permissions and
    - * limitations under the License.
    - * ======================================================================== */
    -
    -
    -+function ($) { "use strict";
    -
    -  // AFFIX CLASS DEFINITION
    -  // ======================
    -
    -  var Affix = function (element, options) {
    -    this.options = $.extend({}, Affix.DEFAULTS, options)
    -    this.$window = $(window)
    -      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
    -      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
    -
    -    this.$element = $(element)
    -    this.affixed  =
    -    this.unpin    = null
    -
    -    this.checkPosition()
    -  }
    -
    -  Affix.RESET = 'affix affix-top affix-bottom'
    -
    -  Affix.DEFAULTS = {
    -    offset: 0
    -  }
    -
    -  Affix.prototype.checkPositionWithEventLoop = function () {
    -    setTimeout($.proxy(this.checkPosition, this), 1)
    -  }
    -
    -  Affix.prototype.checkPosition = function () {
    -    if (!this.$element.is(':visible')) return
    -
    -    var scrollHeight = $(document).height()
    -    var scrollTop    = this.$window.scrollTop()
    -    var position     = this.$element.offset()
    -    var offset       = this.options.offset
    -    var offsetTop    = offset.top
    -    var offsetBottom = offset.bottom
    -
    -    if (typeof offset != 'object')         offsetBottom = offsetTop = offset
    -    if (typeof offsetTop == 'function')    offsetTop    = offset.top()
    -    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
    -
    -    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :
    -                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
    -                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false
    -
    -    if (this.affixed === affix) return
    -    if (this.unpin) this.$element.css('top', '')
    -
    -    this.affixed = affix
    -    this.unpin   = affix == 'bottom' ? position.top - scrollTop : null
    -
    -    this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))
    -
    -    if (affix == 'bottom') {
    -      this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })
    -    }
    -  }
    -
    -
    -  // AFFIX PLUGIN DEFINITION
    -  // =======================
    -
    -  var old = $.fn.affix
    -
    -  $.fn.affix = function (option) {
    -    return this.each(function () {
    -      var $this   = $(this)
    -      var data    = $this.data('bs.affix')
    -      var options = typeof option == 'object' && option
    -
    -      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
    -      if (typeof option == 'string') data[option]()
    -    })
    -  }
    -
    -  $.fn.affix.Constructor = Affix
    -
    -
    -  // AFFIX NO CONFLICT
    -  // =================
    -
    -  $.fn.affix.noConflict = function () {
    -    $.fn.affix = old
    -    return this
    -  }
    -
    -
    -  // AFFIX DATA-API
    -  // ==============
    -
    -  $(window).on('load', function () {
    -    $('[data-spy="affix"]').each(function () {
    -      var $spy = $(this)
    -      var data = $spy.data()
    -
    -      data.offset = data.offset || {}
    -
    -      if (data.offsetBottom) data.offset.bottom = data.offsetBottom
    -      if (data.offsetTop)    data.offset.top    = data.offsetTop
    -
    -      $spy.affix(data)
    -    })
    -  })
    -
    -}(jQuery);
    diff --git a/js/bootstrap.min.js b/js/bootstrap.min.js
    index 1a6258e..b04a0e8 100644
    --- a/js/bootstrap.min.js
    +++ b/js/bootstrap.min.js
    @@ -1,7 +1,6 @@
     /*!
    - * Bootstrap v3.0.3 (http://getbootstrap.com)
    - * Copyright 2013 Twitter, Inc.
    - * Licensed under http://www.apache.org/licenses/LICENSE-2.0
    + * Bootstrap v3.1.1 (http://getbootstrap.com)
    + * Copyright 2011-2014 Twitter, Inc.
    + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
      */
    -
    -if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]'),b=!0;if(a.length){var c=this.$element.find("input");"radio"===c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?b=!1:a.find(".active").removeClass("active")),b&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}b&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show(),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show),void 0):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide),void 0):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
    \ No newline at end of file
    +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown",h),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=" li:not(.divider):visible a",i=f.find("[role=menu]"+h+", [role=listbox]"+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu], [role=listbox]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e="function"==typeof this.options.placement?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n="body"==this.options.container?window.innerWidth:k.outerWidth(),o="body"==this.options.container?window.innerHeight:k.outerHeight(),p="body"==this.options.container?0:k.offset().left;e="bottom"==e&&h.top+h.height+j-m>o?"top":"top"==e&&h.top-m-j<0?"bottom":"right"==e&&h.right+i>n?"left":"left"==e&&h.left-i<p?"right":e,d.removeClass(l).addClass(e)}var q=this.getCalculatedOffset(e,h,i,j);this.applyPlacement(q,e),this.hoverState=null;var r=function(){c.$element.trigger("shown.bs."+c.type)};a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,r).emulateTransitionEnd(150):r()}},b.prototype.applyPlacement=function(b,c){var d,e=this.tip(),f=e[0].offsetWidth,g=e[0].offsetHeight,h=parseInt(e.css("margin-top"),10),i=parseInt(e.css("margin-left"),10);isNaN(h)&&(h=0),isNaN(i)&&(i=0),b.top=b.top+h,b.left=b.left+i,a.offset.setOffset(e[0],a.extend({using:function(a){e.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),e.addClass("in");var j=e[0].offsetWidth,k=e[0].offsetHeight;if("top"==c&&k!=g&&(d=!0,b.top=b.top+g-k),/bottom|top/.test(c)){var l=0;b.left<0&&(l=-2*b.left,b.left=0,e.offset(b),j=e[0].offsetWidth,k=e[0].offsetHeight),this.replaceArrow(l-f+j,j,"left")}else this.replaceArrow(k-g,k,"top");d&&e.offset(b)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
    \ No newline at end of file
    diff --git a/js/html5shiv.min.js b/js/html5shiv.min.js
    new file mode 100644
    index 0000000..d4c731a
    --- /dev/null
    +++ b/js/html5shiv.min.js
    @@ -0,0 +1,4 @@
    +/**
    +* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
    +*/
    +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
    \ No newline at end of file
    diff --git a/js/jquery-1.11.2.min.js b/js/jquery-1.11.2.min.js
    new file mode 100644
    index 0000000..e6a051d
    --- /dev/null
    +++ b/js/jquery-1.11.2.min.js
    @@ -0,0 +1,4 @@
    +/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
    +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
    +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)
    +}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
    diff --git a/js/jquery.js b/js/jquery.js
    deleted file mode 100644
    index c5c6482..0000000
    --- a/js/jquery.js
    +++ /dev/null
    @@ -1,9789 +0,0 @@
    -/*!
    - * jQuery JavaScript Library v1.10.2
    - * http://jquery.com/
    - *
    - * Includes Sizzle.js
    - * http://sizzlejs.com/
    - *
    - * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
    - * Released under the MIT license
    - * http://jquery.org/license
    - *
    - * Date: 2013-07-03T13:48Z
    - */
    -(function( window, undefined ) {
    -
    -// Can't do this because several apps including ASP.NET trace
    -// the stack via arguments.caller.callee and Firefox dies if
    -// you try to trace through "use strict" call chains. (#13335)
    -// Support: Firefox 18+
    -//"use strict";
    -var
    -	// The deferred used on DOM ready
    -	readyList,
    -
    -	// A central reference to the root jQuery(document)
    -	rootjQuery,
    -
    -	// Support: IE<10
    -	// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
    -	core_strundefined = typeof undefined,
    -
    -	// Use the correct document accordingly with window argument (sandbox)
    -	location = window.location,
    -	document = window.document,
    -	docElem = document.documentElement,
    -
    -	// Map over jQuery in case of overwrite
    -	_jQuery = window.jQuery,
    -
    -	// Map over the $ in case of overwrite
    -	_$ = window.$,
    -
    -	// [[Class]] -> type pairs
    -	class2type = {},
    -
    -	// List of deleted data cache ids, so we can reuse them
    -	core_deletedIds = [],
    -
    -	core_version = "1.10.2",
    -
    -	// Save a reference to some core methods
    -	core_concat = core_deletedIds.concat,
    -	core_push = core_deletedIds.push,
    -	core_slice = core_deletedIds.slice,
    -	core_indexOf = core_deletedIds.indexOf,
    -	core_toString = class2type.toString,
    -	core_hasOwn = class2type.hasOwnProperty,
    -	core_trim = core_version.trim,
    -
    -	// Define a local copy of jQuery
    -	jQuery = function( selector, context ) {
    -		// The jQuery object is actually just the init constructor 'enhanced'
    -		return new jQuery.fn.init( selector, context, rootjQuery );
    -	},
    -
    -	// Used for matching numbers
    -	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
    -
    -	// Used for splitting on whitespace
    -	core_rnotwhite = /\S+/g,
    -
    -	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
    -	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
    -
    -	// A simple way to check for HTML strings
    -	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
    -	// Strict HTML recognition (#11290: must start with <)
    -	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
    -
    -	// Match a standalone tag
    -	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
    -
    -	// JSON RegExp
    -	rvalidchars = /^[\],:{}\s]*$/,
    -	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
    -	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
    -	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
    -
    -	// Matches dashed string for camelizing
    -	rmsPrefix = /^-ms-/,
    -	rdashAlpha = /-([\da-z])/gi,
    -
    -	// Used by jQuery.camelCase as callback to replace()
    -	fcamelCase = function( all, letter ) {
    -		return letter.toUpperCase();
    -	},
    -
    -	// The ready event handler
    -	completed = function( event ) {
    -
    -		// readyState === "complete" is good enough for us to call the dom ready in oldIE
    -		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
    -			detach();
    -			jQuery.ready();
    -		}
    -	},
    -	// Clean-up method for dom ready events
    -	detach = function() {
    -		if ( document.addEventListener ) {
    -			document.removeEventListener( "DOMContentLoaded", completed, false );
    -			window.removeEventListener( "load", completed, false );
    -
    -		} else {
    -			document.detachEvent( "onreadystatechange", completed );
    -			window.detachEvent( "onload", completed );
    -		}
    -	};
    -
    -jQuery.fn = jQuery.prototype = {
    -	// The current version of jQuery being used
    -	jquery: core_version,
    -
    -	constructor: jQuery,
    -	init: function( selector, context, rootjQuery ) {
    -		var match, elem;
    -
    -		// HANDLE: $(""), $(null), $(undefined), $(false)
    -		if ( !selector ) {
    -			return this;
    -		}
    -
    -		// Handle HTML strings
    -		if ( typeof selector === "string" ) {
    -			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
    -				// Assume that strings that start and end with <> are HTML and skip the regex check
    -				match = [ null, selector, null ];
    -
    -			} else {
    -				match = rquickExpr.exec( selector );
    -			}
    -
    -			// Match html or make sure no context is specified for #id
    -			if ( match && (match[1] || !context) ) {
    -
    -				// HANDLE: $(html) -> $(array)
    -				if ( match[1] ) {
    -					context = context instanceof jQuery ? context[0] : context;
    -
    -					// scripts is true for back-compat
    -					jQuery.merge( this, jQuery.parseHTML(
    -						match[1],
    -						context && context.nodeType ? context.ownerDocument || context : document,
    -						true
    -					) );
    -
    -					// HANDLE: $(html, props)
    -					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
    -						for ( match in context ) {
    -							// Properties of context are called as methods if possible
    -							if ( jQuery.isFunction( this[ match ] ) ) {
    -								this[ match ]( context[ match ] );
    -
    -							// ...and otherwise set as attributes
    -							} else {
    -								this.attr( match, context[ match ] );
    -							}
    -						}
    -					}
    -
    -					return this;
    -
    -				// HANDLE: $(#id)
    -				} else {
    -					elem = document.getElementById( match[2] );
    -
    -					// Check parentNode to catch when Blackberry 4.6 returns
    -					// nodes that are no longer in the document #6963
    -					if ( elem && elem.parentNode ) {
    -						// Handle the case where IE and Opera return items
    -						// by name instead of ID
    -						if ( elem.id !== match[2] ) {
    -							return rootjQuery.find( selector );
    -						}
    -
    -						// Otherwise, we inject the element directly into the jQuery object
    -						this.length = 1;
    -						this[0] = elem;
    -					}
    -
    -					this.context = document;
    -					this.selector = selector;
    -					return this;
    -				}
    -
    -			// HANDLE: $(expr, $(...))
    -			} else if ( !context || context.jquery ) {
    -				return ( context || rootjQuery ).find( selector );
    -
    -			// HANDLE: $(expr, context)
    -			// (which is just equivalent to: $(context).find(expr)
    -			} else {
    -				return this.constructor( context ).find( selector );
    -			}
    -
    -		// HANDLE: $(DOMElement)
    -		} else if ( selector.nodeType ) {
    -			this.context = this[0] = selector;
    -			this.length = 1;
    -			return this;
    -
    -		// HANDLE: $(function)
    -		// Shortcut for document ready
    -		} else if ( jQuery.isFunction( selector ) ) {
    -			return rootjQuery.ready( selector );
    -		}
    -
    -		if ( selector.selector !== undefined ) {
    -			this.selector = selector.selector;
    -			this.context = selector.context;
    -		}
    -
    -		return jQuery.makeArray( selector, this );
    -	},
    -
    -	// Start with an empty selector
    -	selector: "",
    -
    -	// The default length of a jQuery object is 0
    -	length: 0,
    -
    -	toArray: function() {
    -		return core_slice.call( this );
    -	},
    -
    -	// Get the Nth element in the matched element set OR
    -	// Get the whole matched element set as a clean array
    -	get: function( num ) {
    -		return num == null ?
    -
    -			// Return a 'clean' array
    -			this.toArray() :
    -
    -			// Return just the object
    -			( num < 0 ? this[ this.length + num ] : this[ num ] );
    -	},
    -
    -	// Take an array of elements and push it onto the stack
    -	// (returning the new matched element set)
    -	pushStack: function( elems ) {
    -
    -		// Build a new jQuery matched element set
    -		var ret = jQuery.merge( this.constructor(), elems );
    -
    -		// Add the old object onto the stack (as a reference)
    -		ret.prevObject = this;
    -		ret.context = this.context;
    -
    -		// Return the newly-formed element set
    -		return ret;
    -	},
    -
    -	// Execute a callback for every element in the matched set.
    -	// (You can seed the arguments with an array of args, but this is
    -	// only used internally.)
    -	each: function( callback, args ) {
    -		return jQuery.each( this, callback, args );
    -	},
    -
    -	ready: function( fn ) {
    -		// Add the callback
    -		jQuery.ready.promise().done( fn );
    -
    -		return this;
    -	},
    -
    -	slice: function() {
    -		return this.pushStack( core_slice.apply( this, arguments ) );
    -	},
    -
    -	first: function() {
    -		return this.eq( 0 );
    -	},
    -
    -	last: function() {
    -		return this.eq( -1 );
    -	},
    -
    -	eq: function( i ) {
    -		var len = this.length,
    -			j = +i + ( i < 0 ? len : 0 );
    -		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
    -	},
    -
    -	map: function( callback ) {
    -		return this.pushStack( jQuery.map(this, function( elem, i ) {
    -			return callback.call( elem, i, elem );
    -		}));
    -	},
    -
    -	end: function() {
    -		return this.prevObject || this.constructor(null);
    -	},
    -
    -	// For internal use only.
    -	// Behaves like an Array's method, not like a jQuery method.
    -	push: core_push,
    -	sort: [].sort,
    -	splice: [].splice
    -};
    -
    -// Give the init function the jQuery prototype for later instantiation
    -jQuery.fn.init.prototype = jQuery.fn;
    -
    -jQuery.extend = jQuery.fn.extend = function() {
    -	var src, copyIsArray, copy, name, options, clone,
    -		target = arguments[0] || {},
    -		i = 1,
    -		length = arguments.length,
    -		deep = false;
    -
    -	// Handle a deep copy situation
    -	if ( typeof target === "boolean" ) {
    -		deep = target;
    -		target = arguments[1] || {};
    -		// skip the boolean and the target
    -		i = 2;
    -	}
    -
    -	// Handle case when target is a string or something (possible in deep copy)
    -	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
    -		target = {};
    -	}
    -
    -	// extend jQuery itself if only one argument is passed
    -	if ( length === i ) {
    -		target = this;
    -		--i;
    -	}
    -
    -	for ( ; i < length; i++ ) {
    -		// Only deal with non-null/undefined values
    -		if ( (options = arguments[ i ]) != null ) {
    -			// Extend the base object
    -			for ( name in options ) {
    -				src = target[ name ];
    -				copy = options[ name ];
    -
    -				// Prevent never-ending loop
    -				if ( target === copy ) {
    -					continue;
    -				}
    -
    -				// Recurse if we're merging plain objects or arrays
    -				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
    -					if ( copyIsArray ) {
    -						copyIsArray = false;
    -						clone = src && jQuery.isArray(src) ? src : [];
    -
    -					} else {
    -						clone = src && jQuery.isPlainObject(src) ? src : {};
    -					}
    -
    -					// Never move original objects, clone them
    -					target[ name ] = jQuery.extend( deep, clone, copy );
    -
    -				// Don't bring in undefined values
    -				} else if ( copy !== undefined ) {
    -					target[ name ] = copy;
    -				}
    -			}
    -		}
    -	}
    -
    -	// Return the modified object
    -	return target;
    -};
    -
    -jQuery.extend({
    -	// Unique for each copy of jQuery on the page
    -	// Non-digits removed to match rinlinejQuery
    -	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
    -
    -	noConflict: function( deep ) {
    -		if ( window.$ === jQuery ) {
    -			window.$ = _$;
    -		}
    -
    -		if ( deep && window.jQuery === jQuery ) {
    -			window.jQuery = _jQuery;
    -		}
    -
    -		return jQuery;
    -	},
    -
    -	// Is the DOM ready to be used? Set to true once it occurs.
    -	isReady: false,
    -
    -	// A counter to track how many items to wait for before
    -	// the ready event fires. See #6781
    -	readyWait: 1,
    -
    -	// Hold (or release) the ready event
    -	holdReady: function( hold ) {
    -		if ( hold ) {
    -			jQuery.readyWait++;
    -		} else {
    -			jQuery.ready( true );
    -		}
    -	},
    -
    -	// Handle when the DOM is ready
    -	ready: function( wait ) {
    -
    -		// Abort if there are pending holds or we're already ready
    -		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
    -			return;
    -		}
    -
    -		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
    -		if ( !document.body ) {
    -			return setTimeout( jQuery.ready );
    -		}
    -
    -		// Remember that the DOM is ready
    -		jQuery.isReady = true;
    -
    -		// If a normal DOM Ready event fired, decrement, and wait if need be
    -		if ( wait !== true && --jQuery.readyWait > 0 ) {
    -			return;
    -		}
    -
    -		// If there are functions bound, to execute
    -		readyList.resolveWith( document, [ jQuery ] );
    -
    -		// Trigger any bound ready events
    -		if ( jQuery.fn.trigger ) {
    -			jQuery( document ).trigger("ready").off("ready");
    -		}
    -	},
    -
    -	// See test/unit/core.js for details concerning isFunction.
    -	// Since version 1.3, DOM methods and functions like alert
    -	// aren't supported. They return false on IE (#2968).
    -	isFunction: function( obj ) {
    -		return jQuery.type(obj) === "function";
    -	},
    -
    -	isArray: Array.isArray || function( obj ) {
    -		return jQuery.type(obj) === "array";
    -	},
    -
    -	isWindow: function( obj ) {
    -		/* jshint eqeqeq: false */
    -		return obj != null && obj == obj.window;
    -	},
    -
    -	isNumeric: function( obj ) {
    -		return !isNaN( parseFloat(obj) ) && isFinite( obj );
    -	},
    -
    -	type: function( obj ) {
    -		if ( obj == null ) {
    -			return String( obj );
    -		}
    -		return typeof obj === "object" || typeof obj === "function" ?
    -			class2type[ core_toString.call(obj) ] || "object" :
    -			typeof obj;
    -	},
    -
    -	isPlainObject: function( obj ) {
    -		var key;
    -
    -		// Must be an Object.
    -		// Because of IE, we also have to check the presence of the constructor property.
    -		// Make sure that DOM nodes and window objects don't pass through, as well
    -		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
    -			return false;
    -		}
    -
    -		try {
    -			// Not own constructor property must be Object
    -			if ( obj.constructor &&
    -				!core_hasOwn.call(obj, "constructor") &&
    -				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
    -				return false;
    -			}
    -		} catch ( e ) {
    -			// IE8,9 Will throw exceptions on certain host objects #9897
    -			return false;
    -		}
    -
    -		// Support: IE<9
    -		// Handle iteration over inherited properties before own properties.
    -		if ( jQuery.support.ownLast ) {
    -			for ( key in obj ) {
    -				return core_hasOwn.call( obj, key );
    -			}
    -		}
    -
    -		// Own properties are enumerated firstly, so to speed up,
    -		// if last one is own, then all properties are own.
    -		for ( key in obj ) {}
    -
    -		return key === undefined || core_hasOwn.call( obj, key );
    -	},
    -
    -	isEmptyObject: function( obj ) {
    -		var name;
    -		for ( name in obj ) {
    -			return false;
    -		}
    -		return true;
    -	},
    -
    -	error: function( msg ) {
    -		throw new Error( msg );
    -	},
    -
    -	// data: string of html
    -	// context (optional): If specified, the fragment will be created in this context, defaults to document
    -	// keepScripts (optional): If true, will include scripts passed in the html string
    -	parseHTML: function( data, context, keepScripts ) {
    -		if ( !data || typeof data !== "string" ) {
    -			return null;
    -		}
    -		if ( typeof context === "boolean" ) {
    -			keepScripts = context;
    -			context = false;
    -		}
    -		context = context || document;
    -
    -		var parsed = rsingleTag.exec( data ),
    -			scripts = !keepScripts && [];
    -
    -		// Single tag
    -		if ( parsed ) {
    -			return [ context.createElement( parsed[1] ) ];
    -		}
    -
    -		parsed = jQuery.buildFragment( [ data ], context, scripts );
    -		if ( scripts ) {
    -			jQuery( scripts ).remove();
    -		}
    -		return jQuery.merge( [], parsed.childNodes );
    -	},
    -
    -	parseJSON: function( data ) {
    -		// Attempt to parse using the native JSON parser first
    -		if ( window.JSON && window.JSON.parse ) {
    -			return window.JSON.parse( data );
    -		}
    -
    -		if ( data === null ) {
    -			return data;
    -		}
    -
    -		if ( typeof data === "string" ) {
    -
    -			// Make sure leading/trailing whitespace is removed (IE can't handle it)
    -			data = jQuery.trim( data );
    -
    -			if ( data ) {
    -				// Make sure the incoming data is actual JSON
    -				// Logic borrowed from http://json.org/json2.js
    -				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
    -					.replace( rvalidtokens, "]" )
    -					.replace( rvalidbraces, "")) ) {
    -
    -					return ( new Function( "return " + data ) )();
    -				}
    -			}
    -		}
    -
    -		jQuery.error( "Invalid JSON: " + data );
    -	},
    -
    -	// Cross-browser xml parsing
    -	parseXML: function( data ) {
    -		var xml, tmp;
    -		if ( !data || typeof data !== "string" ) {
    -			return null;
    -		}
    -		try {
    -			if ( window.DOMParser ) { // Standard
    -				tmp = new DOMParser();
    -				xml = tmp.parseFromString( data , "text/xml" );
    -			} else { // IE
    -				xml = new ActiveXObject( "Microsoft.XMLDOM" );
    -				xml.async = "false";
    -				xml.loadXML( data );
    -			}
    -		} catch( e ) {
    -			xml = undefined;
    -		}
    -		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
    -			jQuery.error( "Invalid XML: " + data );
    -		}
    -		return xml;
    -	},
    -
    -	noop: function() {},
    -
    -	// Evaluates a script in a global context
    -	// Workarounds based on findings by Jim Driscoll
    -	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
    -	globalEval: function( data ) {
    -		if ( data && jQuery.trim( data ) ) {
    -			// We use execScript on Internet Explorer
    -			// We use an anonymous function so that context is window
    -			// rather than jQuery in Firefox
    -			( window.execScript || function( data ) {
    -				window[ "eval" ].call( window, data );
    -			} )( data );
    -		}
    -	},
    -
    -	// Convert dashed to camelCase; used by the css and data modules
    -	// Microsoft forgot to hump their vendor prefix (#9572)
    -	camelCase: function( string ) {
    -		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
    -	},
    -
    -	nodeName: function( elem, name ) {
    -		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
    -	},
    -
    -	// args is for internal usage only
    -	each: function( obj, callback, args ) {
    -		var value,
    -			i = 0,
    -			length = obj.length,
    -			isArray = isArraylike( obj );
    -
    -		if ( args ) {
    -			if ( isArray ) {
    -				for ( ; i < length; i++ ) {
    -					value = callback.apply( obj[ i ], args );
    -
    -					if ( value === false ) {
    -						break;
    -					}
    -				}
    -			} else {
    -				for ( i in obj ) {
    -					value = callback.apply( obj[ i ], args );
    -
    -					if ( value === false ) {
    -						break;
    -					}
    -				}
    -			}
    -
    -		// A special, fast, case for the most common use of each
    -		} else {
    -			if ( isArray ) {
    -				for ( ; i < length; i++ ) {
    -					value = callback.call( obj[ i ], i, obj[ i ] );
    -
    -					if ( value === false ) {
    -						break;
    -					}
    -				}
    -			} else {
    -				for ( i in obj ) {
    -					value = callback.call( obj[ i ], i, obj[ i ] );
    -
    -					if ( value === false ) {
    -						break;
    -					}
    -				}
    -			}
    -		}
    -
    -		return obj;
    -	},
    -
    -	// Use native String.trim function wherever possible
    -	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
    -		function( text ) {
    -			return text == null ?
    -				"" :
    -				core_trim.call( text );
    -		} :
    -
    -		// Otherwise use our own trimming functionality
    -		function( text ) {
    -			return text == null ?
    -				"" :
    -				( text + "" ).replace( rtrim, "" );
    -		},
    -
    -	// results is for internal usage only
    -	makeArray: function( arr, results ) {
    -		var ret = results || [];
    -
    -		if ( arr != null ) {
    -			if ( isArraylike( Object(arr) ) ) {
    -				jQuery.merge( ret,
    -					typeof arr === "string" ?
    -					[ arr ] : arr
    -				);
    -			} else {
    -				core_push.call( ret, arr );
    -			}
    -		}
    -
    -		return ret;
    -	},
    -
    -	inArray: function( elem, arr, i ) {
    -		var len;
    -
    -		if ( arr ) {
    -			if ( core_indexOf ) {
    -				return core_indexOf.call( arr, elem, i );
    -			}
    -
    -			len = arr.length;
    -			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
    -
    -			for ( ; i < len; i++ ) {
    -				// Skip accessing in sparse arrays
    -				if ( i in arr && arr[ i ] === elem ) {
    -					return i;
    -				}
    -			}
    -		}
    -
    -		return -1;
    -	},
    -
    -	merge: function( first, second ) {
    -		var l = second.length,
    -			i = first.length,
    -			j = 0;
    -
    -		if ( typeof l === "number" ) {
    -			for ( ; j < l; j++ ) {
    -				first[ i++ ] = second[ j ];
    -			}
    -		} else {
    -			while ( second[j] !== undefined ) {
    -				first[ i++ ] = second[ j++ ];
    -			}
    -		}
    -
    -		first.length = i;
    -
    -		return first;
    -	},
    -
    -	grep: function( elems, callback, inv ) {
    -		var retVal,
    -			ret = [],
    -			i = 0,
    -			length = elems.length;
    -		inv = !!inv;
    -
    -		// Go through the array, only saving the items
    -		// that pass the validator function
    -		for ( ; i < length; i++ ) {
    -			retVal = !!callback( elems[ i ], i );
    -			if ( inv !== retVal ) {
    -				ret.push( elems[ i ] );
    -			}
    -		}
    -
    -		return ret;
    -	},
    -
    -	// arg is for internal usage only
    -	map: function( elems, callback, arg ) {
    -		var value,
    -			i = 0,
    -			length = elems.length,
    -			isArray = isArraylike( elems ),
    -			ret = [];
    -
    -		// Go through the array, translating each of the items to their
    -		if ( isArray ) {
    -			for ( ; i < length; i++ ) {
    -				value = callback( elems[ i ], i, arg );
    -
    -				if ( value != null ) {
    -					ret[ ret.length ] = value;
    -				}
    -			}
    -
    -		// Go through every key on the object,
    -		} else {
    -			for ( i in elems ) {
    -				value = callback( elems[ i ], i, arg );
    -
    -				if ( value != null ) {
    -					ret[ ret.length ] = value;
    -				}
    -			}
    -		}
    -
    -		// Flatten any nested arrays
    -		return core_concat.apply( [], ret );
    -	},
    -
    -	// A global GUID counter for objects
    -	guid: 1,
    -
    -	// Bind a function to a context, optionally partially applying any
    -	// arguments.
    -	proxy: function( fn, context ) {
    -		var args, proxy, tmp;
    -
    -		if ( typeof context === "string" ) {
    -			tmp = fn[ context ];
    -			context = fn;
    -			fn = tmp;
    -		}
    -
    -		// Quick check to determine if target is callable, in the spec
    -		// this throws a TypeError, but we will just return undefined.
    -		if ( !jQuery.isFunction( fn ) ) {
    -			return undefined;
    -		}
    -
    -		// Simulated bind
    -		args = core_slice.call( arguments, 2 );
    -		proxy = function() {
    -			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
    -		};
    -
    -		// Set the guid of unique handler to the same of original handler, so it can be removed
    -		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
    -
    -		return proxy;
    -	},
    -
    -	// Multifunctional method to get and set values of a collection
    -	// The value/s can optionally be executed if it's a function
    -	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
    -		var i = 0,
    -			length = elems.length,
    -			bulk = key == null;
    -
    -		// Sets many values
    -		if ( jQuery.type( key ) === "object" ) {
    -			chainable = true;
    -			for ( i in key ) {
    -				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
    -			}
    -
    -		// Sets one value
    -		} else if ( value !== undefined ) {
    -			chainable = true;
    -
    -			if ( !jQuery.isFunction( value ) ) {
    -				raw = true;
    -			}
    -
    -			if ( bulk ) {
    -				// Bulk operations run against the entire set
    -				if ( raw ) {
    -					fn.call( elems, value );
    -					fn = null;
    -
    -				// ...except when executing function values
    -				} else {
    -					bulk = fn;
    -					fn = function( elem, key, value ) {
    -						return bulk.call( jQuery( elem ), value );
    -					};
    -				}
    -			}
    -
    -			if ( fn ) {
    -				for ( ; i < length; i++ ) {
    -					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
    -				}
    -			}
    -		}
    -
    -		return chainable ?
    -			elems :
    -
    -			// Gets
    -			bulk ?
    -				fn.call( elems ) :
    -				length ? fn( elems[0], key ) : emptyGet;
    -	},
    -
    -	now: function() {
    -		return ( new Date() ).getTime();
    -	},
    -
    -	// A method for quickly swapping in/out CSS properties to get correct calculations.
    -	// Note: this method belongs to the css module but it's needed here for the support module.
    -	// If support gets modularized, this method should be moved back to the css module.
    -	swap: function( elem, options, callback, args ) {
    -		var ret, name,
    -			old = {};
    -
    -		// Remember the old values, and insert the new ones
    -		for ( name in options ) {
    -			old[ name ] = elem.style[ name ];
    -			elem.style[ name ] = options[ name ];
    -		}
    -
    -		ret = callback.apply( elem, args || [] );
    -
    -		// Revert the old values
    -		for ( name in options ) {
    -			elem.style[ name ] = old[ name ];
    -		}
    -
    -		return ret;
    -	}
    -});
    -
    -jQuery.ready.promise = function( obj ) {
    -	if ( !readyList ) {
    -
    -		readyList = jQuery.Deferred();
    -
    -		// Catch cases where $(document).ready() is called after the browser event has already occurred.
    -		// we once tried to use readyState "interactive" here, but it caused issues like the one
    -		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
    -		if ( document.readyState === "complete" ) {
    -			// Handle it asynchronously to allow scripts the opportunity to delay ready
    -			setTimeout( jQuery.ready );
    -
    -		// Standards-based browsers support DOMContentLoaded
    -		} else if ( document.addEventListener ) {
    -			// Use the handy event callback
    -			document.addEventListener( "DOMContentLoaded", completed, false );
    -
    -			// A fallback to window.onload, that will always work
    -			window.addEventListener( "load", completed, false );
    -
    -		// If IE event model is used
    -		} else {
    -			// Ensure firing before onload, maybe late but safe also for iframes
    -			document.attachEvent( "onreadystatechange", completed );
    -
    -			// A fallback to window.onload, that will always work
    -			window.attachEvent( "onload", completed );
    -
    -			// If IE and not a frame
    -			// continually check to see if the document is ready
    -			var top = false;
    -
    -			try {
    -				top = window.frameElement == null && document.documentElement;
    -			} catch(e) {}
    -
    -			if ( top && top.doScroll ) {
    -				(function doScrollCheck() {
    -					if ( !jQuery.isReady ) {
    -
    -						try {
    -							// Use the trick by Diego Perini
    -							// http://javascript.nwbox.com/IEContentLoaded/
    -							top.doScroll("left");
    -						} catch(e) {
    -							return setTimeout( doScrollCheck, 50 );
    -						}
    -
    -						// detach all dom ready events
    -						detach();
    -
    -						// and execute any waiting functions
    -						jQuery.ready();
    -					}
    -				})();
    -			}
    -		}
    -	}
    -	return readyList.promise( obj );
    -};
    -
    -// Populate the class2type map
    -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
    -	class2type[ "[object " + name + "]" ] = name.toLowerCase();
    -});
    -
    -function isArraylike( obj ) {
    -	var length = obj.length,
    -		type = jQuery.type( obj );
    -
    -	if ( jQuery.isWindow( obj ) ) {
    -		return false;
    -	}
    -
    -	if ( obj.nodeType === 1 && length ) {
    -		return true;
    -	}
    -
    -	return type === "array" || type !== "function" &&
    -		( length === 0 ||
    -		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
    -}
    -
    -// All jQuery objects should point back to these
    -rootjQuery = jQuery(document);
    -/*!
    - * Sizzle CSS Selector Engine v1.10.2
    - * http://sizzlejs.com/
    - *
    - * Copyright 2013 jQuery Foundation, Inc. and other contributors
    - * Released under the MIT license
    - * http://jquery.org/license
    - *
    - * Date: 2013-07-03
    - */
    -(function( window, undefined ) {
    -
    -var i,
    -	support,
    -	cachedruns,
    -	Expr,
    -	getText,
    -	isXML,
    -	compile,
    -	outermostContext,
    -	sortInput,
    -
    -	// Local document vars
    -	setDocument,
    -	document,
    -	docElem,
    -	documentIsHTML,
    -	rbuggyQSA,
    -	rbuggyMatches,
    -	matches,
    -	contains,
    -
    -	// Instance-specific data
    -	expando = "sizzle" + -(new Date()),
    -	preferredDoc = window.document,
    -	dirruns = 0,
    -	done = 0,
    -	classCache = createCache(),
    -	tokenCache = createCache(),
    -	compilerCache = createCache(),
    -	hasDuplicate = false,
    -	sortOrder = function( a, b ) {
    -		if ( a === b ) {
    -			hasDuplicate = true;
    -			return 0;
    -		}
    -		return 0;
    -	},
    -
    -	// General-purpose constants
    -	strundefined = typeof undefined,
    -	MAX_NEGATIVE = 1 << 31,
    -
    -	// Instance methods
    -	hasOwn = ({}).hasOwnProperty,
    -	arr = [],
    -	pop = arr.pop,
    -	push_native = arr.push,
    -	push = arr.push,
    -	slice = arr.slice,
    -	// Use a stripped-down indexOf if we can't use a native one
    -	indexOf = arr.indexOf || function( elem ) {
    -		var i = 0,
    -			len = this.length;
    -		for ( ; i < len; i++ ) {
    -			if ( this[i] === elem ) {
    -				return i;
    -			}
    -		}
    -		return -1;
    -	},
    -
    -	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
    -
    -	// Regular expressions
    -
    -	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
    -	whitespace = "[\\x20\\t\\r\\n\\f]",
    -	// http://www.w3.org/TR/css3-syntax/#characters
    -	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
    -
    -	// Loosely modeled on CSS identifier characters
    -	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
    -	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
    -	identifier = characterEncoding.replace( "w", "w#" ),
    -
    -	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
    -	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
    -		"*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
    -
    -	// Prefer arguments quoted,
    -	//   then not containing pseudos/brackets,
    -	//   then attribute selectors/non-parenthetical expressions,
    -	//   then anything else
    -	// These preferences are here to reduce the number of selectors
    -	//   needing tokenize in the PSEUDO preFilter
    -	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
    -
    -	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
    -	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
    -
    -	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
    -	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
    -
    -	rsibling = new RegExp( whitespace + "*[+~]" ),
    -	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),
    -
    -	rpseudo = new RegExp( pseudos ),
    -	ridentifier = new RegExp( "^" + identifier + "$" ),
    -
    -	matchExpr = {
    -		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
    -		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
    -		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
    -		"ATTR": new RegExp( "^" + attributes ),
    -		"PSEUDO": new RegExp( "^" + pseudos ),
    -		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
    -			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
    -			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
    -		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
    -		// For use in libraries implementing .is()
    -		// We use this for POS matching in `select`
    -		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
    -			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
    -	},
    -
    -	rnative = /^[^{]+\{\s*\[native \w/,
    -
    -	// Easily-parseable/retrievable ID or TAG or CLASS selectors
    -	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
    -
    -	rinputs = /^(?:input|select|textarea|button)$/i,
    -	rheader = /^h\d$/i,
    -
    -	rescape = /'|\\/g,
    -
    -	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
    -	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
    -	funescape = function( _, escaped, escapedWhitespace ) {
    -		var high = "0x" + escaped - 0x10000;
    -		// NaN means non-codepoint
    -		// Support: Firefox
    -		// Workaround erroneous numeric interpretation of +"0x"
    -		return high !== high || escapedWhitespace ?
    -			escaped :
    -			// BMP codepoint
    -			high < 0 ?
    -				String.fromCharCode( high + 0x10000 ) :
    -				// Supplemental Plane codepoint (surrogate pair)
    -				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
    -	};
    -
    -// Optimize for push.apply( _, NodeList )
    -try {
    -	push.apply(
    -		(arr = slice.call( preferredDoc.childNodes )),
    -		preferredDoc.childNodes
    -	);
    -	// Support: Android<4.0
    -	// Detect silently failing push.apply
    -	arr[ preferredDoc.childNodes.length ].nodeType;
    -} catch ( e ) {
    -	push = { apply: arr.length ?
    -
    -		// Leverage slice if possible
    -		function( target, els ) {
    -			push_native.apply( target, slice.call(els) );
    -		} :
    -
    -		// Support: IE<9
    -		// Otherwise append directly
    -		function( target, els ) {
    -			var j = target.length,
    -				i = 0;
    -			// Can't trust NodeList.length
    -			while ( (target[j++] = els[i++]) ) {}
    -			target.length = j - 1;
    -		}
    -	};
    -}
    -
    -function Sizzle( selector, context, results, seed ) {
    -	var match, elem, m, nodeType,
    -		// QSA vars
    -		i, groups, old, nid, newContext, newSelector;
    -
    -	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
    -		setDocument( context );
    -	}
    -
    -	context = context || document;
    -	results = results || [];
    -
    -	if ( !selector || typeof selector !== "string" ) {
    -		return results;
    -	}
    -
    -	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
    -		return [];
    -	}
    -
    -	if ( documentIsHTML && !seed ) {
    -
    -		// Shortcuts
    -		if ( (match = rquickExpr.exec( selector )) ) {
    -			// Speed-up: Sizzle("#ID")
    -			if ( (m = match[1]) ) {
    -				if ( nodeType === 9 ) {
    -					elem = context.getElementById( m );
    -					// Check parentNode to catch when Blackberry 4.6 returns
    -					// nodes that are no longer in the document #6963
    -					if ( elem && elem.parentNode ) {
    -						// Handle the case where IE, Opera, and Webkit return items
    -						// by name instead of ID
    -						if ( elem.id === m ) {
    -							results.push( elem );
    -							return results;
    -						}
    -					} else {
    -						return results;
    -					}
    -				} else {
    -					// Context is not a document
    -					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
    -						contains( context, elem ) && elem.id === m ) {
    -						results.push( elem );
    -						return results;
    -					}
    -				}
    -
    -			// Speed-up: Sizzle("TAG")
    -			} else if ( match[2] ) {
    -				push.apply( results, context.getElementsByTagName( selector ) );
    -				return results;
    -
    -			// Speed-up: Sizzle(".CLASS")
    -			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
    -				push.apply( results, context.getElementsByClassName( m ) );
    -				return results;
    -			}
    -		}
    -
    -		// QSA path
    -		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
    -			nid = old = expando;
    -			newContext = context;
    -			newSelector = nodeType === 9 && selector;
    -
    -			// qSA works strangely on Element-rooted queries
    -			// We can work around this by specifying an extra ID on the root
    -			// and working up from there (Thanks to Andrew Dupont for the technique)
    -			// IE 8 doesn't work on object elements
    -			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
    -				groups = tokenize( selector );
    -
    -				if ( (old = context.getAttribute("id")) ) {
    -					nid = old.replace( rescape, "\\$&" );
    -				} else {
    -					context.setAttribute( "id", nid );
    -				}
    -				nid = "[id='" + nid + "'] ";
    -
    -				i = groups.length;
    -				while ( i-- ) {
    -					groups[i] = nid + toSelector( groups[i] );
    -				}
    -				newContext = rsibling.test( selector ) && context.parentNode || context;
    -				newSelector = groups.join(",");
    -			}
    -
    -			if ( newSelector ) {
    -				try {
    -					push.apply( results,
    -						newContext.querySelectorAll( newSelector )
    -					);
    -					return results;
    -				} catch(qsaError) {
    -				} finally {
    -					if ( !old ) {
    -						context.removeAttribute("id");
    -					}
    -				}
    -			}
    -		}
    -	}
    -
    -	// All others
    -	return select( selector.replace( rtrim, "$1" ), context, results, seed );
    -}
    -
    -/**
    - * Create key-value caches of limited size
    - * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
    - *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
    - *	deleting the oldest entry
    - */
    -function createCache() {
    -	var keys = [];
    -
    -	function cache( key, value ) {
    -		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
    -		if ( keys.push( key += " " ) > Expr.cacheLength ) {
    -			// Only keep the most recent entries
    -			delete cache[ keys.shift() ];
    -		}
    -		return (cache[ key ] = value);
    -	}
    -	return cache;
    -}
    -
    -/**
    - * Mark a function for special use by Sizzle
    - * @param {Function} fn The function to mark
    - */
    -function markFunction( fn ) {
    -	fn[ expando ] = true;
    -	return fn;
    -}
    -
    -/**
    - * Support testing using an element
    - * @param {Function} fn Passed the created div and expects a boolean result
    - */
    -function assert( fn ) {
    -	var div = document.createElement("div");
    -
    -	try {
    -		return !!fn( div );
    -	} catch (e) {
    -		return false;
    -	} finally {
    -		// Remove from its parent by default
    -		if ( div.parentNode ) {
    -			div.parentNode.removeChild( div );
    -		}
    -		// release memory in IE
    -		div = null;
    -	}
    -}
    -
    -/**
    - * Adds the same handler for all of the specified attrs
    - * @param {String} attrs Pipe-separated list of attributes
    - * @param {Function} handler The method that will be applied
    - */
    -function addHandle( attrs, handler ) {
    -	var arr = attrs.split("|"),
    -		i = attrs.length;
    -
    -	while ( i-- ) {
    -		Expr.attrHandle[ arr[i] ] = handler;
    -	}
    -}
    -
    -/**
    - * Checks document order of two siblings
    - * @param {Element} a
    - * @param {Element} b
    - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
    - */
    -function siblingCheck( a, b ) {
    -	var cur = b && a,
    -		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
    -			( ~b.sourceIndex || MAX_NEGATIVE ) -
    -			( ~a.sourceIndex || MAX_NEGATIVE );
    -
    -	// Use IE sourceIndex if available on both nodes
    -	if ( diff ) {
    -		return diff;
    -	}
    -
    -	// Check if b follows a
    -	if ( cur ) {
    -		while ( (cur = cur.nextSibling) ) {
    -			if ( cur === b ) {
    -				return -1;
    -			}
    -		}
    -	}
    -
    -	return a ? 1 : -1;
    -}
    -
    -/**
    - * Returns a function to use in pseudos for input types
    - * @param {String} type
    - */
    -function createInputPseudo( type ) {
    -	return function( elem ) {
    -		var name = elem.nodeName.toLowerCase();
    -		return name === "input" && elem.type === type;
    -	};
    -}
    -
    -/**
    - * Returns a function to use in pseudos for buttons
    - * @param {String} type
    - */
    -function createButtonPseudo( type ) {
    -	return function( elem ) {
    -		var name = elem.nodeName.toLowerCase();
    -		return (name === "input" || name === "button") && elem.type === type;
    -	};
    -}
    -
    -/**
    - * Returns a function to use in pseudos for positionals
    - * @param {Function} fn
    - */
    -function createPositionalPseudo( fn ) {
    -	return markFunction(function( argument ) {
    -		argument = +argument;
    -		return markFunction(function( seed, matches ) {
    -			var j,
    -				matchIndexes = fn( [], seed.length, argument ),
    -				i = matchIndexes.length;
    -
    -			// Match elements found at the specified indexes
    -			while ( i-- ) {
    -				if ( seed[ (j = matchIndexes[i]) ] ) {
    -					seed[j] = !(matches[j] = seed[j]);
    -				}
    -			}
    -		});
    -	});
    -}
    -
    -/**
    - * Detect xml
    - * @param {Element|Object} elem An element or a document
    - */
    -isXML = Sizzle.isXML = function( elem ) {
    -	// documentElement is verified for cases where it doesn't yet exist
    -	// (such as loading iframes in IE - #4833)
    -	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
    -	return documentElement ? documentElement.nodeName !== "HTML" : false;
    -};
    -
    -// Expose support vars for convenience
    -support = Sizzle.support = {};
    -
    -/**
    - * Sets document-related variables once based on the current document
    - * @param {Element|Object} [doc] An element or document object to use to set the document
    - * @returns {Object} Returns the current document
    - */
    -setDocument = Sizzle.setDocument = function( node ) {
    -	var doc = node ? node.ownerDocument || node : preferredDoc,
    -		parent = doc.defaultView;
    -
    -	// If no document and documentElement is available, return
    -	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
    -		return document;
    -	}
    -
    -	// Set our document
    -	document = doc;
    -	docElem = doc.documentElement;
    -
    -	// Support tests
    -	documentIsHTML = !isXML( doc );
    -
    -	// Support: IE>8
    -	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
    -	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
    -	// IE6-8 do not support the defaultView property so parent will be undefined
    -	if ( parent && parent.attachEvent && parent !== parent.top ) {
    -		parent.attachEvent( "onbeforeunload", function() {
    -			setDocument();
    -		});
    -	}
    -
    -	/* Attributes
    -	---------------------------------------------------------------------- */
    -
    -	// Support: IE<8
    -	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
    -	support.attributes = assert(function( div ) {
    -		div.className = "i";
    -		return !div.getAttribute("className");
    -	});
    -
    -	/* getElement(s)By*
    -	---------------------------------------------------------------------- */
    -
    -	// Check if getElementsByTagName("*") returns only elements
    -	support.getElementsByTagName = assert(function( div ) {
    -		div.appendChild( doc.createComment("") );
    -		return !div.getElementsByTagName("*").length;
    -	});
    -
    -	// Check if getElementsByClassName can be trusted
    -	support.getElementsByClassName = assert(function( div ) {
    -		div.innerHTML = "<div class='a'></div><div class='a i'></div>";
    -
    -		// Support: Safari<4
    -		// Catch class over-caching
    -		div.firstChild.className = "i";
    -		// Support: Opera<10
    -		// Catch gEBCN failure to find non-leading classes
    -		return div.getElementsByClassName("i").length === 2;
    -	});
    -
    -	// Support: IE<10
    -	// Check if getElementById returns elements by name
    -	// The broken getElementById methods don't pick up programatically-set names,
    -	// so use a roundabout getElementsByName test
    -	support.getById = assert(function( div ) {
    -		docElem.appendChild( div ).id = expando;
    -		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
    -	});
    -
    -	// ID find and filter
    -	if ( support.getById ) {
    -		Expr.find["ID"] = function( id, context ) {
    -			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
    -				var m = context.getElementById( id );
    -				// Check parentNode to catch when Blackberry 4.6 returns
    -				// nodes that are no longer in the document #6963
    -				return m && m.parentNode ? [m] : [];
    -			}
    -		};
    -		Expr.filter["ID"] = function( id ) {
    -			var attrId = id.replace( runescape, funescape );
    -			return function( elem ) {
    -				return elem.getAttribute("id") === attrId;
    -			};
    -		};
    -	} else {
    -		// Support: IE6/7
    -		// getElementById is not reliable as a find shortcut
    -		delete Expr.find["ID"];
    -
    -		Expr.filter["ID"] =  function( id ) {
    -			var attrId = id.replace( runescape, funescape );
    -			return function( elem ) {
    -				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
    -				return node && node.value === attrId;
    -			};
    -		};
    -	}
    -
    -	// Tag
    -	Expr.find["TAG"] = support.getElementsByTagName ?
    -		function( tag, context ) {
    -			if ( typeof context.getElementsByTagName !== strundefined ) {
    -				return context.getElementsByTagName( tag );
    -			}
    -		} :
    -		function( tag, context ) {
    -			var elem,
    -				tmp = [],
    -				i = 0,
    -				results = context.getElementsByTagName( tag );
    -
    -			// Filter out possible comments
    -			if ( tag === "*" ) {
    -				while ( (elem = results[i++]) ) {
    -					if ( elem.nodeType === 1 ) {
    -						tmp.push( elem );
    -					}
    -				}
    -
    -				return tmp;
    -			}
    -			return results;
    -		};
    -
    -	// Class
    -	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
    -		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
    -			return context.getElementsByClassName( className );
    -		}
    -	};
    -
    -	/* QSA/matchesSelector
    -	---------------------------------------------------------------------- */
    -
    -	// QSA and matchesSelector support
    -
    -	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
    -	rbuggyMatches = [];
    -
    -	// qSa(:focus) reports false when true (Chrome 21)
    -	// We allow this because of a bug in IE8/9 that throws an error
    -	// whenever `document.activeElement` is accessed on an iframe
    -	// So, we allow :focus to pass through QSA all the time to avoid the IE error
    -	// See http://bugs.jquery.com/ticket/13378
    -	rbuggyQSA = [];
    -
    -	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
    -		// Build QSA regex
    -		// Regex strategy adopted from Diego Perini
    -		assert(function( div ) {
    -			// Select is set to empty string on purpose
    -			// This is to test IE's treatment of not explicitly
    -			// setting a boolean content attribute,
    -			// since its presence should be enough
    -			// http://bugs.jquery.com/ticket/12359
    -			div.innerHTML = "<select><option selected=''></option></select>";
    -
    -			// Support: IE8
    -			// Boolean attributes and "value" are not treated correctly
    -			if ( !div.querySelectorAll("[selected]").length ) {
    -				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
    -			}
    -
    -			// Webkit/Opera - :checked should return selected option elements
    -			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
    -			// IE8 throws error here and will not see later tests
    -			if ( !div.querySelectorAll(":checked").length ) {
    -				rbuggyQSA.push(":checked");
    -			}
    -		});
    -
    -		assert(function( div ) {
    -
    -			// Support: Opera 10-12/IE8
    -			// ^= $= *= and empty values
    -			// Should not select anything
    -			// Support: Windows 8 Native Apps
    -			// The type attribute is restricted during .innerHTML assignment
    -			var input = doc.createElement("input");
    -			input.setAttribute( "type", "hidden" );
    -			div.appendChild( input ).setAttribute( "t", "" );
    -
    -			if ( div.querySelectorAll("[t^='']").length ) {
    -				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
    -			}
    -
    -			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
    -			// IE8 throws error here and will not see later tests
    -			if ( !div.querySelectorAll(":enabled").length ) {
    -				rbuggyQSA.push( ":enabled", ":disabled" );
    -			}
    -
    -			// Opera 10-11 does not throw on post-comma invalid pseudos
    -			div.querySelectorAll("*,:x");
    -			rbuggyQSA.push(",.*:");
    -		});
    -	}
    -
    -	if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||
    -		docElem.mozMatchesSelector ||
    -		docElem.oMatchesSelector ||
    -		docElem.msMatchesSelector) )) ) {
    -
    -		assert(function( div ) {
    -			// Check to see if it's possible to do matchesSelector
    -			// on a disconnected node (IE 9)
    -			support.disconnectedMatch = matches.call( div, "div" );
    -
    -			// This should fail with an exception
    -			// Gecko does not error, returns false instead
    -			matches.call( div, "[s!='']:x" );
    -			rbuggyMatches.push( "!=", pseudos );
    -		});
    -	}
    -
    -	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
    -	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
    -
    -	/* Contains
    -	---------------------------------------------------------------------- */
    -
    -	// Element contains another
    -	// Purposefully does not implement inclusive descendent
    -	// As in, an element does not contain itself
    -	contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?
    -		function( a, b ) {
    -			var adown = a.nodeType === 9 ? a.documentElement : a,
    -				bup = b && b.parentNode;
    -			return a === bup || !!( bup && bup.nodeType === 1 && (
    -				adown.contains ?
    -					adown.contains( bup ) :
    -					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
    -			));
    -		} :
    -		function( a, b ) {
    -			if ( b ) {
    -				while ( (b = b.parentNode) ) {
    -					if ( b === a ) {
    -						return true;
    -					}
    -				}
    -			}
    -			return false;
    -		};
    -
    -	/* Sorting
    -	---------------------------------------------------------------------- */
    -
    -	// Document order sorting
    -	sortOrder = docElem.compareDocumentPosition ?
    -	function( a, b ) {
    -
    -		// Flag for duplicate removal
    -		if ( a === b ) {
    -			hasDuplicate = true;
    -			return 0;
    -		}
    -
    -		var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
    -
    -		if ( compare ) {
    -			// Disconnected nodes
    -			if ( compare & 1 ||
    -				(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
    -
    -				// Choose the first element that is related to our preferred document
    -				if ( a === doc || contains(preferredDoc, a) ) {
    -					return -1;
    -				}
    -				if ( b === doc || contains(preferredDoc, b) ) {
    -					return 1;
    -				}
    -
    -				// Maintain original order
    -				return sortInput ?
    -					( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
    -					0;
    -			}
    -
    -			return compare & 4 ? -1 : 1;
    -		}
    -
    -		// Not directly comparable, sort on existence of method
    -		return a.compareDocumentPosition ? -1 : 1;
    -	} :
    -	function( a, b ) {
    -		var cur,
    -			i = 0,
    -			aup = a.parentNode,
    -			bup = b.parentNode,
    -			ap = [ a ],
    -			bp = [ b ];
    -
    -		// Exit early if the nodes are identical
    -		if ( a === b ) {
    -			hasDuplicate = true;
    -			return 0;
    -
    -		// Parentless nodes are either documents or disconnected
    -		} else if ( !aup || !bup ) {
    -			return a === doc ? -1 :
    -				b === doc ? 1 :
    -				aup ? -1 :
    -				bup ? 1 :
    -				sortInput ?
    -				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
    -				0;
    -
    -		// If the nodes are siblings, we can do a quick check
    -		} else if ( aup === bup ) {
    -			return siblingCheck( a, b );
    -		}
    -
    -		// Otherwise we need full lists of their ancestors for comparison
    -		cur = a;
    -		while ( (cur = cur.parentNode) ) {
    -			ap.unshift( cur );
    -		}
    -		cur = b;
    -		while ( (cur = cur.parentNode) ) {
    -			bp.unshift( cur );
    -		}
    -
    -		// Walk down the tree looking for a discrepancy
    -		while ( ap[i] === bp[i] ) {
    -			i++;
    -		}
    -
    -		return i ?
    -			// Do a sibling check if the nodes have a common ancestor
    -			siblingCheck( ap[i], bp[i] ) :
    -
    -			// Otherwise nodes in our document sort first
    -			ap[i] === preferredDoc ? -1 :
    -			bp[i] === preferredDoc ? 1 :
    -			0;
    -	};
    -
    -	return doc;
    -};
    -
    -Sizzle.matches = function( expr, elements ) {
    -	return Sizzle( expr, null, null, elements );
    -};
    -
    -Sizzle.matchesSelector = function( elem, expr ) {
    -	// Set document vars if needed
    -	if ( ( elem.ownerDocument || elem ) !== document ) {
    -		setDocument( elem );
    -	}
    -
    -	// Make sure that attribute selectors are quoted
    -	expr = expr.replace( rattributeQuotes, "='$1']" );
    -
    -	if ( support.matchesSelector && documentIsHTML &&
    -		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
    -		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
    -
    -		try {
    -			var ret = matches.call( elem, expr );
    -
    -			// IE 9's matchesSelector returns false on disconnected nodes
    -			if ( ret || support.disconnectedMatch ||
    -					// As well, disconnected nodes are said to be in a document
    -					// fragment in IE 9
    -					elem.document && elem.document.nodeType !== 11 ) {
    -				return ret;
    -			}
    -		} catch(e) {}
    -	}
    -
    -	return Sizzle( expr, document, null, [elem] ).length > 0;
    -};
    -
    -Sizzle.contains = function( context, elem ) {
    -	// Set document vars if needed
    -	if ( ( context.ownerDocument || context ) !== document ) {
    -		setDocument( context );
    -	}
    -	return contains( context, elem );
    -};
    -
    -Sizzle.attr = function( elem, name ) {
    -	// Set document vars if needed
    -	if ( ( elem.ownerDocument || elem ) !== document ) {
    -		setDocument( elem );
    -	}
    -
    -	var fn = Expr.attrHandle[ name.toLowerCase() ],
    -		// Don't get fooled by Object.prototype properties (jQuery #13807)
    -		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
    -			fn( elem, name, !documentIsHTML ) :
    -			undefined;
    -
    -	return val === undefined ?
    -		support.attributes || !documentIsHTML ?
    -			elem.getAttribute( name ) :
    -			(val = elem.getAttributeNode(name)) && val.specified ?
    -				val.value :
    -				null :
    -		val;
    -};
    -
    -Sizzle.error = function( msg ) {
    -	throw new Error( "Syntax error, unrecognized expression: " + msg );
    -};
    -
    -/**
    - * Document sorting and removing duplicates
    - * @param {ArrayLike} results
    - */
    -Sizzle.uniqueSort = function( results ) {
    -	var elem,
    -		duplicates = [],
    -		j = 0,
    -		i = 0;
    -
    -	// Unless we *know* we can detect duplicates, assume their presence
    -	hasDuplicate = !support.detectDuplicates;
    -	sortInput = !support.sortStable && results.slice( 0 );
    -	results.sort( sortOrder );
    -
    -	if ( hasDuplicate ) {
    -		while ( (elem = results[i++]) ) {
    -			if ( elem === results[ i ] ) {
    -				j = duplicates.push( i );
    -			}
    -		}
    -		while ( j-- ) {
    -			results.splice( duplicates[ j ], 1 );
    -		}
    -	}
    -
    -	return results;
    -};
    -
    -/**
    - * Utility function for retrieving the text value of an array of DOM nodes
    - * @param {Array|Element} elem
    - */
    -getText = Sizzle.getText = function( elem ) {
    -	var node,
    -		ret = "",
    -		i = 0,
    -		nodeType = elem.nodeType;
    -
    -	if ( !nodeType ) {
    -		// If no nodeType, this is expected to be an array
    -		for ( ; (node = elem[i]); i++ ) {
    -			// Do not traverse comment nodes
    -			ret += getText( node );
    -		}
    -	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
    -		// Use textContent for elements
    -		// innerText usage removed for consistency of new lines (see #11153)
    -		if ( typeof elem.textContent === "string" ) {
    -			return elem.textContent;
    -		} else {
    -			// Traverse its children
    -			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
    -				ret += getText( elem );
    -			}
    -		}
    -	} else if ( nodeType === 3 || nodeType === 4 ) {
    -		return elem.nodeValue;
    -	}
    -	// Do not include comment or processing instruction nodes
    -
    -	return ret;
    -};
    -
    -Expr = Sizzle.selectors = {
    -
    -	// Can be adjusted by the user
    -	cacheLength: 50,
    -
    -	createPseudo: markFunction,
    -
    -	match: matchExpr,
    -
    -	attrHandle: {},
    -
    -	find: {},
    -
    -	relative: {
    -		">": { dir: "parentNode", first: true },
    -		" ": { dir: "parentNode" },
    -		"+": { dir: "previousSibling", first: true },
    -		"~": { dir: "previousSibling" }
    -	},
    -
    -	preFilter: {
    -		"ATTR": function( match ) {
    -			match[1] = match[1].replace( runescape, funescape );
    -
    -			// Move the given value to match[3] whether quoted or unquoted
    -			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
    -
    -			if ( match[2] === "~=" ) {
    -				match[3] = " " + match[3] + " ";
    -			}
    -
    -			return match.slice( 0, 4 );
    -		},
    -
    -		"CHILD": function( match ) {
    -			/* matches from matchExpr["CHILD"]
    -				1 type (only|nth|...)
    -				2 what (child|of-type)
    -				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
    -				4 xn-component of xn+y argument ([+-]?\d*n|)
    -				5 sign of xn-component
    -				6 x of xn-component
    -				7 sign of y-component
    -				8 y of y-component
    -			*/
    -			match[1] = match[1].toLowerCase();
    -
    -			if ( match[1].slice( 0, 3 ) === "nth" ) {
    -				// nth-* requires argument
    -				if ( !match[3] ) {
    -					Sizzle.error( match[0] );
    -				}
    -
    -				// numeric x and y parameters for Expr.filter.CHILD
    -				// remember that false/true cast respectively to 0/1
    -				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
    -				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
    -
    -			// other types prohibit arguments
    -			} else if ( match[3] ) {
    -				Sizzle.error( match[0] );
    -			}
    -
    -			return match;
    -		},
    -
    -		"PSEUDO": function( match ) {
    -			var excess,
    -				unquoted = !match[5] && match[2];
    -
    -			if ( matchExpr["CHILD"].test( match[0] ) ) {
    -				return null;
    -			}
    -
    -			// Accept quoted arguments as-is
    -			if ( match[3] && match[4] !== undefined ) {
    -				match[2] = match[4];
    -
    -			// Strip excess characters from unquoted arguments
    -			} else if ( unquoted && rpseudo.test( unquoted ) &&
    -				// Get excess from tokenize (recursively)
    -				(excess = tokenize( unquoted, true )) &&
    -				// advance to the next closing parenthesis
    -				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
    -
    -				// excess is a negative index
    -				match[0] = match[0].slice( 0, excess );
    -				match[2] = unquoted.slice( 0, excess );
    -			}
    -
    -			// Return only captures needed by the pseudo filter method (type and argument)
    -			return match.slice( 0, 3 );
    -		}
    -	},
    -
    -	filter: {
    -
    -		"TAG": function( nodeNameSelector ) {
    -			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
    -			return nodeNameSelector === "*" ?
    -				function() { return true; } :
    -				function( elem ) {
    -					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
    -				};
    -		},
    -
    -		"CLASS": function( className ) {
    -			var pattern = classCache[ className + " " ];
    -
    -			return pattern ||
    -				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
    -				classCache( className, function( elem ) {
    -					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
    -				});
    -		},
    -
    -		"ATTR": function( name, operator, check ) {
    -			return function( elem ) {
    -				var result = Sizzle.attr( elem, name );
    -
    -				if ( result == null ) {
    -					return operator === "!=";
    -				}
    -				if ( !operator ) {
    -					return true;
    -				}
    -
    -				result += "";
    -
    -				return operator === "=" ? result === check :
    -					operator === "!=" ? result !== check :
    -					operator === "^=" ? check && result.indexOf( check ) === 0 :
    -					operator === "*=" ? check && result.indexOf( check ) > -1 :
    -					operator === "$=" ? check && result.slice( -check.length ) === check :
    -					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
    -					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
    -					false;
    -			};
    -		},
    -
    -		"CHILD": function( type, what, argument, first, last ) {
    -			var simple = type.slice( 0, 3 ) !== "nth",
    -				forward = type.slice( -4 ) !== "last",
    -				ofType = what === "of-type";
    -
    -			return first === 1 && last === 0 ?
    -
    -				// Shortcut for :nth-*(n)
    -				function( elem ) {
    -					return !!elem.parentNode;
    -				} :
    -
    -				function( elem, context, xml ) {
    -					var cache, outerCache, node, diff, nodeIndex, start,
    -						dir = simple !== forward ? "nextSibling" : "previousSibling",
    -						parent = elem.parentNode,
    -						name = ofType && elem.nodeName.toLowerCase(),
    -						useCache = !xml && !ofType;
    -
    -					if ( parent ) {
    -
    -						// :(first|last|only)-(child|of-type)
    -						if ( simple ) {
    -							while ( dir ) {
    -								node = elem;
    -								while ( (node = node[ dir ]) ) {
    -									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
    -										return false;
    -									}
    -								}
    -								// Reverse direction for :only-* (if we haven't yet done so)
    -								start = dir = type === "only" && !start && "nextSibling";
    -							}
    -							return true;
    -						}
    -
    -						start = [ forward ? parent.firstChild : parent.lastChild ];
    -
    -						// non-xml :nth-child(...) stores cache data on `parent`
    -						if ( forward && useCache ) {
    -							// Seek `elem` from a previously-cached index
    -							outerCache = parent[ expando ] || (parent[ expando ] = {});
    -							cache = outerCache[ type ] || [];
    -							nodeIndex = cache[0] === dirruns && cache[1];
    -							diff = cache[0] === dirruns && cache[2];
    -							node = nodeIndex && parent.childNodes[ nodeIndex ];
    -
    -							while ( (node = ++nodeIndex && node && node[ dir ] ||
    -
    -								// Fallback to seeking `elem` from the start
    -								(diff = nodeIndex = 0) || start.pop()) ) {
    -
    -								// When found, cache indexes on `parent` and break
    -								if ( node.nodeType === 1 && ++diff && node === elem ) {
    -									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
    -									break;
    -								}
    -							}
    -
    -						// Use previously-cached element index if available
    -						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
    -							diff = cache[1];
    -
    -						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
    -						} else {
    -							// Use the same loop as above to seek `elem` from the start
    -							while ( (node = ++nodeIndex && node && node[ dir ] ||
    -								(diff = nodeIndex = 0) || start.pop()) ) {
    -
    -								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
    -									// Cache the index of each encountered element
    -									if ( useCache ) {
    -										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
    -									}
    -
    -									if ( node === elem ) {
    -										break;
    -									}
    -								}
    -							}
    -						}
    -
    -						// Incorporate the offset, then check against cycle size
    -						diff -= last;
    -						return diff === first || ( diff % first === 0 && diff / first >= 0 );
    -					}
    -				};
    -		},
    -
    -		"PSEUDO": function( pseudo, argument ) {
    -			// pseudo-class names are case-insensitive
    -			// http://www.w3.org/TR/selectors/#pseudo-classes
    -			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
    -			// Remember that setFilters inherits from pseudos
    -			var args,
    -				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
    -					Sizzle.error( "unsupported pseudo: " + pseudo );
    -
    -			// The user may use createPseudo to indicate that
    -			// arguments are needed to create the filter function
    -			// just as Sizzle does
    -			if ( fn[ expando ] ) {
    -				return fn( argument );
    -			}
    -
    -			// But maintain support for old signatures
    -			if ( fn.length > 1 ) {
    -				args = [ pseudo, pseudo, "", argument ];
    -				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
    -					markFunction(function( seed, matches ) {
    -						var idx,
    -							matched = fn( seed, argument ),
    -							i = matched.length;
    -						while ( i-- ) {
    -							idx = indexOf.call( seed, matched[i] );
    -							seed[ idx ] = !( matches[ idx ] = matched[i] );
    -						}
    -					}) :
    -					function( elem ) {
    -						return fn( elem, 0, args );
    -					};
    -			}
    -
    -			return fn;
    -		}
    -	},
    -
    -	pseudos: {
    -		// Potentially complex pseudos
    -		"not": markFunction(function( selector ) {
    -			// Trim the selector passed to compile
    -			// to avoid treating leading and trailing
    -			// spaces as combinators
    -			var input = [],
    -				results = [],
    -				matcher = compile( selector.replace( rtrim, "$1" ) );
    -
    -			return matcher[ expando ] ?
    -				markFunction(function( seed, matches, context, xml ) {
    -					var elem,
    -						unmatched = matcher( seed, null, xml, [] ),
    -						i = seed.length;
    -
    -					// Match elements unmatched by `matcher`
    -					while ( i-- ) {
    -						if ( (elem = unmatched[i]) ) {
    -							seed[i] = !(matches[i] = elem);
    -						}
    -					}
    -				}) :
    -				function( elem, context, xml ) {
    -					input[0] = elem;
    -					matcher( input, null, xml, results );
    -					return !results.pop();
    -				};
    -		}),
    -
    -		"has": markFunction(function( selector ) {
    -			return function( elem ) {
    -				return Sizzle( selector, elem ).length > 0;
    -			};
    -		}),
    -
    -		"contains": markFunction(function( text ) {
    -			return function( elem ) {
    -				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
    -			};
    -		}),
    -
    -		// "Whether an element is represented by a :lang() selector
    -		// is based solely on the element's language value
    -		// being equal to the identifier C,
    -		// or beginning with the identifier C immediately followed by "-".
    -		// The matching of C against the element's language value is performed case-insensitively.
    -		// The identifier C does not have to be a valid language name."
    -		// http://www.w3.org/TR/selectors/#lang-pseudo
    -		"lang": markFunction( function( lang ) {
    -			// lang value must be a valid identifier
    -			if ( !ridentifier.test(lang || "") ) {
    -				Sizzle.error( "unsupported lang: " + lang );
    -			}
    -			lang = lang.replace( runescape, funescape ).toLowerCase();
    -			return function( elem ) {
    -				var elemLang;
    -				do {
    -					if ( (elemLang = documentIsHTML ?
    -						elem.lang :
    -						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
    -
    -						elemLang = elemLang.toLowerCase();
    -						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
    -					}
    -				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
    -				return false;
    -			};
    -		}),
    -
    -		// Miscellaneous
    -		"target": function( elem ) {
    -			var hash = window.location && window.location.hash;
    -			return hash && hash.slice( 1 ) === elem.id;
    -		},
    -
    -		"root": function( elem ) {
    -			return elem === docElem;
    -		},
    -
    -		"focus": function( elem ) {
    -			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
    -		},
    -
    -		// Boolean properties
    -		"enabled": function( elem ) {
    -			return elem.disabled === false;
    -		},
    -
    -		"disabled": function( elem ) {
    -			return elem.disabled === true;
    -		},
    -
    -		"checked": function( elem ) {
    -			// In CSS3, :checked should return both checked and selected elements
    -			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
    -			var nodeName = elem.nodeName.toLowerCase();
    -			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
    -		},
    -
    -		"selected": function( elem ) {
    -			// Accessing this property makes selected-by-default
    -			// options in Safari work properly
    -			if ( elem.parentNode ) {
    -				elem.parentNode.selectedIndex;
    -			}
    -
    -			return elem.selected === true;
    -		},
    -
    -		// Contents
    -		"empty": function( elem ) {
    -			// http://www.w3.org/TR/selectors/#empty-pseudo
    -			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
    -			//   not comment, processing instructions, or others
    -			// Thanks to Diego Perini for the nodeName shortcut
    -			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
    -			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
    -				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
    -					return false;
    -				}
    -			}
    -			return true;
    -		},
    -
    -		"parent": function( elem ) {
    -			return !Expr.pseudos["empty"]( elem );
    -		},
    -
    -		// Element/input types
    -		"header": function( elem ) {
    -			return rheader.test( elem.nodeName );
    -		},
    -
    -		"input": function( elem ) {
    -			return rinputs.test( elem.nodeName );
    -		},
    -
    -		"button": function( elem ) {
    -			var name = elem.nodeName.toLowerCase();
    -			return name === "input" && elem.type === "button" || name === "button";
    -		},
    -
    -		"text": function( elem ) {
    -			var attr;
    -			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
    -			// use getAttribute instead to test this case
    -			return elem.nodeName.toLowerCase() === "input" &&
    -				elem.type === "text" &&
    -				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
    -		},
    -
    -		// Position-in-collection
    -		"first": createPositionalPseudo(function() {
    -			return [ 0 ];
    -		}),
    -
    -		"last": createPositionalPseudo(function( matchIndexes, length ) {
    -			return [ length - 1 ];
    -		}),
    -
    -		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
    -			return [ argument < 0 ? argument + length : argument ];
    -		}),
    -
    -		"even": createPositionalPseudo(function( matchIndexes, length ) {
    -			var i = 0;
    -			for ( ; i < length; i += 2 ) {
    -				matchIndexes.push( i );
    -			}
    -			return matchIndexes;
    -		}),
    -
    -		"odd": createPositionalPseudo(function( matchIndexes, length ) {
    -			var i = 1;
    -			for ( ; i < length; i += 2 ) {
    -				matchIndexes.push( i );
    -			}
    -			return matchIndexes;
    -		}),
    -
    -		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
    -			var i = argument < 0 ? argument + length : argument;
    -			for ( ; --i >= 0; ) {
    -				matchIndexes.push( i );
    -			}
    -			return matchIndexes;
    -		}),
    -
    -		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
    -			var i = argument < 0 ? argument + length : argument;
    -			for ( ; ++i < length; ) {
    -				matchIndexes.push( i );
    -			}
    -			return matchIndexes;
    -		})
    -	}
    -};
    -
    -Expr.pseudos["nth"] = Expr.pseudos["eq"];
    -
    -// Add button/input type pseudos
    -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
    -	Expr.pseudos[ i ] = createInputPseudo( i );
    -}
    -for ( i in { submit: true, reset: true } ) {
    -	Expr.pseudos[ i ] = createButtonPseudo( i );
    -}
    -
    -// Easy API for creating new setFilters
    -function setFilters() {}
    -setFilters.prototype = Expr.filters = Expr.pseudos;
    -Expr.setFilters = new setFilters();
    -
    -function tokenize( selector, parseOnly ) {
    -	var matched, match, tokens, type,
    -		soFar, groups, preFilters,
    -		cached = tokenCache[ selector + " " ];
    -
    -	if ( cached ) {
    -		return parseOnly ? 0 : cached.slice( 0 );
    -	}
    -
    -	soFar = selector;
    -	groups = [];
    -	preFilters = Expr.preFilter;
    -
    -	while ( soFar ) {
    -
    -		// Comma and first run
    -		if ( !matched || (match = rcomma.exec( soFar )) ) {
    -			if ( match ) {
    -				// Don't consume trailing commas as valid
    -				soFar = soFar.slice( match[0].length ) || soFar;
    -			}
    -			groups.push( tokens = [] );
    -		}
    -
    -		matched = false;
    -
    -		// Combinators
    -		if ( (match = rcombinators.exec( soFar )) ) {
    -			matched = match.shift();
    -			tokens.push({
    -				value: matched,
    -				// Cast descendant combinators to space
    -				type: match[0].replace( rtrim, " " )
    -			});
    -			soFar = soFar.slice( matched.length );
    -		}
    -
    -		// Filters
    -		for ( type in Expr.filter ) {
    -			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
    -				(match = preFilters[ type ]( match ))) ) {
    -				matched = match.shift();
    -				tokens.push({
    -					value: matched,
    -					type: type,
    -					matches: match
    -				});
    -				soFar = soFar.slice( matched.length );
    -			}
    -		}
    -
    -		if ( !matched ) {
    -			break;
    -		}
    -	}
    -
    -	// Return the length of the invalid excess
    -	// if we're just parsing
    -	// Otherwise, throw an error or return tokens
    -	return parseOnly ?
    -		soFar.length :
    -		soFar ?
    -			Sizzle.error( selector ) :
    -			// Cache the tokens
    -			tokenCache( selector, groups ).slice( 0 );
    -}
    -
    -function toSelector( tokens ) {
    -	var i = 0,
    -		len = tokens.length,
    -		selector = "";
    -	for ( ; i < len; i++ ) {
    -		selector += tokens[i].value;
    -	}
    -	return selector;
    -}
    -
    -function addCombinator( matcher, combinator, base ) {
    -	var dir = combinator.dir,
    -		checkNonElements = base && dir === "parentNode",
    -		doneName = done++;
    -
    -	return combinator.first ?
    -		// Check against closest ancestor/preceding element
    -		function( elem, context, xml ) {
    -			while ( (elem = elem[ dir ]) ) {
    -				if ( elem.nodeType === 1 || checkNonElements ) {
    -					return matcher( elem, context, xml );
    -				}
    -			}
    -		} :
    -
    -		// Check against all ancestor/preceding elements
    -		function( elem, context, xml ) {
    -			var data, cache, outerCache,
    -				dirkey = dirruns + " " + doneName;
    -
    -			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
    -			if ( xml ) {
    -				while ( (elem = elem[ dir ]) ) {
    -					if ( elem.nodeType === 1 || checkNonElements ) {
    -						if ( matcher( elem, context, xml ) ) {
    -							return true;
    -						}
    -					}
    -				}
    -			} else {
    -				while ( (elem = elem[ dir ]) ) {
    -					if ( elem.nodeType === 1 || checkNonElements ) {
    -						outerCache = elem[ expando ] || (elem[ expando ] = {});
    -						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
    -							if ( (data = cache[1]) === true || data === cachedruns ) {
    -								return data === true;
    -							}
    -						} else {
    -							cache = outerCache[ dir ] = [ dirkey ];
    -							cache[1] = matcher( elem, context, xml ) || cachedruns;
    -							if ( cache[1] === true ) {
    -								return true;
    -							}
    -						}
    -					}
    -				}
    -			}
    -		};
    -}
    -
    -function elementMatcher( matchers ) {
    -	return matchers.length > 1 ?
    -		function( elem, context, xml ) {
    -			var i = matchers.length;
    -			while ( i-- ) {
    -				if ( !matchers[i]( elem, context, xml ) ) {
    -					return false;
    -				}
    -			}
    -			return true;
    -		} :
    -		matchers[0];
    -}
    -
    -function condense( unmatched, map, filter, context, xml ) {
    -	var elem,
    -		newUnmatched = [],
    -		i = 0,
    -		len = unmatched.length,
    -		mapped = map != null;
    -
    -	for ( ; i < len; i++ ) {
    -		if ( (elem = unmatched[i]) ) {
    -			if ( !filter || filter( elem, context, xml ) ) {
    -				newUnmatched.push( elem );
    -				if ( mapped ) {
    -					map.push( i );
    -				}
    -			}
    -		}
    -	}
    -
    -	return newUnmatched;
    -}
    -
    -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
    -	if ( postFilter && !postFilter[ expando ] ) {
    -		postFilter = setMatcher( postFilter );
    -	}
    -	if ( postFinder && !postFinder[ expando ] ) {
    -		postFinder = setMatcher( postFinder, postSelector );
    -	}
    -	return markFunction(function( seed, results, context, xml ) {
    -		var temp, i, elem,
    -			preMap = [],
    -			postMap = [],
    -			preexisting = results.length,
    -
    -			// Get initial elements from seed or context
    -			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
    -
    -			// Prefilter to get matcher input, preserving a map for seed-results synchronization
    -			matcherIn = preFilter && ( seed || !selector ) ?
    -				condense( elems, preMap, preFilter, context, xml ) :
    -				elems,
    -
    -			matcherOut = matcher ?
    -				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
    -				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
    -
    -					// ...intermediate processing is necessary
    -					[] :
    -
    -					// ...otherwise use results directly
    -					results :
    -				matcherIn;
    -
    -		// Find primary matches
    -		if ( matcher ) {
    -			matcher( matcherIn, matcherOut, context, xml );
    -		}
    -
    -		// Apply postFilter
    -		if ( postFilter ) {
    -			temp = condense( matcherOut, postMap );
    -			postFilter( temp, [], context, xml );
    -
    -			// Un-match failing elements by moving them back to matcherIn
    -			i = temp.length;
    -			while ( i-- ) {
    -				if ( (elem = temp[i]) ) {
    -					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
    -				}
    -			}
    -		}
    -
    -		if ( seed ) {
    -			if ( postFinder || preFilter ) {
    -				if ( postFinder ) {
    -					// Get the final matcherOut by condensing this intermediate into postFinder contexts
    -					temp = [];
    -					i = matcherOut.length;
    -					while ( i-- ) {
    -						if ( (elem = matcherOut[i]) ) {
    -							// Restore matcherIn since elem is not yet a final match
    -							temp.push( (matcherIn[i] = elem) );
    -						}
    -					}
    -					postFinder( null, (matcherOut = []), temp, xml );
    -				}
    -
    -				// Move matched elements from seed to results to keep them synchronized
    -				i = matcherOut.length;
    -				while ( i-- ) {
    -					if ( (elem = matcherOut[i]) &&
    -						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
    -
    -						seed[temp] = !(results[temp] = elem);
    -					}
    -				}
    -			}
    -
    -		// Add elements to results, through postFinder if defined
    -		} else {
    -			matcherOut = condense(
    -				matcherOut === results ?
    -					matcherOut.splice( preexisting, matcherOut.length ) :
    -					matcherOut
    -			);
    -			if ( postFinder ) {
    -				postFinder( null, results, matcherOut, xml );
    -			} else {
    -				push.apply( results, matcherOut );
    -			}
    -		}
    -	});
    -}
    -
    -function matcherFromTokens( tokens ) {
    -	var checkContext, matcher, j,
    -		len = tokens.length,
    -		leadingRelative = Expr.relative[ tokens[0].type ],
    -		implicitRelative = leadingRelative || Expr.relative[" "],
    -		i = leadingRelative ? 1 : 0,
    -
    -		// The foundational matcher ensures that elements are reachable from top-level context(s)
    -		matchContext = addCombinator( function( elem ) {
    -			return elem === checkContext;
    -		}, implicitRelative, true ),
    -		matchAnyContext = addCombinator( function( elem ) {
    -			return indexOf.call( checkContext, elem ) > -1;
    -		}, implicitRelative, true ),
    -		matchers = [ function( elem, context, xml ) {
    -			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
    -				(checkContext = context).nodeType ?
    -					matchContext( elem, context, xml ) :
    -					matchAnyContext( elem, context, xml ) );
    -		} ];
    -
    -	for ( ; i < len; i++ ) {
    -		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
    -			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
    -		} else {
    -			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
    -
    -			// Return special upon seeing a positional matcher
    -			if ( matcher[ expando ] ) {
    -				// Find the next relative operator (if any) for proper handling
    -				j = ++i;
    -				for ( ; j < len; j++ ) {
    -					if ( Expr.relative[ tokens[j].type ] ) {
    -						break;
    -					}
    -				}
    -				return setMatcher(
    -					i > 1 && elementMatcher( matchers ),
    -					i > 1 && toSelector(
    -						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
    -						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
    -					).replace( rtrim, "$1" ),
    -					matcher,
    -					i < j && matcherFromTokens( tokens.slice( i, j ) ),
    -					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
    -					j < len && toSelector( tokens )
    -				);
    -			}
    -			matchers.push( matcher );
    -		}
    -	}
    -
    -	return elementMatcher( matchers );
    -}
    -
    -function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
    -	// A counter to specify which element is currently being matched
    -	var matcherCachedRuns = 0,
    -		bySet = setMatchers.length > 0,
    -		byElement = elementMatchers.length > 0,
    -		superMatcher = function( seed, context, xml, results, expandContext ) {
    -			var elem, j, matcher,
    -				setMatched = [],
    -				matchedCount = 0,
    -				i = "0",
    -				unmatched = seed && [],
    -				outermost = expandContext != null,
    -				contextBackup = outermostContext,
    -				// We must always have either seed elements or context
    -				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
    -				// Use integer dirruns iff this is the outermost matcher
    -				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
    -
    -			if ( outermost ) {
    -				outermostContext = context !== document && context;
    -				cachedruns = matcherCachedRuns;
    -			}
    -
    -			// Add elements passing elementMatchers directly to results
    -			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
    -			for ( ; (elem = elems[i]) != null; i++ ) {
    -				if ( byElement && elem ) {
    -					j = 0;
    -					while ( (matcher = elementMatchers[j++]) ) {
    -						if ( matcher( elem, context, xml ) ) {
    -							results.push( elem );
    -							break;
    -						}
    -					}
    -					if ( outermost ) {
    -						dirruns = dirrunsUnique;
    -						cachedruns = ++matcherCachedRuns;
    -					}
    -				}
    -
    -				// Track unmatched elements for set filters
    -				if ( bySet ) {
    -					// They will have gone through all possible matchers
    -					if ( (elem = !matcher && elem) ) {
    -						matchedCount--;
    -					}
    -
    -					// Lengthen the array for every element, matched or not
    -					if ( seed ) {
    -						unmatched.push( elem );
    -					}
    -				}
    -			}
    -
    -			// Apply set filters to unmatched elements
    -			matchedCount += i;
    -			if ( bySet && i !== matchedCount ) {
    -				j = 0;
    -				while ( (matcher = setMatchers[j++]) ) {
    -					matcher( unmatched, setMatched, context, xml );
    -				}
    -
    -				if ( seed ) {
    -					// Reintegrate element matches to eliminate the need for sorting
    -					if ( matchedCount > 0 ) {
    -						while ( i-- ) {
    -							if ( !(unmatched[i] || setMatched[i]) ) {
    -								setMatched[i] = pop.call( results );
    -							}
    -						}
    -					}
    -
    -					// Discard index placeholder values to get only actual matches
    -					setMatched = condense( setMatched );
    -				}
    -
    -				// Add matches to results
    -				push.apply( results, setMatched );
    -
    -				// Seedless set matches succeeding multiple successful matchers stipulate sorting
    -				if ( outermost && !seed && setMatched.length > 0 &&
    -					( matchedCount + setMatchers.length ) > 1 ) {
    -
    -					Sizzle.uniqueSort( results );
    -				}
    -			}
    -
    -			// Override manipulation of globals by nested matchers
    -			if ( outermost ) {
    -				dirruns = dirrunsUnique;
    -				outermostContext = contextBackup;
    -			}
    -
    -			return unmatched;
    -		};
    -
    -	return bySet ?
    -		markFunction( superMatcher ) :
    -		superMatcher;
    -}
    -
    -compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
    -	var i,
    -		setMatchers = [],
    -		elementMatchers = [],
    -		cached = compilerCache[ selector + " " ];
    -
    -	if ( !cached ) {
    -		// Generate a function of recursive functions that can be used to check each element
    -		if ( !group ) {
    -			group = tokenize( selector );
    -		}
    -		i = group.length;
    -		while ( i-- ) {
    -			cached = matcherFromTokens( group[i] );
    -			if ( cached[ expando ] ) {
    -				setMatchers.push( cached );
    -			} else {
    -				elementMatchers.push( cached );
    -			}
    -		}
    -
    -		// Cache the compiled function
    -		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
    -	}
    -	return cached;
    -};
    -
    -function multipleContexts( selector, contexts, results ) {
    -	var i = 0,
    -		len = contexts.length;
    -	for ( ; i < len; i++ ) {
    -		Sizzle( selector, contexts[i], results );
    -	}
    -	return results;
    -}
    -
    -function select( selector, context, results, seed ) {
    -	var i, tokens, token, type, find,
    -		match = tokenize( selector );
    -
    -	if ( !seed ) {
    -		// Try to minimize operations if there is only one group
    -		if ( match.length === 1 ) {
    -
    -			// Take a shortcut and set the context if the root selector is an ID
    -			tokens = match[0] = match[0].slice( 0 );
    -			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
    -					support.getById && context.nodeType === 9 && documentIsHTML &&
    -					Expr.relative[ tokens[1].type ] ) {
    -
    -				context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
    -				if ( !context ) {
    -					return results;
    -				}
    -				selector = selector.slice( tokens.shift().value.length );
    -			}
    -
    -			// Fetch a seed set for right-to-left matching
    -			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
    -			while ( i-- ) {
    -				token = tokens[i];
    -
    -				// Abort if we hit a combinator
    -				if ( Expr.relative[ (type = token.type) ] ) {
    -					break;
    -				}
    -				if ( (find = Expr.find[ type ]) ) {
    -					// Search, expanding context for leading sibling combinators
    -					if ( (seed = find(
    -						token.matches[0].replace( runescape, funescape ),
    -						rsibling.test( tokens[0].type ) && context.parentNode || context
    -					)) ) {
    -
    -						// If seed is empty or no tokens remain, we can return early
    -						tokens.splice( i, 1 );
    -						selector = seed.length && toSelector( tokens );
    -						if ( !selector ) {
    -							push.apply( results, seed );
    -							return results;
    -						}
    -
    -						break;
    -					}
    -				}
    -			}
    -		}
    -	}
    -
    -	// Compile and execute a filtering function
    -	// Provide `match` to avoid retokenization if we modified the selector above
    -	compile( selector, match )(
    -		seed,
    -		context,
    -		!documentIsHTML,
    -		results,
    -		rsibling.test( selector )
    -	);
    -	return results;
    -}
    -
    -// One-time assignments
    -
    -// Sort stability
    -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
    -
    -// Support: Chrome<14
    -// Always assume duplicates if they aren't passed to the comparison function
    -support.detectDuplicates = hasDuplicate;
    -
    -// Initialize against the default document
    -setDocument();
    -
    -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
    -// Detached nodes confoundingly follow *each other*
    -support.sortDetached = assert(function( div1 ) {
    -	// Should return 1, but returns 4 (following)
    -	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
    -});
    -
    -// Support: IE<8
    -// Prevent attribute/property "interpolation"
    -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
    -if ( !assert(function( div ) {
    -	div.innerHTML = "<a href='#'></a>";
    -	return div.firstChild.getAttribute("href") === "#" ;
    -}) ) {
    -	addHandle( "type|href|height|width", function( elem, name, isXML ) {
    -		if ( !isXML ) {
    -			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
    -		}
    -	});
    -}
    -
    -// Support: IE<9
    -// Use defaultValue in place of getAttribute("value")
    -if ( !support.attributes || !assert(function( div ) {
    -	div.innerHTML = "<input/>";
    -	div.firstChild.setAttribute( "value", "" );
    -	return div.firstChild.getAttribute( "value" ) === "";
    -}) ) {
    -	addHandle( "value", function( elem, name, isXML ) {
    -		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
    -			return elem.defaultValue;
    -		}
    -	});
    -}
    -
    -// Support: IE<9
    -// Use getAttributeNode to fetch booleans when getAttribute lies
    -if ( !assert(function( div ) {
    -	return div.getAttribute("disabled") == null;
    -}) ) {
    -	addHandle( booleans, function( elem, name, isXML ) {
    -		var val;
    -		if ( !isXML ) {
    -			return (val = elem.getAttributeNode( name )) && val.specified ?
    -				val.value :
    -				elem[ name ] === true ? name.toLowerCase() : null;
    -		}
    -	});
    -}
    -
    -jQuery.find = Sizzle;
    -jQuery.expr = Sizzle.selectors;
    -jQuery.expr[":"] = jQuery.expr.pseudos;
    -jQuery.unique = Sizzle.uniqueSort;
    -jQuery.text = Sizzle.getText;
    -jQuery.isXMLDoc = Sizzle.isXML;
    -jQuery.contains = Sizzle.contains;
    -
    -
    -})( window );
    -// String to Object options format cache
    -var optionsCache = {};
    -
    -// Convert String-formatted options into Object-formatted ones and store in cache
    -function createOptions( options ) {
    -	var object = optionsCache[ options ] = {};
    -	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
    -		object[ flag ] = true;
    -	});
    -	return object;
    -}
    -
    -/*
    - * Create a callback list using the following parameters:
    - *
    - *	options: an optional list of space-separated options that will change how
    - *			the callback list behaves or a more traditional option object
    - *
    - * By default a callback list will act like an event callback list and can be
    - * "fired" multiple times.
    - *
    - * Possible options:
    - *
    - *	once:			will ensure the callback list can only be fired once (like a Deferred)
    - *
    - *	memory:			will keep track of previous values and will call any callback added
    - *					after the list has been fired right away with the latest "memorized"
    - *					values (like a Deferred)
    - *
    - *	unique:			will ensure a callback can only be added once (no duplicate in the list)
    - *
    - *	stopOnFalse:	interrupt callings when a callback returns false
    - *
    - */
    -jQuery.Callbacks = function( options ) {
    -
    -	// Convert options from String-formatted to Object-formatted if needed
    -	// (we check in cache first)
    -	options = typeof options === "string" ?
    -		( optionsCache[ options ] || createOptions( options ) ) :
    -		jQuery.extend( {}, options );
    -
    -	var // Flag to know if list is currently firing
    -		firing,
    -		// Last fire value (for non-forgettable lists)
    -		memory,
    -		// Flag to know if list was already fired
    -		fired,
    -		// End of the loop when firing
    -		firingLength,
    -		// Index of currently firing callback (modified by remove if needed)
    -		firingIndex,
    -		// First callback to fire (used internally by add and fireWith)
    -		firingStart,
    -		// Actual callback list
    -		list = [],
    -		// Stack of fire calls for repeatable lists
    -		stack = !options.once && [],
    -		// Fire callbacks
    -		fire = function( data ) {
    -			memory = options.memory && data;
    -			fired = true;
    -			firingIndex = firingStart || 0;
    -			firingStart = 0;
    -			firingLength = list.length;
    -			firing = true;
    -			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
    -				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
    -					memory = false; // To prevent further calls using add
    -					break;
    -				}
    -			}
    -			firing = false;
    -			if ( list ) {
    -				if ( stack ) {
    -					if ( stack.length ) {
    -						fire( stack.shift() );
    -					}
    -				} else if ( memory ) {
    -					list = [];
    -				} else {
    -					self.disable();
    -				}
    -			}
    -		},
    -		// Actual Callbacks object
    -		self = {
    -			// Add a callback or a collection of callbacks to the list
    -			add: function() {
    -				if ( list ) {
    -					// First, we save the current length
    -					var start = list.length;
    -					(function add( args ) {
    -						jQuery.each( args, function( _, arg ) {
    -							var type = jQuery.type( arg );
    -							if ( type === "function" ) {
    -								if ( !options.unique || !self.has( arg ) ) {
    -									list.push( arg );
    -								}
    -							} else if ( arg && arg.length && type !== "string" ) {
    -								// Inspect recursively
    -								add( arg );
    -							}
    -						});
    -					})( arguments );
    -					// Do we need to add the callbacks to the
    -					// current firing batch?
    -					if ( firing ) {
    -						firingLength = list.length;
    -					// With memory, if we're not firing then
    -					// we should call right away
    -					} else if ( memory ) {
    -						firingStart = start;
    -						fire( memory );
    -					}
    -				}
    -				return this;
    -			},
    -			// Remove a callback from the list
    -			remove: function() {
    -				if ( list ) {
    -					jQuery.each( arguments, function( _, arg ) {
    -						var index;
    -						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
    -							list.splice( index, 1 );
    -							// Handle firing indexes
    -							if ( firing ) {
    -								if ( index <= firingLength ) {
    -									firingLength--;
    -								}
    -								if ( index <= firingIndex ) {
    -									firingIndex--;
    -								}
    -							}
    -						}
    -					});
    -				}
    -				return this;
    -			},
    -			// Check if a given callback is in the list.
    -			// If no argument is given, return whether or not list has callbacks attached.
    -			has: function( fn ) {
    -				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
    -			},
    -			// Remove all callbacks from the list
    -			empty: function() {
    -				list = [];
    -				firingLength = 0;
    -				return this;
    -			},
    -			// Have the list do nothing anymore
    -			disable: function() {
    -				list = stack = memory = undefined;
    -				return this;
    -			},
    -			// Is it disabled?
    -			disabled: function() {
    -				return !list;
    -			},
    -			// Lock the list in its current state
    -			lock: function() {
    -				stack = undefined;
    -				if ( !memory ) {
    -					self.disable();
    -				}
    -				return this;
    -			},
    -			// Is it locked?
    -			locked: function() {
    -				return !stack;
    -			},
    -			// Call all callbacks with the given context and arguments
    -			fireWith: function( context, args ) {
    -				if ( list && ( !fired || stack ) ) {
    -					args = args || [];
    -					args = [ context, args.slice ? args.slice() : args ];
    -					if ( firing ) {
    -						stack.push( args );
    -					} else {
    -						fire( args );
    -					}
    -				}
    -				return this;
    -			},
    -			// Call all the callbacks with the given arguments
    -			fire: function() {
    -				self.fireWith( this, arguments );
    -				return this;
    -			},
    -			// To know if the callbacks have already been called at least once
    -			fired: function() {
    -				return !!fired;
    -			}
    -		};
    -
    -	return self;
    -};
    -jQuery.extend({
    -
    -	Deferred: function( func ) {
    -		var tuples = [
    -				// action, add listener, listener list, final state
    -				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
    -				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
    -				[ "notify", "progress", jQuery.Callbacks("memory") ]
    -			],
    -			state = "pending",
    -			promise = {
    -				state: function() {
    -					return state;
    -				},
    -				always: function() {
    -					deferred.done( arguments ).fail( arguments );
    -					return this;
    -				},
    -				then: function( /* fnDone, fnFail, fnProgress */ ) {
    -					var fns = arguments;
    -					return jQuery.Deferred(function( newDefer ) {
    -						jQuery.each( tuples, function( i, tuple ) {
    -							var action = tuple[ 0 ],
    -								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
    -							// deferred[ done | fail | progress ] for forwarding actions to newDefer
    -							deferred[ tuple[1] ](function() {
    -								var returned = fn && fn.apply( this, arguments );
    -								if ( returned && jQuery.isFunction( returned.promise ) ) {
    -									returned.promise()
    -										.done( newDefer.resolve )
    -										.fail( newDefer.reject )
    -										.progress( newDefer.notify );
    -								} else {
    -									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
    -								}
    -							});
    -						});
    -						fns = null;
    -					}).promise();
    -				},
    -				// Get a promise for this deferred
    -				// If obj is provided, the promise aspect is added to the object
    -				promise: function( obj ) {
    -					return obj != null ? jQuery.extend( obj, promise ) : promise;
    -				}
    -			},
    -			deferred = {};
    -
    -		// Keep pipe for back-compat
    -		promise.pipe = promise.then;
    -
    -		// Add list-specific methods
    -		jQuery.each( tuples, function( i, tuple ) {
    -			var list = tuple[ 2 ],
    -				stateString = tuple[ 3 ];
    -
    -			// promise[ done | fail | progress ] = list.add
    -			promise[ tuple[1] ] = list.add;
    -
    -			// Handle state
    -			if ( stateString ) {
    -				list.add(function() {
    -					// state = [ resolved | rejected ]
    -					state = stateString;
    -
    -				// [ reject_list | resolve_list ].disable; progress_list.lock
    -				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
    -			}
    -
    -			// deferred[ resolve | reject | notify ]
    -			deferred[ tuple[0] ] = function() {
    -				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
    -				return this;
    -			};
    -			deferred[ tuple[0] + "With" ] = list.fireWith;
    -		});
    -
    -		// Make the deferred a promise
    -		promise.promise( deferred );
    -
    -		// Call given func if any
    -		if ( func ) {
    -			func.call( deferred, deferred );
    -		}
    -
    -		// All done!
    -		return deferred;
    -	},
    -
    -	// Deferred helper
    -	when: function( subordinate /* , ..., subordinateN */ ) {
    -		var i = 0,
    -			resolveValues = core_slice.call( arguments ),
    -			length = resolveValues.length,
    -
    -			// the count of uncompleted subordinates
    -			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
    -
    -			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
    -			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
    -
    -			// Update function for both resolve and progress values
    -			updateFunc = function( i, contexts, values ) {
    -				return function( value ) {
    -					contexts[ i ] = this;
    -					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
    -					if( values === progressValues ) {
    -						deferred.notifyWith( contexts, values );
    -					} else if ( !( --remaining ) ) {
    -						deferred.resolveWith( contexts, values );
    -					}
    -				};
    -			},
    -
    -			progressValues, progressContexts, resolveContexts;
    -
    -		// add listeners to Deferred subordinates; treat others as resolved
    -		if ( length > 1 ) {
    -			progressValues = new Array( length );
    -			progressContexts = new Array( length );
    -			resolveContexts = new Array( length );
    -			for ( ; i < length; i++ ) {
    -				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
    -					resolveValues[ i ].promise()
    -						.done( updateFunc( i, resolveContexts, resolveValues ) )
    -						.fail( deferred.reject )
    -						.progress( updateFunc( i, progressContexts, progressValues ) );
    -				} else {
    -					--remaining;
    -				}
    -			}
    -		}
    -
    -		// if we're not waiting on anything, resolve the master
    -		if ( !remaining ) {
    -			deferred.resolveWith( resolveContexts, resolveValues );
    -		}
    -
    -		return deferred.promise();
    -	}
    -});
    -jQuery.support = (function( support ) {
    -
    -	var all, a, input, select, fragment, opt, eventName, isSupported, i,
    -		div = document.createElement("div");
    -
    -	// Setup
    -	div.setAttribute( "className", "t" );
    -	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
    -
    -	// Finish early in limited (non-browser) environments
    -	all = div.getElementsByTagName("*") || [];
    -	a = div.getElementsByTagName("a")[ 0 ];
    -	if ( !a || !a.style || !all.length ) {
    -		return support;
    -	}
    -
    -	// First batch of tests
    -	select = document.createElement("select");
    -	opt = select.appendChild( document.createElement("option") );
    -	input = div.getElementsByTagName("input")[ 0 ];
    -
    -	a.style.cssText = "top:1px;float:left;opacity:.5";
    -
    -	// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
    -	support.getSetAttribute = div.className !== "t";
    -
    -	// IE strips leading whitespace when .innerHTML is used
    -	support.leadingWhitespace = div.firstChild.nodeType === 3;
    -
    -	// Make sure that tbody elements aren't automatically inserted
    -	// IE will insert them into empty tables
    -	support.tbody = !div.getElementsByTagName("tbody").length;
    -
    -	// Make sure that link elements get serialized correctly by innerHTML
    -	// This requires a wrapper element in IE
    -	support.htmlSerialize = !!div.getElementsByTagName("link").length;
    -
    -	// Get the style information from getAttribute
    -	// (IE uses .cssText instead)
    -	support.style = /top/.test( a.getAttribute("style") );
    -
    -	// Make sure that URLs aren't manipulated
    -	// (IE normalizes it by default)
    -	support.hrefNormalized = a.getAttribute("href") === "/a";
    -
    -	// Make sure that element opacity exists
    -	// (IE uses filter instead)
    -	// Use a regex to work around a WebKit issue. See #5145
    -	support.opacity = /^0.5/.test( a.style.opacity );
    -
    -	// Verify style float existence
    -	// (IE uses styleFloat instead of cssFloat)
    -	support.cssFloat = !!a.style.cssFloat;
    -
    -	// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
    -	support.checkOn = !!input.value;
    -
    -	// Make sure that a selected-by-default option has a working selected property.
    -	// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
    -	support.optSelected = opt.selected;
    -
    -	// Tests for enctype support on a form (#6743)
    -	support.enctype = !!document.createElement("form").enctype;
    -
    -	// Makes sure cloning an html5 element does not cause problems
    -	// Where outerHTML is undefined, this still works
    -	support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>";
    -
    -	// Will be defined later
    -	support.inlineBlockNeedsLayout = false;
    -	support.shrinkWrapBlocks = false;
    -	support.pixelPosition = false;
    -	support.deleteExpando = true;
    -	support.noCloneEvent = true;
    -	support.reliableMarginRight = true;
    -	support.boxSizingReliable = true;
    -
    -	// Make sure checked status is properly cloned
    -	input.checked = true;
    -	support.noCloneChecked = input.cloneNode( true ).checked;
    -
    -	// Make sure that the options inside disabled selects aren't marked as disabled
    -	// (WebKit marks them as disabled)
    -	select.disabled = true;
    -	support.optDisabled = !opt.disabled;
    -
    -	// Support: IE<9
    -	try {
    -		delete div.test;
    -	} catch( e ) {
    -		support.deleteExpando = false;
    -	}
    -
    -	// Check if we can trust getAttribute("value")
    -	input = document.createElement("input");
    -	input.setAttribute( "value", "" );
    -	support.input = input.getAttribute( "value" ) === "";
    -
    -	// Check if an input maintains its value after becoming a radio
    -	input.value = "t";
    -	input.setAttribute( "type", "radio" );
    -	support.radioValue = input.value === "t";
    -
    -	// #11217 - WebKit loses check when the name is after the checked attribute
    -	input.setAttribute( "checked", "t" );
    -	input.setAttribute( "name", "t" );
    -
    -	fragment = document.createDocumentFragment();
    -	fragment.appendChild( input );
    -
    -	// Check if a disconnected checkbox will retain its checked
    -	// value of true after appended to the DOM (IE6/7)
    -	support.appendChecked = input.checked;
    -
    -	// WebKit doesn't clone checked state correctly in fragments
    -	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
    -
    -	// Support: IE<9
    -	// Opera does not clone events (and typeof div.attachEvent === undefined).
    -	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
    -	if ( div.attachEvent ) {
    -		div.attachEvent( "onclick", function() {
    -			support.noCloneEvent = false;
    -		});
    -
    -		div.cloneNode( true ).click();
    -	}
    -
    -	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
    -	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
    -	for ( i in { submit: true, change: true, focusin: true }) {
    -		div.setAttribute( eventName = "on" + i, "t" );
    -
    -		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
    -	}
    -
    -	div.style.backgroundClip = "content-box";
    -	div.cloneNode( true ).style.backgroundClip = "";
    -	support.clearCloneStyle = div.style.backgroundClip === "content-box";
    -
    -	// Support: IE<9
    -	// Iteration over object's inherited properties before its own.
    -	for ( i in jQuery( support ) ) {
    -		break;
    -	}
    -	support.ownLast = i !== "0";
    -
    -	// Run tests that need a body at doc ready
    -	jQuery(function() {
    -		var container, marginDiv, tds,
    -			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
    -			body = document.getElementsByTagName("body")[0];
    -
    -		if ( !body ) {
    -			// Return for frameset docs that don't have a body
    -			return;
    -		}
    -
    -		container = document.createElement("div");
    -		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
    -
    -		body.appendChild( container ).appendChild( div );
    -
    -		// Support: IE8
    -		// Check if table cells still have offsetWidth/Height when they are set
    -		// to display:none and there are still other visible table cells in a
    -		// table row; if so, offsetWidth/Height are not reliable for use when
    -		// determining if an element has been hidden directly using
    -		// display:none (it is still safe to use offsets if a parent element is
    -		// hidden; don safety goggles and see bug #4512 for more information).
    -		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
    -		tds = div.getElementsByTagName("td");
    -		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
    -		isSupported = ( tds[ 0 ].offsetHeight === 0 );
    -
    -		tds[ 0 ].style.display = "";
    -		tds[ 1 ].style.display = "none";
    -
    -		// Support: IE8
    -		// Check if empty table cells still have offsetWidth/Height
    -		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
    -
    -		// Check box-sizing and margin behavior.
    -		div.innerHTML = "";
    -		div.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%;";
    -
    -		// Workaround failing boxSizing test due to offsetWidth returning wrong value
    -		// with some non-1 values of body zoom, ticket #13543
    -		jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {
    -			support.boxSizing = div.offsetWidth === 4;
    -		});
    -
    -		// Use window.getComputedStyle because jsdom on node.js will break without it.
    -		if ( window.getComputedStyle ) {
    -			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
    -			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
    -
    -			// Check if div with explicit width and no margin-right incorrectly
    -			// gets computed margin-right based on width of container. (#3333)
    -			// Fails in WebKit before Feb 2011 nightlies
    -			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
    -			marginDiv = div.appendChild( document.createElement("div") );
    -			marginDiv.style.cssText = div.style.cssText = divReset;
    -			marginDiv.style.marginRight = marginDiv.style.width = "0";
    -			div.style.width = "1px";
    -
    -			support.reliableMarginRight =
    -				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
    -		}
    -
    -		if ( typeof div.style.zoom !== core_strundefined ) {
    -			// Support: IE<8
    -			// Check if natively block-level elements act like inline-block
    -			// elements when setting their display to 'inline' and giving
    -			// them layout
    -			div.innerHTML = "";
    -			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
    -			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
    -
    -			// Support: IE6
    -			// Check if elements with layout shrink-wrap their children
    -			div.style.display = "block";
    -			div.innerHTML = "<div></div>";
    -			div.firstChild.style.width = "5px";
    -			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
    -
    -			if ( support.inlineBlockNeedsLayout ) {
    -				// Prevent IE 6 from affecting layout for positioned elements #11048
    -				// Prevent IE from shrinking the body in IE 7 mode #12869
    -				// Support: IE<8
    -				body.style.zoom = 1;
    -			}
    -		}
    -
    -		body.removeChild( container );
    -
    -		// Null elements to avoid leaks in IE
    -		container = div = tds = marginDiv = null;
    -	});
    -
    -	// Null elements to avoid leaks in IE
    -	all = select = fragment = opt = a = input = null;
    -
    -	return support;
    -})({});
    -
    -var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
    -	rmultiDash = /([A-Z])/g;
    -
    -function internalData( elem, name, data, pvt /* Internal Use Only */ ){
    -	if ( !jQuery.acceptData( elem ) ) {
    -		return;
    -	}
    -
    -	var ret, thisCache,
    -		internalKey = jQuery.expando,
    -
    -		// We have to handle DOM nodes and JS objects differently because IE6-7
    -		// can't GC object references properly across the DOM-JS boundary
    -		isNode = elem.nodeType,
    -
    -		// Only DOM nodes need the global jQuery cache; JS object data is
    -		// attached directly to the object so GC can occur automatically
    -		cache = isNode ? jQuery.cache : elem,
    -
    -		// Only defining an ID for JS objects if its cache already exists allows
    -		// the code to shortcut on the same path as a DOM node with no cache
    -		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
    -
    -	// Avoid doing any more work than we need to when trying to get data on an
    -	// object that has no data at all
    -	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
    -		return;
    -	}
    -
    -	if ( !id ) {
    -		// Only DOM nodes need a new unique ID for each element since their data
    -		// ends up in the global cache
    -		if ( isNode ) {
    -			id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;
    -		} else {
    -			id = internalKey;
    -		}
    -	}
    -
    -	if ( !cache[ id ] ) {
    -		// Avoid exposing jQuery metadata on plain JS objects when the object
    -		// is serialized using JSON.stringify
    -		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
    -	}
    -
    -	// An object can be passed to jQuery.data instead of a key/value pair; this gets
    -	// shallow copied over onto the existing cache
    -	if ( typeof name === "object" || typeof name === "function" ) {
    -		if ( pvt ) {
    -			cache[ id ] = jQuery.extend( cache[ id ], name );
    -		} else {
    -			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
    -		}
    -	}
    -
    -	thisCache = cache[ id ];
    -
    -	// jQuery data() is stored in a separate object inside the object's internal data
    -	// cache in order to avoid key collisions between internal data and user-defined
    -	// data.
    -	if ( !pvt ) {
    -		if ( !thisCache.data ) {
    -			thisCache.data = {};
    -		}
    -
    -		thisCache = thisCache.data;
    -	}
    -
    -	if ( data !== undefined ) {
    -		thisCache[ jQuery.camelCase( name ) ] = data;
    -	}
    -
    -	// Check for both converted-to-camel and non-converted data property names
    -	// If a data property was specified
    -	if ( typeof name === "string" ) {
    -
    -		// First Try to find as-is property data
    -		ret = thisCache[ name ];
    -
    -		// Test for null|undefined property data
    -		if ( ret == null ) {
    -
    -			// Try to find the camelCased property
    -			ret = thisCache[ jQuery.camelCase( name ) ];
    -		}
    -	} else {
    -		ret = thisCache;
    -	}
    -
    -	return ret;
    -}
    -
    -function internalRemoveData( elem, name, pvt ) {
    -	if ( !jQuery.acceptData( elem ) ) {
    -		return;
    -	}
    -
    -	var thisCache, i,
    -		isNode = elem.nodeType,
    -
    -		// See jQuery.data for more information
    -		cache = isNode ? jQuery.cache : elem,
    -		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
    -
    -	// If there is already no cache entry for this object, there is no
    -	// purpose in continuing
    -	if ( !cache[ id ] ) {
    -		return;
    -	}
    -
    -	if ( name ) {
    -
    -		thisCache = pvt ? cache[ id ] : cache[ id ].data;
    -
    -		if ( thisCache ) {
    -
    -			// Support array or space separated string names for data keys
    -			if ( !jQuery.isArray( name ) ) {
    -
    -				// try the string as a key before any manipulation
    -				if ( name in thisCache ) {
    -					name = [ name ];
    -				} else {
    -
    -					// split the camel cased version by spaces unless a key with the spaces exists
    -					name = jQuery.camelCase( name );
    -					if ( name in thisCache ) {
    -						name = [ name ];
    -					} else {
    -						name = name.split(" ");
    -					}
    -				}
    -			} else {
    -				// If "name" is an array of keys...
    -				// When data is initially created, via ("key", "val") signature,
    -				// keys will be converted to camelCase.
    -				// Since there is no way to tell _how_ a key was added, remove
    -				// both plain key and camelCase key. #12786
    -				// This will only penalize the array argument path.
    -				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
    -			}
    -
    -			i = name.length;
    -			while ( i-- ) {
    -				delete thisCache[ name[i] ];
    -			}
    -
    -			// If there is no data left in the cache, we want to continue
    -			// and let the cache object itself get destroyed
    -			if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
    -				return;
    -			}
    -		}
    -	}
    -
    -	// See jQuery.data for more information
    -	if ( !pvt ) {
    -		delete cache[ id ].data;
    -
    -		// Don't destroy the parent cache unless the internal data object
    -		// had been the only thing left in it
    -		if ( !isEmptyDataObject( cache[ id ] ) ) {
    -			return;
    -		}
    -	}
    -
    -	// Destroy the cache
    -	if ( isNode ) {
    -		jQuery.cleanData( [ elem ], true );
    -
    -	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
    -	/* jshint eqeqeq: false */
    -	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
    -		/* jshint eqeqeq: true */
    -		delete cache[ id ];
    -
    -	// When all else fails, null
    -	} else {
    -		cache[ id ] = null;
    -	}
    -}
    -
    -jQuery.extend({
    -	cache: {},
    -
    -	// The following elements throw uncatchable exceptions if you
    -	// attempt to add expando properties to them.
    -	noData: {
    -		"applet": true,
    -		"embed": true,
    -		// Ban all objects except for Flash (which handle expandos)
    -		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
    -	},
    -
    -	hasData: function( elem ) {
    -		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
    -		return !!elem && !isEmptyDataObject( elem );
    -	},
    -
    -	data: function( elem, name, data ) {
    -		return internalData( elem, name, data );
    -	},
    -
    -	removeData: function( elem, name ) {
    -		return internalRemoveData( elem, name );
    -	},
    -
    -	// For internal use only.
    -	_data: function( elem, name, data ) {
    -		return internalData( elem, name, data, true );
    -	},
    -
    -	_removeData: function( elem, name ) {
    -		return internalRemoveData( elem, name, true );
    -	},
    -
    -	// A method for determining if a DOM node can handle the data expando
    -	acceptData: function( elem ) {
    -		// Do not set data on non-element because it will not be cleared (#8335).
    -		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
    -			return false;
    -		}
    -
    -		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
    -
    -		// nodes accept data unless otherwise specified; rejection can be conditional
    -		return !noData || noData !== true && elem.getAttribute("classid") === noData;
    -	}
    -});
    -
    -jQuery.fn.extend({
    -	data: function( key, value ) {
    -		var attrs, name,
    -			data = null,
    -			i = 0,
    -			elem = this[0];
    -
    -		// Special expections of .data basically thwart jQuery.access,
    -		// so implement the relevant behavior ourselves
    -
    -		// Gets all values
    -		if ( key === undefined ) {
    -			if ( this.length ) {
    -				data = jQuery.data( elem );
    -
    -				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
    -					attrs = elem.attributes;
    -					for ( ; i < attrs.length; i++ ) {
    -						name = attrs[i].name;
    -
    -						if ( name.indexOf("data-") === 0 ) {
    -							name = jQuery.camelCase( name.slice(5) );
    -
    -							dataAttr( elem, name, data[ name ] );
    -						}
    -					}
    -					jQuery._data( elem, "parsedAttrs", true );
    -				}
    -			}
    -
    -			return data;
    -		}
    -
    -		// Sets multiple values
    -		if ( typeof key === "object" ) {
    -			return this.each(function() {
    -				jQuery.data( this, key );
    -			});
    -		}
    -
    -		return arguments.length > 1 ?
    -
    -			// Sets one value
    -			this.each(function() {
    -				jQuery.data( this, key, value );
    -			}) :
    -
    -			// Gets one value
    -			// Try to fetch any internally stored data first
    -			elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
    -	},
    -
    -	removeData: function( key ) {
    -		return this.each(function() {
    -			jQuery.removeData( this, key );
    -		});
    -	}
    -});
    -
    -function dataAttr( elem, key, data ) {
    -	// If nothing was found internally, try to fetch any
    -	// data from the HTML5 data-* attribute
    -	if ( data === undefined && elem.nodeType === 1 ) {
    -
    -		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
    -
    -		data = elem.getAttribute( name );
    -
    -		if ( typeof data === "string" ) {
    -			try {
    -				data = data === "true" ? true :
    -					data === "false" ? false :
    -					data === "null" ? null :
    -					// Only convert to a number if it doesn't change the string
    -					+data + "" === data ? +data :
    -					rbrace.test( data ) ? jQuery.parseJSON( data ) :
    -						data;
    -			} catch( e ) {}
    -
    -			// Make sure we set the data so it isn't changed later
    -			jQuery.data( elem, key, data );
    -
    -		} else {
    -			data = undefined;
    -		}
    -	}
    -
    -	return data;
    -}
    -
    -// checks a cache object for emptiness
    -function isEmptyDataObject( obj ) {
    -	var name;
    -	for ( name in obj ) {
    -
    -		// if the public data object is empty, the private is still empty
    -		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
    -			continue;
    -		}
    -		if ( name !== "toJSON" ) {
    -			return false;
    -		}
    -	}
    -
    -	return true;
    -}
    -jQuery.extend({
    -	queue: function( elem, type, data ) {
    -		var queue;
    -
    -		if ( elem ) {
    -			type = ( type || "fx" ) + "queue";
    -			queue = jQuery._data( elem, type );
    -
    -			// Speed up dequeue by getting out quickly if this is just a lookup
    -			if ( data ) {
    -				if ( !queue || jQuery.isArray(data) ) {
    -					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
    -				} else {
    -					queue.push( data );
    -				}
    -			}
    -			return queue || [];
    -		}
    -	},
    -
    -	dequeue: function( elem, type ) {
    -		type = type || "fx";
    -
    -		var queue = jQuery.queue( elem, type ),
    -			startLength = queue.length,
    -			fn = queue.shift(),
    -			hooks = jQuery._queueHooks( elem, type ),
    -			next = function() {
    -				jQuery.dequeue( elem, type );
    -			};
    -
    -		// If the fx queue is dequeued, always remove the progress sentinel
    -		if ( fn === "inprogress" ) {
    -			fn = queue.shift();
    -			startLength--;
    -		}
    -
    -		if ( fn ) {
    -
    -			// Add a progress sentinel to prevent the fx queue from being
    -			// automatically dequeued
    -			if ( type === "fx" ) {
    -				queue.unshift( "inprogress" );
    -			}
    -
    -			// clear up the last queue stop function
    -			delete hooks.stop;
    -			fn.call( elem, next, hooks );
    -		}
    -
    -		if ( !startLength && hooks ) {
    -			hooks.empty.fire();
    -		}
    -	},
    -
    -	// not intended for public consumption - generates a queueHooks object, or returns the current one
    -	_queueHooks: function( elem, type ) {
    -		var key = type + "queueHooks";
    -		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
    -			empty: jQuery.Callbacks("once memory").add(function() {
    -				jQuery._removeData( elem, type + "queue" );
    -				jQuery._removeData( elem, key );
    -			})
    -		});
    -	}
    -});
    -
    -jQuery.fn.extend({
    -	queue: function( type, data ) {
    -		var setter = 2;
    -
    -		if ( typeof type !== "string" ) {
    -			data = type;
    -			type = "fx";
    -			setter--;
    -		}
    -
    -		if ( arguments.length < setter ) {
    -			return jQuery.queue( this[0], type );
    -		}
    -
    -		return data === undefined ?
    -			this :
    -			this.each(function() {
    -				var queue = jQuery.queue( this, type, data );
    -
    -				// ensure a hooks for this queue
    -				jQuery._queueHooks( this, type );
    -
    -				if ( type === "fx" && queue[0] !== "inprogress" ) {
    -					jQuery.dequeue( this, type );
    -				}
    -			});
    -	},
    -	dequeue: function( type ) {
    -		return this.each(function() {
    -			jQuery.dequeue( this, type );
    -		});
    -	},
    -	// Based off of the plugin by Clint Helfers, with permission.
    -	// http://blindsignals.com/index.php/2009/07/jquery-delay/
    -	delay: function( time, type ) {
    -		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
    -		type = type || "fx";
    -
    -		return this.queue( type, function( next, hooks ) {
    -			var timeout = setTimeout( next, time );
    -			hooks.stop = function() {
    -				clearTimeout( timeout );
    -			};
    -		});
    -	},
    -	clearQueue: function( type ) {
    -		return this.queue( type || "fx", [] );
    -	},
    -	// Get a promise resolved when queues of a certain type
    -	// are emptied (fx is the type by default)
    -	promise: function( type, obj ) {
    -		var tmp,
    -			count = 1,
    -			defer = jQuery.Deferred(),
    -			elements = this,
    -			i = this.length,
    -			resolve = function() {
    -				if ( !( --count ) ) {
    -					defer.resolveWith( elements, [ elements ] );
    -				}
    -			};
    -
    -		if ( typeof type !== "string" ) {
    -			obj = type;
    -			type = undefined;
    -		}
    -		type = type || "fx";
    -
    -		while( i-- ) {
    -			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
    -			if ( tmp && tmp.empty ) {
    -				count++;
    -				tmp.empty.add( resolve );
    -			}
    -		}
    -		resolve();
    -		return defer.promise( obj );
    -	}
    -});
    -var nodeHook, boolHook,
    -	rclass = /[\t\r\n\f]/g,
    -	rreturn = /\r/g,
    -	rfocusable = /^(?:input|select|textarea|button|object)$/i,
    -	rclickable = /^(?:a|area)$/i,
    -	ruseDefault = /^(?:checked|selected)$/i,
    -	getSetAttribute = jQuery.support.getSetAttribute,
    -	getSetInput = jQuery.support.input;
    -
    -jQuery.fn.extend({
    -	attr: function( name, value ) {
    -		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
    -	},
    -
    -	removeAttr: function( name ) {
    -		return this.each(function() {
    -			jQuery.removeAttr( this, name );
    -		});
    -	},
    -
    -	prop: function( name, value ) {
    -		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
    -	},
    -
    -	removeProp: function( name ) {
    -		name = jQuery.propFix[ name ] || name;
    -		return this.each(function() {
    -			// try/catch handles cases where IE balks (such as removing a property on window)
    -			try {
    -				this[ name ] = undefined;
    -				delete this[ name ];
    -			} catch( e ) {}
    -		});
    -	},
    -
    -	addClass: function( value ) {
    -		var classes, elem, cur, clazz, j,
    -			i = 0,
    -			len = this.length,
    -			proceed = typeof value === "string" && value;
    -
    -		if ( jQuery.isFunction( value ) ) {
    -			return this.each(function( j ) {
    -				jQuery( this ).addClass( value.call( this, j, this.className ) );
    -			});
    -		}
    -
    -		if ( proceed ) {
    -			// The disjunction here is for better compressibility (see removeClass)
    -			classes = ( value || "" ).match( core_rnotwhite ) || [];
    -
    -			for ( ; i < len; i++ ) {
    -				elem = this[ i ];
    -				cur = elem.nodeType === 1 && ( elem.className ?
    -					( " " + elem.className + " " ).replace( rclass, " " ) :
    -					" "
    -				);
    -
    -				if ( cur ) {
    -					j = 0;
    -					while ( (clazz = classes[j++]) ) {
    -						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
    -							cur += clazz + " ";
    -						}
    -					}
    -					elem.className = jQuery.trim( cur );
    -
    -				}
    -			}
    -		}
    -
    -		return this;
    -	},
    -
    -	removeClass: function( value ) {
    -		var classes, elem, cur, clazz, j,
    -			i = 0,
    -			len = this.length,
    -			proceed = arguments.length === 0 || typeof value === "string" && value;
    -
    -		if ( jQuery.isFunction( value ) ) {
    -			return this.each(function( j ) {
    -				jQuery( this ).removeClass( value.call( this, j, this.className ) );
    -			});
    -		}
    -		if ( proceed ) {
    -			classes = ( value || "" ).match( core_rnotwhite ) || [];
    -
    -			for ( ; i < len; i++ ) {
    -				elem = this[ i ];
    -				// This expression is here for better compressibility (see addClass)
    -				cur = elem.nodeType === 1 && ( elem.className ?
    -					( " " + elem.className + " " ).replace( rclass, " " ) :
    -					""
    -				);
    -
    -				if ( cur ) {
    -					j = 0;
    -					while ( (clazz = classes[j++]) ) {
    -						// Remove *all* instances
    -						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
    -							cur = cur.replace( " " + clazz + " ", " " );
    -						}
    -					}
    -					elem.className = value ? jQuery.trim( cur ) : "";
    -				}
    -			}
    -		}
    -
    -		return this;
    -	},
    -
    -	toggleClass: function( value, stateVal ) {
    -		var type = typeof value;
    -
    -		if ( typeof stateVal === "boolean" && type === "string" ) {
    -			return stateVal ? this.addClass( value ) : this.removeClass( value );
    -		}
    -
    -		if ( jQuery.isFunction( value ) ) {
    -			return this.each(function( i ) {
    -				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
    -			});
    -		}
    -
    -		return this.each(function() {
    -			if ( type === "string" ) {
    -				// toggle individual class names
    -				var className,
    -					i = 0,
    -					self = jQuery( this ),
    -					classNames = value.match( core_rnotwhite ) || [];
    -
    -				while ( (className = classNames[ i++ ]) ) {
    -					// check each className given, space separated list
    -					if ( self.hasClass( className ) ) {
    -						self.removeClass( className );
    -					} else {
    -						self.addClass( className );
    -					}
    -				}
    -
    -			// Toggle whole class name
    -			} else if ( type === core_strundefined || type === "boolean" ) {
    -				if ( this.className ) {
    -					// store className if set
    -					jQuery._data( this, "__className__", this.className );
    -				}
    -
    -				// If the element has a class name or if we're passed "false",
    -				// then remove the whole classname (if there was one, the above saved it).
    -				// Otherwise bring back whatever was previously saved (if anything),
    -				// falling back to the empty string if nothing was stored.
    -				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
    -			}
    -		});
    -	},
    -
    -	hasClass: function( selector ) {
    -		var className = " " + selector + " ",
    -			i = 0,
    -			l = this.length;
    -		for ( ; i < l; i++ ) {
    -			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
    -				return true;
    -			}
    -		}
    -
    -		return false;
    -	},
    -
    -	val: function( value ) {
    -		var ret, hooks, isFunction,
    -			elem = this[0];
    -
    -		if ( !arguments.length ) {
    -			if ( elem ) {
    -				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
    -
    -				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
    -					return ret;
    -				}
    -
    -				ret = elem.value;
    -
    -				return typeof ret === "string" ?
    -					// handle most common string cases
    -					ret.replace(rreturn, "") :
    -					// handle cases where value is null/undef or number
    -					ret == null ? "" : ret;
    -			}
    -
    -			return;
    -		}
    -
    -		isFunction = jQuery.isFunction( value );
    -
    -		return this.each(function( i ) {
    -			var val;
    -
    -			if ( this.nodeType !== 1 ) {
    -				return;
    -			}
    -
    -			if ( isFunction ) {
    -				val = value.call( this, i, jQuery( this ).val() );
    -			} else {
    -				val = value;
    -			}
    -
    -			// Treat null/undefined as ""; convert numbers to string
    -			if ( val == null ) {
    -				val = "";
    -			} else if ( typeof val === "number" ) {
    -				val += "";
    -			} else if ( jQuery.isArray( val ) ) {
    -				val = jQuery.map(val, function ( value ) {
    -					return value == null ? "" : value + "";
    -				});
    -			}
    -
    -			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
    -
    -			// If set returns undefined, fall back to normal setting
    -			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
    -				this.value = val;
    -			}
    -		});
    -	}
    -});
    -
    -jQuery.extend({
    -	valHooks: {
    -		option: {
    -			get: function( elem ) {
    -				// Use proper attribute retrieval(#6932, #12072)
    -				var val = jQuery.find.attr( elem, "value" );
    -				return val != null ?
    -					val :
    -					elem.text;
    -			}
    -		},
    -		select: {
    -			get: function( elem ) {
    -				var value, option,
    -					options = elem.options,
    -					index = elem.selectedIndex,
    -					one = elem.type === "select-one" || index < 0,
    -					values = one ? null : [],
    -					max = one ? index + 1 : options.length,
    -					i = index < 0 ?
    -						max :
    -						one ? index : 0;
    -
    -				// Loop through all the selected options
    -				for ( ; i < max; i++ ) {
    -					option = options[ i ];
    -
    -					// oldIE doesn't update selected after form reset (#2551)
    -					if ( ( option.selected || i === index ) &&
    -							// Don't return options that are disabled or in a disabled optgroup
    -							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
    -							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
    -
    -						// Get the specific value for the option
    -						value = jQuery( option ).val();
    -
    -						// We don't need an array for one selects
    -						if ( one ) {
    -							return value;
    -						}
    -
    -						// Multi-Selects return an array
    -						values.push( value );
    -					}
    -				}
    -
    -				return values;
    -			},
    -
    -			set: function( elem, value ) {
    -				var optionSet, option,
    -					options = elem.options,
    -					values = jQuery.makeArray( value ),
    -					i = options.length;
    -
    -				while ( i-- ) {
    -					option = options[ i ];
    -					if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {
    -						optionSet = true;
    -					}
    -				}
    -
    -				// force browsers to behave consistently when non-matching value is set
    -				if ( !optionSet ) {
    -					elem.selectedIndex = -1;
    -				}
    -				return values;
    -			}
    -		}
    -	},
    -
    -	attr: function( elem, name, value ) {
    -		var hooks, ret,
    -			nType = elem.nodeType;
    -
    -		// don't get/set attributes on text, comment and attribute nodes
    -		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
    -			return;
    -		}
    -
    -		// Fallback to prop when attributes are not supported
    -		if ( typeof elem.getAttribute === core_strundefined ) {
    -			return jQuery.prop( elem, name, value );
    -		}
    -
    -		// All attributes are lowercase
    -		// Grab necessary hook if one is defined
    -		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
    -			name = name.toLowerCase();
    -			hooks = jQuery.attrHooks[ name ] ||
    -				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
    -		}
    -
    -		if ( value !== undefined ) {
    -
    -			if ( value === null ) {
    -				jQuery.removeAttr( elem, name );
    -
    -			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
    -				return ret;
    -
    -			} else {
    -				elem.setAttribute( name, value + "" );
    -				return value;
    -			}
    -
    -		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
    -			return ret;
    -
    -		} else {
    -			ret = jQuery.find.attr( elem, name );
    -
    -			// Non-existent attributes return null, we normalize to undefined
    -			return ret == null ?
    -				undefined :
    -				ret;
    -		}
    -	},
    -
    -	removeAttr: function( elem, value ) {
    -		var name, propName,
    -			i = 0,
    -			attrNames = value && value.match( core_rnotwhite );
    -
    -		if ( attrNames && elem.nodeType === 1 ) {
    -			while ( (name = attrNames[i++]) ) {
    -				propName = jQuery.propFix[ name ] || name;
    -
    -				// Boolean attributes get special treatment (#10870)
    -				if ( jQuery.expr.match.bool.test( name ) ) {
    -					// Set corresponding property to false
    -					if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
    -						elem[ propName ] = false;
    -					// Support: IE<9
    -					// Also clear defaultChecked/defaultSelected (if appropriate)
    -					} else {
    -						elem[ jQuery.camelCase( "default-" + name ) ] =
    -							elem[ propName ] = false;
    -					}
    -
    -				// See #9699 for explanation of this approach (setting first, then removal)
    -				} else {
    -					jQuery.attr( elem, name, "" );
    -				}
    -
    -				elem.removeAttribute( getSetAttribute ? name : propName );
    -			}
    -		}
    -	},
    -
    -	attrHooks: {
    -		type: {
    -			set: function( elem, value ) {
    -				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
    -					// Setting the type on a radio button after the value resets the value in IE6-9
    -					// Reset value to default in case type is set after value during creation
    -					var val = elem.value;
    -					elem.setAttribute( "type", value );
    -					if ( val ) {
    -						elem.value = val;
    -					}
    -					return value;
    -				}
    -			}
    -		}
    -	},
    -
    -	propFix: {
    -		"for": "htmlFor",
    -		"class": "className"
    -	},
    -
    -	prop: function( elem, name, value ) {
    -		var ret, hooks, notxml,
    -			nType = elem.nodeType;
    -
    -		// don't get/set properties on text, comment and attribute nodes
    -		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
    -			return;
    -		}
    -
    -		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
    -
    -		if ( notxml ) {
    -			// Fix name and attach hooks
    -			name = jQuery.propFix[ name ] || name;
    -			hooks = jQuery.propHooks[ name ];
    -		}
    -
    -		if ( value !== undefined ) {
    -			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
    -				ret :
    -				( elem[ name ] = value );
    -
    -		} else {
    -			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
    -				ret :
    -				elem[ name ];
    -		}
    -	},
    -
    -	propHooks: {
    -		tabIndex: {
    -			get: function( elem ) {
    -				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
    -				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
    -				// Use proper attribute retrieval(#12072)
    -				var tabindex = jQuery.find.attr( elem, "tabindex" );
    -
    -				return tabindex ?
    -					parseInt( tabindex, 10 ) :
    -					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
    -						0 :
    -						-1;
    -			}
    -		}
    -	}
    -});
    -
    -// Hooks for boolean attributes
    -boolHook = {
    -	set: function( elem, value, name ) {
    -		if ( value === false ) {
    -			// Remove boolean attributes when set to false
    -			jQuery.removeAttr( elem, name );
    -		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
    -			// IE<8 needs the *property* name
    -			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
    -
    -		// Use defaultChecked and defaultSelected for oldIE
    -		} else {
    -			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
    -		}
    -
    -		return name;
    -	}
    -};
    -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
    -	var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;
    -
    -	jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
    -		function( elem, name, isXML ) {
    -			var fn = jQuery.expr.attrHandle[ name ],
    -				ret = isXML ?
    -					undefined :
    -					/* jshint eqeqeq: false */
    -					(jQuery.expr.attrHandle[ name ] = undefined) !=
    -						getter( elem, name, isXML ) ?
    -
    -						name.toLowerCase() :
    -						null;
    -			jQuery.expr.attrHandle[ name ] = fn;
    -			return ret;
    -		} :
    -		function( elem, name, isXML ) {
    -			return isXML ?
    -				undefined :
    -				elem[ jQuery.camelCase( "default-" + name ) ] ?
    -					name.toLowerCase() :
    -					null;
    -		};
    -});
    -
    -// fix oldIE attroperties
    -if ( !getSetInput || !getSetAttribute ) {
    -	jQuery.attrHooks.value = {
    -		set: function( elem, value, name ) {
    -			if ( jQuery.nodeName( elem, "input" ) ) {
    -				// Does not return so that setAttribute is also used
    -				elem.defaultValue = value;
    -			} else {
    -				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
    -				return nodeHook && nodeHook.set( elem, value, name );
    -			}
    -		}
    -	};
    -}
    -
    -// IE6/7 do not support getting/setting some attributes with get/setAttribute
    -if ( !getSetAttribute ) {
    -
    -	// Use this for any attribute in IE6/7
    -	// This fixes almost every IE6/7 issue
    -	nodeHook = {
    -		set: function( elem, value, name ) {
    -			// Set the existing or create a new attribute node
    -			var ret = elem.getAttributeNode( name );
    -			if ( !ret ) {
    -				elem.setAttributeNode(
    -					(ret = elem.ownerDocument.createAttribute( name ))
    -				);
    -			}
    -
    -			ret.value = value += "";
    -
    -			// Break association with cloned elements by also using setAttribute (#9646)
    -			return name === "value" || value === elem.getAttribute( name ) ?
    -				value :
    -				undefined;
    -		}
    -	};
    -	jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =
    -		// Some attributes are constructed with empty-string values when not defined
    -		function( elem, name, isXML ) {
    -			var ret;
    -			return isXML ?
    -				undefined :
    -				(ret = elem.getAttributeNode( name )) && ret.value !== "" ?
    -					ret.value :
    -					null;
    -		};
    -	jQuery.valHooks.button = {
    -		get: function( elem, name ) {
    -			var ret = elem.getAttributeNode( name );
    -			return ret && ret.specified ?
    -				ret.value :
    -				undefined;
    -		},
    -		set: nodeHook.set
    -	};
    -
    -	// Set contenteditable to false on removals(#10429)
    -	// Setting to empty string throws an error as an invalid value
    -	jQuery.attrHooks.contenteditable = {
    -		set: function( elem, value, name ) {
    -			nodeHook.set( elem, value === "" ? false : value, name );
    -		}
    -	};
    -
    -	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
    -	// This is for removals
    -	jQuery.each([ "width", "height" ], function( i, name ) {
    -		jQuery.attrHooks[ name ] = {
    -			set: function( elem, value ) {
    -				if ( value === "" ) {
    -					elem.setAttribute( name, "auto" );
    -					return value;
    -				}
    -			}
    -		};
    -	});
    -}
    -
    -
    -// Some attributes require a special call on IE
    -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
    -if ( !jQuery.support.hrefNormalized ) {
    -	// href/src property should get the full normalized URL (#10299/#12915)
    -	jQuery.each([ "href", "src" ], function( i, name ) {
    -		jQuery.propHooks[ name ] = {
    -			get: function( elem ) {
    -				return elem.getAttribute( name, 4 );
    -			}
    -		};
    -	});
    -}
    -
    -if ( !jQuery.support.style ) {
    -	jQuery.attrHooks.style = {
    -		get: function( elem ) {
    -			// Return undefined in the case of empty string
    -			// Note: IE uppercases css property names, but if we were to .toLowerCase()
    -			// .cssText, that would destroy case senstitivity in URL's, like in "background"
    -			return elem.style.cssText || undefined;
    -		},
    -		set: function( elem, value ) {
    -			return ( elem.style.cssText = value + "" );
    -		}
    -	};
    -}
    -
    -// Safari mis-reports the default selected property of an option
    -// Accessing the parent's selectedIndex property fixes it
    -if ( !jQuery.support.optSelected ) {
    -	jQuery.propHooks.selected = {
    -		get: function( elem ) {
    -			var parent = elem.parentNode;
    -
    -			if ( parent ) {
    -				parent.selectedIndex;
    -
    -				// Make sure that it also works with optgroups, see #5701
    -				if ( parent.parentNode ) {
    -					parent.parentNode.selectedIndex;
    -				}
    -			}
    -			return null;
    -		}
    -	};
    -}
    -
    -jQuery.each([
    -	"tabIndex",
    -	"readOnly",
    -	"maxLength",
    -	"cellSpacing",
    -	"cellPadding",
    -	"rowSpan",
    -	"colSpan",
    -	"useMap",
    -	"frameBorder",
    -	"contentEditable"
    -], function() {
    -	jQuery.propFix[ this.toLowerCase() ] = this;
    -});
    -
    -// IE6/7 call enctype encoding
    -if ( !jQuery.support.enctype ) {
    -	jQuery.propFix.enctype = "encoding";
    -}
    -
    -// Radios and checkboxes getter/setter
    -jQuery.each([ "radio", "checkbox" ], function() {
    -	jQuery.valHooks[ this ] = {
    -		set: function( elem, value ) {
    -			if ( jQuery.isArray( value ) ) {
    -				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
    -			}
    -		}
    -	};
    -	if ( !jQuery.support.checkOn ) {
    -		jQuery.valHooks[ this ].get = function( elem ) {
    -			// Support: Webkit
    -			// "" is returned instead of "on" if a value isn't specified
    -			return elem.getAttribute("value") === null ? "on" : elem.value;
    -		};
    -	}
    -});
    -var rformElems = /^(?:input|select|textarea)$/i,
    -	rkeyEvent = /^key/,
    -	rmouseEvent = /^(?:mouse|contextmenu)|click/,
    -	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
    -	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
    -
    -function returnTrue() {
    -	return true;
    -}
    -
    -function returnFalse() {
    -	return false;
    -}
    -
    -function safeActiveElement() {
    -	try {
    -		return document.activeElement;
    -	} catch ( err ) { }
    -}
    -
    -/*
    - * Helper functions for managing events -- not part of the public interface.
    - * Props to Dean Edwards' addEvent library for many of the ideas.
    - */
    -jQuery.event = {
    -
    -	global: {},
    -
    -	add: function( elem, types, handler, data, selector ) {
    -		var tmp, events, t, handleObjIn,
    -			special, eventHandle, handleObj,
    -			handlers, type, namespaces, origType,
    -			elemData = jQuery._data( elem );
    -
    -		// Don't attach events to noData or text/comment nodes (but allow plain objects)
    -		if ( !elemData ) {
    -			return;
    -		}
    -
    -		// Caller can pass in an object of custom data in lieu of the handler
    -		if ( handler.handler ) {
    -			handleObjIn = handler;
    -			handler = handleObjIn.handler;
    -			selector = handleObjIn.selector;
    -		}
    -
    -		// Make sure that the handler has a unique ID, used to find/remove it later
    -		if ( !handler.guid ) {
    -			handler.guid = jQuery.guid++;
    -		}
    -
    -		// Init the element's event structure and main handler, if this is the first
    -		if ( !(events = elemData.events) ) {
    -			events = elemData.events = {};
    -		}
    -		if ( !(eventHandle = elemData.handle) ) {
    -			eventHandle = elemData.handle = function( e ) {
    -				// Discard the second event of a jQuery.event.trigger() and
    -				// when an event is called after a page has unloaded
    -				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
    -					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
    -					undefined;
    -			};
    -			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
    -			eventHandle.elem = elem;
    -		}
    -
    -		// Handle multiple events separated by a space
    -		types = ( types || "" ).match( core_rnotwhite ) || [""];
    -		t = types.length;
    -		while ( t-- ) {
    -			tmp = rtypenamespace.exec( types[t] ) || [];
    -			type = origType = tmp[1];
    -			namespaces = ( tmp[2] || "" ).split( "." ).sort();
    -
    -			// There *must* be a type, no attaching namespace-only handlers
    -			if ( !type ) {
    -				continue;
    -			}
    -
    -			// If event changes its type, use the special event handlers for the changed type
    -			special = jQuery.event.special[ type ] || {};
    -
    -			// If selector defined, determine special event api type, otherwise given type
    -			type = ( selector ? special.delegateType : special.bindType ) || type;
    -
    -			// Update special based on newly reset type
    -			special = jQuery.event.special[ type ] || {};
    -
    -			// handleObj is passed to all event handlers
    -			handleObj = jQuery.extend({
    -				type: type,
    -				origType: origType,
    -				data: data,
    -				handler: handler,
    -				guid: handler.guid,
    -				selector: selector,
    -				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
    -				namespace: namespaces.join(".")
    -			}, handleObjIn );
    -
    -			// Init the event handler queue if we're the first
    -			if ( !(handlers = events[ type ]) ) {
    -				handlers = events[ type ] = [];
    -				handlers.delegateCount = 0;
    -
    -				// Only use addEventListener/attachEvent if the special events handler returns false
    -				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
    -					// Bind the global event handler to the element
    -					if ( elem.addEventListener ) {
    -						elem.addEventListener( type, eventHandle, false );
    -
    -					} else if ( elem.attachEvent ) {
    -						elem.attachEvent( "on" + type, eventHandle );
    -					}
    -				}
    -			}
    -
    -			if ( special.add ) {
    -				special.add.call( elem, handleObj );
    -
    -				if ( !handleObj.handler.guid ) {
    -					handleObj.handler.guid = handler.guid;
    -				}
    -			}
    -
    -			// Add to the element's handler list, delegates in front
    -			if ( selector ) {
    -				handlers.splice( handlers.delegateCount++, 0, handleObj );
    -			} else {
    -				handlers.push( handleObj );
    -			}
    -
    -			// Keep track of which events have ever been used, for event optimization
    -			jQuery.event.global[ type ] = true;
    -		}
    -
    -		// Nullify elem to prevent memory leaks in IE
    -		elem = null;
    -	},
    -
    -	// Detach an event or set of events from an element
    -	remove: function( elem, types, handler, selector, mappedTypes ) {
    -		var j, handleObj, tmp,
    -			origCount, t, events,
    -			special, handlers, type,
    -			namespaces, origType,
    -			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
    -
    -		if ( !elemData || !(events = elemData.events) ) {
    -			return;
    -		}
    -
    -		// Once for each type.namespace in types; type may be omitted
    -		types = ( types || "" ).match( core_rnotwhite ) || [""];
    -		t = types.length;
    -		while ( t-- ) {
    -			tmp = rtypenamespace.exec( types[t] ) || [];
    -			type = origType = tmp[1];
    -			namespaces = ( tmp[2] || "" ).split( "." ).sort();
    -
    -			// Unbind all events (on this namespace, if provided) for the element
    -			if ( !type ) {
    -				for ( type in events ) {
    -					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
    -				}
    -				continue;
    -			}
    -
    -			special = jQuery.event.special[ type ] || {};
    -			type = ( selector ? special.delegateType : special.bindType ) || type;
    -			handlers = events[ type ] || [];
    -			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
    -
    -			// Remove matching events
    -			origCount = j = handlers.length;
    -			while ( j-- ) {
    -				handleObj = handlers[ j ];
    -
    -				if ( ( mappedTypes || origType === handleObj.origType ) &&
    -					( !handler || handler.guid === handleObj.guid ) &&
    -					( !tmp || tmp.test( handleObj.namespace ) ) &&
    -					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
    -					handlers.splice( j, 1 );
    -
    -					if ( handleObj.selector ) {
    -						handlers.delegateCount--;
    -					}
    -					if ( special.remove ) {
    -						special.remove.call( elem, handleObj );
    -					}
    -				}
    -			}
    -
    -			// Remove generic event handler if we removed something and no more handlers exist
    -			// (avoids potential for endless recursion during removal of special event handlers)
    -			if ( origCount && !handlers.length ) {
    -				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
    -					jQuery.removeEvent( elem, type, elemData.handle );
    -				}
    -
    -				delete events[ type ];
    -			}
    -		}
    -
    -		// Remove the expando if it's no longer used
    -		if ( jQuery.isEmptyObject( events ) ) {
    -			delete elemData.handle;
    -
    -			// removeData also checks for emptiness and clears the expando if empty
    -			// so use it instead of delete
    -			jQuery._removeData( elem, "events" );
    -		}
    -	},
    -
    -	trigger: function( event, data, elem, onlyHandlers ) {
    -		var handle, ontype, cur,
    -			bubbleType, special, tmp, i,
    -			eventPath = [ elem || document ],
    -			type = core_hasOwn.call( event, "type" ) ? event.type : event,
    -			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
    -
    -		cur = tmp = elem = elem || document;
    -
    -		// Don't do events on text and comment nodes
    -		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
    -			return;
    -		}
    -
    -		// focus/blur morphs to focusin/out; ensure we're not firing them right now
    -		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
    -			return;
    -		}
    -
    -		if ( type.indexOf(".") >= 0 ) {
    -			// Namespaced trigger; create a regexp to match event type in handle()
    -			namespaces = type.split(".");
    -			type = namespaces.shift();
    -			namespaces.sort();
    -		}
    -		ontype = type.indexOf(":") < 0 && "on" + type;
    -
    -		// Caller can pass in a jQuery.Event object, Object, or just an event type string
    -		event = event[ jQuery.expando ] ?
    -			event :
    -			new jQuery.Event( type, typeof event === "object" && event );
    -
    -		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
    -		event.isTrigger = onlyHandlers ? 2 : 3;
    -		event.namespace = namespaces.join(".");
    -		event.namespace_re = event.namespace ?
    -			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
    -			null;
    -
    -		// Clean up the event in case it is being reused
    -		event.result = undefined;
    -		if ( !event.target ) {
    -			event.target = elem;
    -		}
    -
    -		// Clone any incoming data and prepend the event, creating the handler arg list
    -		data = data == null ?
    -			[ event ] :
    -			jQuery.makeArray( data, [ event ] );
    -
    -		// Allow special events to draw outside the lines
    -		special = jQuery.event.special[ type ] || {};
    -		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
    -			return;
    -		}
    -
    -		// Determine event propagation path in advance, per W3C events spec (#9951)
    -		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
    -		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
    -
    -			bubbleType = special.delegateType || type;
    -			if ( !rfocusMorph.test( bubbleType + type ) ) {
    -				cur = cur.parentNode;
    -			}
    -			for ( ; cur; cur = cur.parentNode ) {
    -				eventPath.push( cur );
    -				tmp = cur;
    -			}
    -
    -			// Only add window if we got to document (e.g., not plain obj or detached DOM)
    -			if ( tmp === (elem.ownerDocument || document) ) {
    -				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
    -			}
    -		}
    -
    -		// Fire handlers on the event path
    -		i = 0;
    -		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
    -
    -			event.type = i > 1 ?
    -				bubbleType :
    -				special.bindType || type;
    -
    -			// jQuery handler
    -			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
    -			if ( handle ) {
    -				handle.apply( cur, data );
    -			}
    -
    -			// Native handler
    -			handle = ontype && cur[ ontype ];
    -			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
    -				event.preventDefault();
    -			}
    -		}
    -		event.type = type;
    -
    -		// If nobody prevented the default action, do it now
    -		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
    -
    -			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
    -				jQuery.acceptData( elem ) ) {
    -
    -				// Call a native DOM method on the target with the same name name as the event.
    -				// Can't use an .isFunction() check here because IE6/7 fails that test.
    -				// Don't do default actions on window, that's where global variables be (#6170)
    -				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
    -
    -					// Don't re-trigger an onFOO event when we call its FOO() method
    -					tmp = elem[ ontype ];
    -
    -					if ( tmp ) {
    -						elem[ ontype ] = null;
    -					}
    -
    -					// Prevent re-triggering of the same event, since we already bubbled it above
    -					jQuery.event.triggered = type;
    -					try {
    -						elem[ type ]();
    -					} catch ( e ) {
    -						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
    -						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
    -					}
    -					jQuery.event.triggered = undefined;
    -
    -					if ( tmp ) {
    -						elem[ ontype ] = tmp;
    -					}
    -				}
    -			}
    -		}
    -
    -		return event.result;
    -	},
    -
    -	dispatch: function( event ) {
    -
    -		// Make a writable jQuery.Event from the native event object
    -		event = jQuery.event.fix( event );
    -
    -		var i, ret, handleObj, matched, j,
    -			handlerQueue = [],
    -			args = core_slice.call( arguments ),
    -			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
    -			special = jQuery.event.special[ event.type ] || {};
    -
    -		// Use the fix-ed jQuery.Event rather than the (read-only) native event
    -		args[0] = event;
    -		event.delegateTarget = this;
    -
    -		// Call the preDispatch hook for the mapped type, and let it bail if desired
    -		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
    -			return;
    -		}
    -
    -		// Determine handlers
    -		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
    -
    -		// Run delegates first; they may want to stop propagation beneath us
    -		i = 0;
    -		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
    -			event.currentTarget = matched.elem;
    -
    -			j = 0;
    -			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
    -
    -				// Triggered event must either 1) have no namespace, or
    -				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
    -				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
    -
    -					event.handleObj = handleObj;
    -					event.data = handleObj.data;
    -
    -					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
    -							.apply( matched.elem, args );
    -
    -					if ( ret !== undefined ) {
    -						if ( (event.result = ret) === false ) {
    -							event.preventDefault();
    -							event.stopPropagation();
    -						}
    -					}
    -				}
    -			}
    -		}
    -
    -		// Call the postDispatch hook for the mapped type
    -		if ( special.postDispatch ) {
    -			special.postDispatch.call( this, event );
    -		}
    -
    -		return event.result;
    -	},
    -
    -	handlers: function( event, handlers ) {
    -		var sel, handleObj, matches, i,
    -			handlerQueue = [],
    -			delegateCount = handlers.delegateCount,
    -			cur = event.target;
    -
    -		// Find delegate handlers
    -		// Black-hole SVG <use> instance trees (#13180)
    -		// Avoid non-left-click bubbling in Firefox (#3861)
    -		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
    -
    -			/* jshint eqeqeq: false */
    -			for ( ; cur != this; cur = cur.parentNode || this ) {
    -				/* jshint eqeqeq: true */
    -
    -				// Don't check non-elements (#13208)
    -				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
    -				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
    -					matches = [];
    -					for ( i = 0; i < delegateCount; i++ ) {
    -						handleObj = handlers[ i ];
    -
    -						// Don't conflict with Object.prototype properties (#13203)
    -						sel = handleObj.selector + " ";
    -
    -						if ( matches[ sel ] === undefined ) {
    -							matches[ sel ] = handleObj.needsContext ?
    -								jQuery( sel, this ).index( cur ) >= 0 :
    -								jQuery.find( sel, this, null, [ cur ] ).length;
    -						}
    -						if ( matches[ sel ] ) {
    -							matches.push( handleObj );
    -						}
    -					}
    -					if ( matches.length ) {
    -						handlerQueue.push({ elem: cur, handlers: matches });
    -					}
    -				}
    -			}
    -		}
    -
    -		// Add the remaining (directly-bound) handlers
    -		if ( delegateCount < handlers.length ) {
    -			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
    -		}
    -
    -		return handlerQueue;
    -	},
    -
    -	fix: function( event ) {
    -		if ( event[ jQuery.expando ] ) {
    -			return event;
    -		}
    -
    -		// Create a writable copy of the event object and normalize some properties
    -		var i, prop, copy,
    -			type = event.type,
    -			originalEvent = event,
    -			fixHook = this.fixHooks[ type ];
    -
    -		if ( !fixHook ) {
    -			this.fixHooks[ type ] = fixHook =
    -				rmouseEvent.test( type ) ? this.mouseHooks :
    -				rkeyEvent.test( type ) ? this.keyHooks :
    -				{};
    -		}
    -		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
    -
    -		event = new jQuery.Event( originalEvent );
    -
    -		i = copy.length;
    -		while ( i-- ) {
    -			prop = copy[ i ];
    -			event[ prop ] = originalEvent[ prop ];
    -		}
    -
    -		// Support: IE<9
    -		// Fix target property (#1925)
    -		if ( !event.target ) {
    -			event.target = originalEvent.srcElement || document;
    -		}
    -
    -		// Support: Chrome 23+, Safari?
    -		// Target should not be a text node (#504, #13143)
    -		if ( event.target.nodeType === 3 ) {
    -			event.target = event.target.parentNode;
    -		}
    -
    -		// Support: IE<9
    -		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
    -		event.metaKey = !!event.metaKey;
    -
    -		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
    -	},
    -
    -	// Includes some event props shared by KeyEvent and MouseEvent
    -	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
    -
    -	fixHooks: {},
    -
    -	keyHooks: {
    -		props: "char charCode key keyCode".split(" "),
    -		filter: function( event, original ) {
    -
    -			// Add which for key events
    -			if ( event.which == null ) {
    -				event.which = original.charCode != null ? original.charCode : original.keyCode;
    -			}
    -
    -			return event;
    -		}
    -	},
    -
    -	mouseHooks: {
    -		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
    -		filter: function( event, original ) {
    -			var body, eventDoc, doc,
    -				button = original.button,
    -				fromElement = original.fromElement;
    -
    -			// Calculate pageX/Y if missing and clientX/Y available
    -			if ( event.pageX == null && original.clientX != null ) {
    -				eventDoc = event.target.ownerDocument || document;
    -				doc = eventDoc.documentElement;
    -				body = eventDoc.body;
    -
    -				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
    -				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
    -			}
    -
    -			// Add relatedTarget, if necessary
    -			if ( !event.relatedTarget && fromElement ) {
    -				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
    -			}
    -
    -			// Add which for click: 1 === left; 2 === middle; 3 === right
    -			// Note: button is not normalized, so don't use it
    -			if ( !event.which && button !== undefined ) {
    -				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
    -			}
    -
    -			return event;
    -		}
    -	},
    -
    -	special: {
    -		load: {
    -			// Prevent triggered image.load events from bubbling to window.load
    -			noBubble: true
    -		},
    -		focus: {
    -			// Fire native event if possible so blur/focus sequence is correct
    -			trigger: function() {
    -				if ( this !== safeActiveElement() && this.focus ) {
    -					try {
    -						this.focus();
    -						return false;
    -					} catch ( e ) {
    -						// Support: IE<9
    -						// If we error on focus to hidden element (#1486, #12518),
    -						// let .trigger() run the handlers
    -					}
    -				}
    -			},
    -			delegateType: "focusin"
    -		},
    -		blur: {
    -			trigger: function() {
    -				if ( this === safeActiveElement() && this.blur ) {
    -					this.blur();
    -					return false;
    -				}
    -			},
    -			delegateType: "focusout"
    -		},
    -		click: {
    -			// For checkbox, fire native event so checked state will be right
    -			trigger: function() {
    -				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
    -					this.click();
    -					return false;
    -				}
    -			},
    -
    -			// For cross-browser consistency, don't fire native .click() on links
    -			_default: function( event ) {
    -				return jQuery.nodeName( event.target, "a" );
    -			}
    -		},
    -
    -		beforeunload: {
    -			postDispatch: function( event ) {
    -
    -				// Even when returnValue equals to undefined Firefox will still show alert
    -				if ( event.result !== undefined ) {
    -					event.originalEvent.returnValue = event.result;
    -				}
    -			}
    -		}
    -	},
    -
    -	simulate: function( type, elem, event, bubble ) {
    -		// Piggyback on a donor event to simulate a different one.
    -		// Fake originalEvent to avoid donor's stopPropagation, but if the
    -		// simulated event prevents default then we do the same on the donor.
    -		var e = jQuery.extend(
    -			new jQuery.Event(),
    -			event,
    -			{
    -				type: type,
    -				isSimulated: true,
    -				originalEvent: {}
    -			}
    -		);
    -		if ( bubble ) {
    -			jQuery.event.trigger( e, null, elem );
    -		} else {
    -			jQuery.event.dispatch.call( elem, e );
    -		}
    -		if ( e.isDefaultPrevented() ) {
    -			event.preventDefault();
    -		}
    -	}
    -};
    -
    -jQuery.removeEvent = document.removeEventListener ?
    -	function( elem, type, handle ) {
    -		if ( elem.removeEventListener ) {
    -			elem.removeEventListener( type, handle, false );
    -		}
    -	} :
    -	function( elem, type, handle ) {
    -		var name = "on" + type;
    -
    -		if ( elem.detachEvent ) {
    -
    -			// #8545, #7054, preventing memory leaks for custom events in IE6-8
    -			// detachEvent needed property on element, by name of that event, to properly expose it to GC
    -			if ( typeof elem[ name ] === core_strundefined ) {
    -				elem[ name ] = null;
    -			}
    -
    -			elem.detachEvent( name, handle );
    -		}
    -	};
    -
    -jQuery.Event = function( src, props ) {
    -	// Allow instantiation without the 'new' keyword
    -	if ( !(this instanceof jQuery.Event) ) {
    -		return new jQuery.Event( src, props );
    -	}
    -
    -	// Event object
    -	if ( src && src.type ) {
    -		this.originalEvent = src;
    -		this.type = src.type;
    -
    -		// Events bubbling up the document may have been marked as prevented
    -		// by a handler lower down the tree; reflect the correct value.
    -		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
    -			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
    -
    -	// Event type
    -	} else {
    -		this.type = src;
    -	}
    -
    -	// Put explicitly provided properties onto the event object
    -	if ( props ) {
    -		jQuery.extend( this, props );
    -	}
    -
    -	// Create a timestamp if incoming event doesn't have one
    -	this.timeStamp = src && src.timeStamp || jQuery.now();
    -
    -	// Mark it as fixed
    -	this[ jQuery.expando ] = true;
    -};
    -
    -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
    -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
    -jQuery.Event.prototype = {
    -	isDefaultPrevented: returnFalse,
    -	isPropagationStopped: returnFalse,
    -	isImmediatePropagationStopped: returnFalse,
    -
    -	preventDefault: function() {
    -		var e = this.originalEvent;
    -
    -		this.isDefaultPrevented = returnTrue;
    -		if ( !e ) {
    -			return;
    -		}
    -
    -		// If preventDefault exists, run it on the original event
    -		if ( e.preventDefault ) {
    -			e.preventDefault();
    -
    -		// Support: IE
    -		// Otherwise set the returnValue property of the original event to false
    -		} else {
    -			e.returnValue = false;
    -		}
    -	},
    -	stopPropagation: function() {
    -		var e = this.originalEvent;
    -
    -		this.isPropagationStopped = returnTrue;
    -		if ( !e ) {
    -			return;
    -		}
    -		// If stopPropagation exists, run it on the original event
    -		if ( e.stopPropagation ) {
    -			e.stopPropagation();
    -		}
    -
    -		// Support: IE
    -		// Set the cancelBubble property of the original event to true
    -		e.cancelBubble = true;
    -	},
    -	stopImmediatePropagation: function() {
    -		this.isImmediatePropagationStopped = returnTrue;
    -		this.stopPropagation();
    -	}
    -};
    -
    -// Create mouseenter/leave events using mouseover/out and event-time checks
    -jQuery.each({
    -	mouseenter: "mouseover",
    -	mouseleave: "mouseout"
    -}, function( orig, fix ) {
    -	jQuery.event.special[ orig ] = {
    -		delegateType: fix,
    -		bindType: fix,
    -
    -		handle: function( event ) {
    -			var ret,
    -				target = this,
    -				related = event.relatedTarget,
    -				handleObj = event.handleObj;
    -
    -			// For mousenter/leave call the handler if related is outside the target.
    -			// NB: No relatedTarget if the mouse left/entered the browser window
    -			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
    -				event.type = handleObj.origType;
    -				ret = handleObj.handler.apply( this, arguments );
    -				event.type = fix;
    -			}
    -			return ret;
    -		}
    -	};
    -});
    -
    -// IE submit delegation
    -if ( !jQuery.support.submitBubbles ) {
    -
    -	jQuery.event.special.submit = {
    -		setup: function() {
    -			// Only need this for delegated form submit events
    -			if ( jQuery.nodeName( this, "form" ) ) {
    -				return false;
    -			}
    -
    -			// Lazy-add a submit handler when a descendant form may potentially be submitted
    -			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
    -				// Node name check avoids a VML-related crash in IE (#9807)
    -				var elem = e.target,
    -					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
    -				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
    -					jQuery.event.add( form, "submit._submit", function( event ) {
    -						event._submit_bubble = true;
    -					});
    -					jQuery._data( form, "submitBubbles", true );
    -				}
    -			});
    -			// return undefined since we don't need an event listener
    -		},
    -
    -		postDispatch: function( event ) {
    -			// If form was submitted by the user, bubble the event up the tree
    -			if ( event._submit_bubble ) {
    -				delete event._submit_bubble;
    -				if ( this.parentNode && !event.isTrigger ) {
    -					jQuery.event.simulate( "submit", this.parentNode, event, true );
    -				}
    -			}
    -		},
    -
    -		teardown: function() {
    -			// Only need this for delegated form submit events
    -			if ( jQuery.nodeName( this, "form" ) ) {
    -				return false;
    -			}
    -
    -			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
    -			jQuery.event.remove( this, "._submit" );
    -		}
    -	};
    -}
    -
    -// IE change delegation and checkbox/radio fix
    -if ( !jQuery.support.changeBubbles ) {
    -
    -	jQuery.event.special.change = {
    -
    -		setup: function() {
    -
    -			if ( rformElems.test( this.nodeName ) ) {
    -				// IE doesn't fire change on a check/radio until blur; trigger it on click
    -				// after a propertychange. Eat the blur-change in special.change.handle.
    -				// This still fires onchange a second time for check/radio after blur.
    -				if ( this.type === "checkbox" || this.type === "radio" ) {
    -					jQuery.event.add( this, "propertychange._change", function( event ) {
    -						if ( event.originalEvent.propertyName === "checked" ) {
    -							this._just_changed = true;
    -						}
    -					});
    -					jQuery.event.add( this, "click._change", function( event ) {
    -						if ( this._just_changed && !event.isTrigger ) {
    -							this._just_changed = false;
    -						}
    -						// Allow triggered, simulated change events (#11500)
    -						jQuery.event.simulate( "change", this, event, true );
    -					});
    -				}
    -				return false;
    -			}
    -			// Delegated event; lazy-add a change handler on descendant inputs
    -			jQuery.event.add( this, "beforeactivate._change", function( e ) {
    -				var elem = e.target;
    -
    -				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
    -					jQuery.event.add( elem, "change._change", function( event ) {
    -						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
    -							jQuery.event.simulate( "change", this.parentNode, event, true );
    -						}
    -					});
    -					jQuery._data( elem, "changeBubbles", true );
    -				}
    -			});
    -		},
    -
    -		handle: function( event ) {
    -			var elem = event.target;
    -
    -			// Swallow native change events from checkbox/radio, we already triggered them above
    -			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
    -				return event.handleObj.handler.apply( this, arguments );
    -			}
    -		},
    -
    -		teardown: function() {
    -			jQuery.event.remove( this, "._change" );
    -
    -			return !rformElems.test( this.nodeName );
    -		}
    -	};
    -}
    -
    -// Create "bubbling" focus and blur events
    -if ( !jQuery.support.focusinBubbles ) {
    -	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
    -
    -		// Attach a single capturing handler while someone wants focusin/focusout
    -		var attaches = 0,
    -			handler = function( event ) {
    -				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
    -			};
    -
    -		jQuery.event.special[ fix ] = {
    -			setup: function() {
    -				if ( attaches++ === 0 ) {
    -					document.addEventListener( orig, handler, true );
    -				}
    -			},
    -			teardown: function() {
    -				if ( --attaches === 0 ) {
    -					document.removeEventListener( orig, handler, true );
    -				}
    -			}
    -		};
    -	});
    -}
    -
    -jQuery.fn.extend({
    -
    -	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
    -		var type, origFn;
    -
    -		// Types can be a map of types/handlers
    -		if ( typeof types === "object" ) {
    -			// ( types-Object, selector, data )
    -			if ( typeof selector !== "string" ) {
    -				// ( types-Object, data )
    -				data = data || selector;
    -				selector = undefined;
    -			}
    -			for ( type in types ) {
    -				this.on( type, selector, data, types[ type ], one );
    -			}
    -			return this;
    -		}
    -
    -		if ( data == null && fn == null ) {
    -			// ( types, fn )
    -			fn = selector;
    -			data = selector = undefined;
    -		} else if ( fn == null ) {
    -			if ( typeof selector === "string" ) {
    -				// ( types, selector, fn )
    -				fn = data;
    -				data = undefined;
    -			} else {
    -				// ( types, data, fn )
    -				fn = data;
    -				data = selector;
    -				selector = undefined;
    -			}
    -		}
    -		if ( fn === false ) {
    -			fn = returnFalse;
    -		} else if ( !fn ) {
    -			return this;
    -		}
    -
    -		if ( one === 1 ) {
    -			origFn = fn;
    -			fn = function( event ) {
    -				// Can use an empty set, since event contains the info
    -				jQuery().off( event );
    -				return origFn.apply( this, arguments );
    -			};
    -			// Use same guid so caller can remove using origFn
    -			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
    -		}
    -		return this.each( function() {
    -			jQuery.event.add( this, types, fn, data, selector );
    -		});
    -	},
    -	one: function( types, selector, data, fn ) {
    -		return this.on( types, selector, data, fn, 1 );
    -	},
    -	off: function( types, selector, fn ) {
    -		var handleObj, type;
    -		if ( types && types.preventDefault && types.handleObj ) {
    -			// ( event )  dispatched jQuery.Event
    -			handleObj = types.handleObj;
    -			jQuery( types.delegateTarget ).off(
    -				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
    -				handleObj.selector,
    -				handleObj.handler
    -			);
    -			return this;
    -		}
    -		if ( typeof types === "object" ) {
    -			// ( types-object [, selector] )
    -			for ( type in types ) {
    -				this.off( type, selector, types[ type ] );
    -			}
    -			return this;
    -		}
    -		if ( selector === false || typeof selector === "function" ) {
    -			// ( types [, fn] )
    -			fn = selector;
    -			selector = undefined;
    -		}
    -		if ( fn === false ) {
    -			fn = returnFalse;
    -		}
    -		return this.each(function() {
    -			jQuery.event.remove( this, types, fn, selector );
    -		});
    -	},
    -
    -	trigger: function( type, data ) {
    -		return this.each(function() {
    -			jQuery.event.trigger( type, data, this );
    -		});
    -	},
    -	triggerHandler: function( type, data ) {
    -		var elem = this[0];
    -		if ( elem ) {
    -			return jQuery.event.trigger( type, data, elem, true );
    -		}
    -	}
    -});
    -var isSimple = /^.[^:#\[\.,]*$/,
    -	rparentsprev = /^(?:parents|prev(?:Until|All))/,
    -	rneedsContext = jQuery.expr.match.needsContext,
    -	// methods guaranteed to produce a unique set when starting from a unique set
    -	guaranteedUnique = {
    -		children: true,
    -		contents: true,
    -		next: true,
    -		prev: true
    -	};
    -
    -jQuery.fn.extend({
    -	find: function( selector ) {
    -		var i,
    -			ret = [],
    -			self = this,
    -			len = self.length;
    -
    -		if ( typeof selector !== "string" ) {
    -			return this.pushStack( jQuery( selector ).filter(function() {
    -				for ( i = 0; i < len; i++ ) {
    -					if ( jQuery.contains( self[ i ], this ) ) {
    -						return true;
    -					}
    -				}
    -			}) );
    -		}
    -
    -		for ( i = 0; i < len; i++ ) {
    -			jQuery.find( selector, self[ i ], ret );
    -		}
    -
    -		// Needed because $( selector, context ) becomes $( context ).find( selector )
    -		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
    -		ret.selector = this.selector ? this.selector + " " + selector : selector;
    -		return ret;
    -	},
    -
    -	has: function( target ) {
    -		var i,
    -			targets = jQuery( target, this ),
    -			len = targets.length;
    -
    -		return this.filter(function() {
    -			for ( i = 0; i < len; i++ ) {
    -				if ( jQuery.contains( this, targets[i] ) ) {
    -					return true;
    -				}
    -			}
    -		});
    -	},
    -
    -	not: function( selector ) {
    -		return this.pushStack( winnow(this, selector || [], true) );
    -	},
    -
    -	filter: function( selector ) {
    -		return this.pushStack( winnow(this, selector || [], false) );
    -	},
    -
    -	is: function( selector ) {
    -		return !!winnow(
    -			this,
    -
    -			// If this is a positional/relative selector, check membership in the returned set
    -			// so $("p:first").is("p:last") won't return true for a doc with two "p".
    -			typeof selector === "string" && rneedsContext.test( selector ) ?
    -				jQuery( selector ) :
    -				selector || [],
    -			false
    -		).length;
    -	},
    -
    -	closest: function( selectors, context ) {
    -		var cur,
    -			i = 0,
    -			l = this.length,
    -			ret = [],
    -			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
    -				jQuery( selectors, context || this.context ) :
    -				0;
    -
    -		for ( ; i < l; i++ ) {
    -			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
    -				// Always skip document fragments
    -				if ( cur.nodeType < 11 && (pos ?
    -					pos.index(cur) > -1 :
    -
    -					// Don't pass non-elements to Sizzle
    -					cur.nodeType === 1 &&
    -						jQuery.find.matchesSelector(cur, selectors)) ) {
    -
    -					cur = ret.push( cur );
    -					break;
    -				}
    -			}
    -		}
    -
    -		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
    -	},
    -
    -	// Determine the position of an element within
    -	// the matched set of elements
    -	index: function( elem ) {
    -
    -		// No argument, return index in parent
    -		if ( !elem ) {
    -			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
    -		}
    -
    -		// index in selector
    -		if ( typeof elem === "string" ) {
    -			return jQuery.inArray( this[0], jQuery( elem ) );
    -		}
    -
    -		// Locate the position of the desired element
    -		return jQuery.inArray(
    -			// If it receives a jQuery object, the first element is used
    -			elem.jquery ? elem[0] : elem, this );
    -	},
    -
    -	add: function( selector, context ) {
    -		var set = typeof selector === "string" ?
    -				jQuery( selector, context ) :
    -				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
    -			all = jQuery.merge( this.get(), set );
    -
    -		return this.pushStack( jQuery.unique(all) );
    -	},
    -
    -	addBack: function( selector ) {
    -		return this.add( selector == null ?
    -			this.prevObject : this.prevObject.filter(selector)
    -		);
    -	}
    -});
    -
    -function sibling( cur, dir ) {
    -	do {
    -		cur = cur[ dir ];
    -	} while ( cur && cur.nodeType !== 1 );
    -
    -	return cur;
    -}
    -
    -jQuery.each({
    -	parent: function( elem ) {
    -		var parent = elem.parentNode;
    -		return parent && parent.nodeType !== 11 ? parent : null;
    -	},
    -	parents: function( elem ) {
    -		return jQuery.dir( elem, "parentNode" );
    -	},
    -	parentsUntil: function( elem, i, until ) {
    -		return jQuery.dir( elem, "parentNode", until );
    -	},
    -	next: function( elem ) {
    -		return sibling( elem, "nextSibling" );
    -	},
    -	prev: function( elem ) {
    -		return sibling( elem, "previousSibling" );
    -	},
    -	nextAll: function( elem ) {
    -		return jQuery.dir( elem, "nextSibling" );
    -	},
    -	prevAll: function( elem ) {
    -		return jQuery.dir( elem, "previousSibling" );
    -	},
    -	nextUntil: function( elem, i, until ) {
    -		return jQuery.dir( elem, "nextSibling", until );
    -	},
    -	prevUntil: function( elem, i, until ) {
    -		return jQuery.dir( elem, "previousSibling", until );
    -	},
    -	siblings: function( elem ) {
    -		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
    -	},
    -	children: function( elem ) {
    -		return jQuery.sibling( elem.firstChild );
    -	},
    -	contents: function( elem ) {
    -		return jQuery.nodeName( elem, "iframe" ) ?
    -			elem.contentDocument || elem.contentWindow.document :
    -			jQuery.merge( [], elem.childNodes );
    -	}
    -}, function( name, fn ) {
    -	jQuery.fn[ name ] = function( until, selector ) {
    -		var ret = jQuery.map( this, fn, until );
    -
    -		if ( name.slice( -5 ) !== "Until" ) {
    -			selector = until;
    -		}
    -
    -		if ( selector && typeof selector === "string" ) {
    -			ret = jQuery.filter( selector, ret );
    -		}
    -
    -		if ( this.length > 1 ) {
    -			// Remove duplicates
    -			if ( !guaranteedUnique[ name ] ) {
    -				ret = jQuery.unique( ret );
    -			}
    -
    -			// Reverse order for parents* and prev-derivatives
    -			if ( rparentsprev.test( name ) ) {
    -				ret = ret.reverse();
    -			}
    -		}
    -
    -		return this.pushStack( ret );
    -	};
    -});
    -
    -jQuery.extend({
    -	filter: function( expr, elems, not ) {
    -		var elem = elems[ 0 ];
    -
    -		if ( not ) {
    -			expr = ":not(" + expr + ")";
    -		}
    -
    -		return elems.length === 1 && elem.nodeType === 1 ?
    -			jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
    -			jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
    -				return elem.nodeType === 1;
    -			}));
    -	},
    -
    -	dir: function( elem, dir, until ) {
    -		var matched = [],
    -			cur = elem[ dir ];
    -
    -		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
    -			if ( cur.nodeType === 1 ) {
    -				matched.push( cur );
    -			}
    -			cur = cur[dir];
    -		}
    -		return matched;
    -	},
    -
    -	sibling: function( n, elem ) {
    -		var r = [];
    -
    -		for ( ; n; n = n.nextSibling ) {
    -			if ( n.nodeType === 1 && n !== elem ) {
    -				r.push( n );
    -			}
    -		}
    -
    -		return r;
    -	}
    -});
    -
    -// Implement the identical functionality for filter and not
    -function winnow( elements, qualifier, not ) {
    -	if ( jQuery.isFunction( qualifier ) ) {
    -		return jQuery.grep( elements, function( elem, i ) {
    -			/* jshint -W018 */
    -			return !!qualifier.call( elem, i, elem ) !== not;
    -		});
    -
    -	}
    -
    -	if ( qualifier.nodeType ) {
    -		return jQuery.grep( elements, function( elem ) {
    -			return ( elem === qualifier ) !== not;
    -		});
    -
    -	}
    -
    -	if ( typeof qualifier === "string" ) {
    -		if ( isSimple.test( qualifier ) ) {
    -			return jQuery.filter( qualifier, elements, not );
    -		}
    -
    -		qualifier = jQuery.filter( qualifier, elements );
    -	}
    -
    -	return jQuery.grep( elements, function( elem ) {
    -		return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
    -	});
    -}
    -function createSafeFragment( document ) {
    -	var list = nodeNames.split( "|" ),
    -		safeFrag = document.createDocumentFragment();
    -
    -	if ( safeFrag.createElement ) {
    -		while ( list.length ) {
    -			safeFrag.createElement(
    -				list.pop()
    -			);
    -		}
    -	}
    -	return safeFrag;
    -}
    -
    -var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
    -		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
    -	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
    -	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
    -	rleadingWhitespace = /^\s+/,
    -	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
    -	rtagName = /<([\w:]+)/,
    -	rtbody = /<tbody/i,
    -	rhtml = /<|&#?\w+;/,
    -	rnoInnerhtml = /<(?:script|style|link)/i,
    -	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
    -	// checked="checked" or checked
    -	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
    -	rscriptType = /^$|\/(?:java|ecma)script/i,
    -	rscriptTypeMasked = /^true\/(.*)/,
    -	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
    -
    -	// We have to close these tags to support XHTML (#13200)
    -	wrapMap = {
    -		option: [ 1, "<select multiple='multiple'>", "</select>" ],
    -		legend: [ 1, "<fieldset>", "</fieldset>" ],
    -		area: [ 1, "<map>", "</map>" ],
    -		param: [ 1, "<object>", "</object>" ],
    -		thead: [ 1, "<table>", "</table>" ],
    -		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
    -		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
    -		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
    -
    -		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
    -		// unless wrapped in a div with non-breaking characters in front of it.
    -		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
    -	},
    -	safeFragment = createSafeFragment( document ),
    -	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
    -
    -wrapMap.optgroup = wrapMap.option;
    -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
    -wrapMap.th = wrapMap.td;
    -
    -jQuery.fn.extend({
    -	text: function( value ) {
    -		return jQuery.access( this, function( value ) {
    -			return value === undefined ?
    -				jQuery.text( this ) :
    -				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
    -		}, null, value, arguments.length );
    -	},
    -
    -	append: function() {
    -		return this.domManip( arguments, function( elem ) {
    -			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
    -				var target = manipulationTarget( this, elem );
    -				target.appendChild( elem );
    -			}
    -		});
    -	},
    -
    -	prepend: function() {
    -		return this.domManip( arguments, function( elem ) {
    -			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
    -				var target = manipulationTarget( this, elem );
    -				target.insertBefore( elem, target.firstChild );
    -			}
    -		});
    -	},
    -
    -	before: function() {
    -		return this.domManip( arguments, function( elem ) {
    -			if ( this.parentNode ) {
    -				this.parentNode.insertBefore( elem, this );
    -			}
    -		});
    -	},
    -
    -	after: function() {
    -		return this.domManip( arguments, function( elem ) {
    -			if ( this.parentNode ) {
    -				this.parentNode.insertBefore( elem, this.nextSibling );
    -			}
    -		});
    -	},
    -
    -	// keepData is for internal use only--do not document
    -	remove: function( selector, keepData ) {
    -		var elem,
    -			elems = selector ? jQuery.filter( selector, this ) : this,
    -			i = 0;
    -
    -		for ( ; (elem = elems[i]) != null; i++ ) {
    -
    -			if ( !keepData && elem.nodeType === 1 ) {
    -				jQuery.cleanData( getAll( elem ) );
    -			}
    -
    -			if ( elem.parentNode ) {
    -				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
    -					setGlobalEval( getAll( elem, "script" ) );
    -				}
    -				elem.parentNode.removeChild( elem );
    -			}
    -		}
    -
    -		return this;
    -	},
    -
    -	empty: function() {
    -		var elem,
    -			i = 0;
    -
    -		for ( ; (elem = this[i]) != null; i++ ) {
    -			// Remove element nodes and prevent memory leaks
    -			if ( elem.nodeType === 1 ) {
    -				jQuery.cleanData( getAll( elem, false ) );
    -			}
    -
    -			// Remove any remaining nodes
    -			while ( elem.firstChild ) {
    -				elem.removeChild( elem.firstChild );
    -			}
    -
    -			// If this is a select, ensure that it displays empty (#12336)
    -			// Support: IE<9
    -			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
    -				elem.options.length = 0;
    -			}
    -		}
    -
    -		return this;
    -	},
    -
    -	clone: function( dataAndEvents, deepDataAndEvents ) {
    -		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
    -		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
    -
    -		return this.map( function () {
    -			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
    -		});
    -	},
    -
    -	html: function( value ) {
    -		return jQuery.access( this, function( value ) {
    -			var elem = this[0] || {},
    -				i = 0,
    -				l = this.length;
    -
    -			if ( value === undefined ) {
    -				return elem.nodeType === 1 ?
    -					elem.innerHTML.replace( rinlinejQuery, "" ) :
    -					undefined;
    -			}
    -
    -			// See if we can take a shortcut and just use innerHTML
    -			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
    -				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
    -				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
    -				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
    -
    -				value = value.replace( rxhtmlTag, "<$1></$2>" );
    -
    -				try {
    -					for (; i < l; i++ ) {
    -						// Remove element nodes and prevent memory leaks
    -						elem = this[i] || {};
    -						if ( elem.nodeType === 1 ) {
    -							jQuery.cleanData( getAll( elem, false ) );
    -							elem.innerHTML = value;
    -						}
    -					}
    -
    -					elem = 0;
    -
    -				// If using innerHTML throws an exception, use the fallback method
    -				} catch(e) {}
    -			}
    -
    -			if ( elem ) {
    -				this.empty().append( value );
    -			}
    -		}, null, value, arguments.length );
    -	},
    -
    -	replaceWith: function() {
    -		var
    -			// Snapshot the DOM in case .domManip sweeps something relevant into its fragment
    -			args = jQuery.map( this, function( elem ) {
    -				return [ elem.nextSibling, elem.parentNode ];
    -			}),
    -			i = 0;
    -
    -		// Make the changes, replacing each context element with the new content
    -		this.domManip( arguments, function( elem ) {
    -			var next = args[ i++ ],
    -				parent = args[ i++ ];
    -
    -			if ( parent ) {
    -				// Don't use the snapshot next if it has moved (#13810)
    -				if ( next && next.parentNode !== parent ) {
    -					next = this.nextSibling;
    -				}
    -				jQuery( this ).remove();
    -				parent.insertBefore( elem, next );
    -			}
    -		// Allow new content to include elements from the context set
    -		}, true );
    -
    -		// Force removal if there was no new content (e.g., from empty arguments)
    -		return i ? this : this.remove();
    -	},
    -
    -	detach: function( selector ) {
    -		return this.remove( selector, true );
    -	},
    -
    -	domManip: function( args, callback, allowIntersection ) {
    -
    -		// Flatten any nested arrays
    -		args = core_concat.apply( [], args );
    -
    -		var first, node, hasScripts,
    -			scripts, doc, fragment,
    -			i = 0,
    -			l = this.length,
    -			set = this,
    -			iNoClone = l - 1,
    -			value = args[0],
    -			isFunction = jQuery.isFunction( value );
    -
    -		// We can't cloneNode fragments that contain checked, in WebKit
    -		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
    -			return this.each(function( index ) {
    -				var self = set.eq( index );
    -				if ( isFunction ) {
    -					args[0] = value.call( this, index, self.html() );
    -				}
    -				self.domManip( args, callback, allowIntersection );
    -			});
    -		}
    -
    -		if ( l ) {
    -			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );
    -			first = fragment.firstChild;
    -
    -			if ( fragment.childNodes.length === 1 ) {
    -				fragment = first;
    -			}
    -
    -			if ( first ) {
    -				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
    -				hasScripts = scripts.length;
    -
    -				// Use the original fragment for the last item instead of the first because it can end up
    -				// being emptied incorrectly in certain situations (#8070).
    -				for ( ; i < l; i++ ) {
    -					node = fragment;
    -
    -					if ( i !== iNoClone ) {
    -						node = jQuery.clone( node, true, true );
    -
    -						// Keep references to cloned scripts for later restoration
    -						if ( hasScripts ) {
    -							jQuery.merge( scripts, getAll( node, "script" ) );
    -						}
    -					}
    -
    -					callback.call( this[i], node, i );
    -				}
    -
    -				if ( hasScripts ) {
    -					doc = scripts[ scripts.length - 1 ].ownerDocument;
    -
    -					// Reenable scripts
    -					jQuery.map( scripts, restoreScript );
    -
    -					// Evaluate executable scripts on first document insertion
    -					for ( i = 0; i < hasScripts; i++ ) {
    -						node = scripts[ i ];
    -						if ( rscriptType.test( node.type || "" ) &&
    -							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
    -
    -							if ( node.src ) {
    -								// Hope ajax is available...
    -								jQuery._evalUrl( node.src );
    -							} else {
    -								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
    -							}
    -						}
    -					}
    -				}
    -
    -				// Fix #11809: Avoid leaking memory
    -				fragment = first = null;
    -			}
    -		}
    -
    -		return this;
    -	}
    -});
    -
    -// Support: IE<8
    -// Manipulating tables requires a tbody
    -function manipulationTarget( elem, content ) {
    -	return jQuery.nodeName( elem, "table" ) &&
    -		jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?
    -
    -		elem.getElementsByTagName("tbody")[0] ||
    -			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
    -		elem;
    -}
    -
    -// Replace/restore the type attribute of script elements for safe DOM manipulation
    -function disableScript( elem ) {
    -	elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
    -	return elem;
    -}
    -function restoreScript( elem ) {
    -	var match = rscriptTypeMasked.exec( elem.type );
    -	if ( match ) {
    -		elem.type = match[1];
    -	} else {
    -		elem.removeAttribute("type");
    -	}
    -	return elem;
    -}
    -
    -// Mark scripts as having already been evaluated
    -function setGlobalEval( elems, refElements ) {
    -	var elem,
    -		i = 0;
    -	for ( ; (elem = elems[i]) != null; i++ ) {
    -		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
    -	}
    -}
    -
    -function cloneCopyEvent( src, dest ) {
    -
    -	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
    -		return;
    -	}
    -
    -	var type, i, l,
    -		oldData = jQuery._data( src ),
    -		curData = jQuery._data( dest, oldData ),
    -		events = oldData.events;
    -
    -	if ( events ) {
    -		delete curData.handle;
    -		curData.events = {};
    -
    -		for ( type in events ) {
    -			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
    -				jQuery.event.add( dest, type, events[ type ][ i ] );
    -			}
    -		}
    -	}
    -
    -	// make the cloned public data object a copy from the original
    -	if ( curData.data ) {
    -		curData.data = jQuery.extend( {}, curData.data );
    -	}
    -}
    -
    -function fixCloneNodeIssues( src, dest ) {
    -	var nodeName, e, data;
    -
    -	// We do not need to do anything for non-Elements
    -	if ( dest.nodeType !== 1 ) {
    -		return;
    -	}
    -
    -	nodeName = dest.nodeName.toLowerCase();
    -
    -	// IE6-8 copies events bound via attachEvent when using cloneNode.
    -	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
    -		data = jQuery._data( dest );
    -
    -		for ( e in data.events ) {
    -			jQuery.removeEvent( dest, e, data.handle );
    -		}
    -
    -		// Event data gets referenced instead of copied if the expando gets copied too
    -		dest.removeAttribute( jQuery.expando );
    -	}
    -
    -	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
    -	if ( nodeName === "script" && dest.text !== src.text ) {
    -		disableScript( dest ).text = src.text;
    -		restoreScript( dest );
    -
    -	// IE6-10 improperly clones children of object elements using classid.
    -	// IE10 throws NoModificationAllowedError if parent is null, #12132.
    -	} else if ( nodeName === "object" ) {
    -		if ( dest.parentNode ) {
    -			dest.outerHTML = src.outerHTML;
    -		}
    -
    -		// This path appears unavoidable for IE9. When cloning an object
    -		// element in IE9, the outerHTML strategy above is not sufficient.
    -		// If the src has innerHTML and the destination does not,
    -		// copy the src.innerHTML into the dest.innerHTML. #10324
    -		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
    -			dest.innerHTML = src.innerHTML;
    -		}
    -
    -	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
    -		// IE6-8 fails to persist the checked state of a cloned checkbox
    -		// or radio button. Worse, IE6-7 fail to give the cloned element
    -		// a checked appearance if the defaultChecked value isn't also set
    -
    -		dest.defaultChecked = dest.checked = src.checked;
    -
    -		// IE6-7 get confused and end up setting the value of a cloned
    -		// checkbox/radio button to an empty string instead of "on"
    -		if ( dest.value !== src.value ) {
    -			dest.value = src.value;
    -		}
    -
    -	// IE6-8 fails to return the selected option to the default selected
    -	// state when cloning options
    -	} else if ( nodeName === "option" ) {
    -		dest.defaultSelected = dest.selected = src.defaultSelected;
    -
    -	// IE6-8 fails to set the defaultValue to the correct value when
    -	// cloning other types of input fields
    -	} else if ( nodeName === "input" || nodeName === "textarea" ) {
    -		dest.defaultValue = src.defaultValue;
    -	}
    -}
    -
    -jQuery.each({
    -	appendTo: "append",
    -	prependTo: "prepend",
    -	insertBefore: "before",
    -	insertAfter: "after",
    -	replaceAll: "replaceWith"
    -}, function( name, original ) {
    -	jQuery.fn[ name ] = function( selector ) {
    -		var elems,
    -			i = 0,
    -			ret = [],
    -			insert = jQuery( selector ),
    -			last = insert.length - 1;
    -
    -		for ( ; i <= last; i++ ) {
    -			elems = i === last ? this : this.clone(true);
    -			jQuery( insert[i] )[ original ]( elems );
    -
    -			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
    -			core_push.apply( ret, elems.get() );
    -		}
    -
    -		return this.pushStack( ret );
    -	};
    -});
    -
    -function getAll( context, tag ) {
    -	var elems, elem,
    -		i = 0,
    -		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
    -			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
    -			undefined;
    -
    -	if ( !found ) {
    -		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
    -			if ( !tag || jQuery.nodeName( elem, tag ) ) {
    -				found.push( elem );
    -			} else {
    -				jQuery.merge( found, getAll( elem, tag ) );
    -			}
    -		}
    -	}
    -
    -	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
    -		jQuery.merge( [ context ], found ) :
    -		found;
    -}
    -
    -// Used in buildFragment, fixes the defaultChecked property
    -function fixDefaultChecked( elem ) {
    -	if ( manipulation_rcheckableType.test( elem.type ) ) {
    -		elem.defaultChecked = elem.checked;
    -	}
    -}
    -
    -jQuery.extend({
    -	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
    -		var destElements, node, clone, i, srcElements,
    -			inPage = jQuery.contains( elem.ownerDocument, elem );
    -
    -		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
    -			clone = elem.cloneNode( true );
    -
    -		// IE<=8 does not properly clone detached, unknown element nodes
    -		} else {
    -			fragmentDiv.innerHTML = elem.outerHTML;
    -			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
    -		}
    -
    -		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
    -				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
    -
    -			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
    -			destElements = getAll( clone );
    -			srcElements = getAll( elem );
    -
    -			// Fix all IE cloning issues
    -			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
    -				// Ensure that the destination node is not null; Fixes #9587
    -				if ( destElements[i] ) {
    -					fixCloneNodeIssues( node, destElements[i] );
    -				}
    -			}
    -		}
    -
    -		// Copy the events from the original to the clone
    -		if ( dataAndEvents ) {
    -			if ( deepDataAndEvents ) {
    -				srcElements = srcElements || getAll( elem );
    -				destElements = destElements || getAll( clone );
    -
    -				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
    -					cloneCopyEvent( node, destElements[i] );
    -				}
    -			} else {
    -				cloneCopyEvent( elem, clone );
    -			}
    -		}
    -
    -		// Preserve script evaluation history
    -		destElements = getAll( clone, "script" );
    -		if ( destElements.length > 0 ) {
    -			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
    -		}
    -
    -		destElements = srcElements = node = null;
    -
    -		// Return the cloned set
    -		return clone;
    -	},
    -
    -	buildFragment: function( elems, context, scripts, selection ) {
    -		var j, elem, contains,
    -			tmp, tag, tbody, wrap,
    -			l = elems.length,
    -
    -			// Ensure a safe fragment
    -			safe = createSafeFragment( context ),
    -
    -			nodes = [],
    -			i = 0;
    -
    -		for ( ; i < l; i++ ) {
    -			elem = elems[ i ];
    -
    -			if ( elem || elem === 0 ) {
    -
    -				// Add nodes directly
    -				if ( jQuery.type( elem ) === "object" ) {
    -					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
    -
    -				// Convert non-html into a text node
    -				} else if ( !rhtml.test( elem ) ) {
    -					nodes.push( context.createTextNode( elem ) );
    -
    -				// Convert html into DOM nodes
    -				} else {
    -					tmp = tmp || safe.appendChild( context.createElement("div") );
    -
    -					// Deserialize a standard representation
    -					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
    -					wrap = wrapMap[ tag ] || wrapMap._default;
    -
    -					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
    -
    -					// Descend through wrappers to the right content
    -					j = wrap[0];
    -					while ( j-- ) {
    -						tmp = tmp.lastChild;
    -					}
    -
    -					// Manually add leading whitespace removed by IE
    -					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
    -						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
    -					}
    -
    -					// Remove IE's autoinserted <tbody> from table fragments
    -					if ( !jQuery.support.tbody ) {
    -
    -						// String was a <table>, *may* have spurious <tbody>
    -						elem = tag === "table" && !rtbody.test( elem ) ?
    -							tmp.firstChild :
    -
    -							// String was a bare <thead> or <tfoot>
    -							wrap[1] === "<table>" && !rtbody.test( elem ) ?
    -								tmp :
    -								0;
    -
    -						j = elem && elem.childNodes.length;
    -						while ( j-- ) {
    -							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
    -								elem.removeChild( tbody );
    -							}
    -						}
    -					}
    -
    -					jQuery.merge( nodes, tmp.childNodes );
    -
    -					// Fix #12392 for WebKit and IE > 9
    -					tmp.textContent = "";
    -
    -					// Fix #12392 for oldIE
    -					while ( tmp.firstChild ) {
    -						tmp.removeChild( tmp.firstChild );
    -					}
    -
    -					// Remember the top-level container for proper cleanup
    -					tmp = safe.lastChild;
    -				}
    -			}
    -		}
    -
    -		// Fix #11356: Clear elements from fragment
    -		if ( tmp ) {
    -			safe.removeChild( tmp );
    -		}
    -
    -		// Reset defaultChecked for any radios and checkboxes
    -		// about to be appended to the DOM in IE 6/7 (#8060)
    -		if ( !jQuery.support.appendChecked ) {
    -			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
    -		}
    -
    -		i = 0;
    -		while ( (elem = nodes[ i++ ]) ) {
    -
    -			// #4087 - If origin and destination elements are the same, and this is
    -			// that element, do not do anything
    -			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
    -				continue;
    -			}
    -
    -			contains = jQuery.contains( elem.ownerDocument, elem );
    -
    -			// Append to fragment
    -			tmp = getAll( safe.appendChild( elem ), "script" );
    -
    -			// Preserve script evaluation history
    -			if ( contains ) {
    -				setGlobalEval( tmp );
    -			}
    -
    -			// Capture executables
    -			if ( scripts ) {
    -				j = 0;
    -				while ( (elem = tmp[ j++ ]) ) {
    -					if ( rscriptType.test( elem.type || "" ) ) {
    -						scripts.push( elem );
    -					}
    -				}
    -			}
    -		}
    -
    -		tmp = null;
    -
    -		return safe;
    -	},
    -
    -	cleanData: function( elems, /* internal */ acceptData ) {
    -		var elem, type, id, data,
    -			i = 0,
    -			internalKey = jQuery.expando,
    -			cache = jQuery.cache,
    -			deleteExpando = jQuery.support.deleteExpando,
    -			special = jQuery.event.special;
    -
    -		for ( ; (elem = elems[i]) != null; i++ ) {
    -
    -			if ( acceptData || jQuery.acceptData( elem ) ) {
    -
    -				id = elem[ internalKey ];
    -				data = id && cache[ id ];
    -
    -				if ( data ) {
    -					if ( data.events ) {
    -						for ( type in data.events ) {
    -							if ( special[ type ] ) {
    -								jQuery.event.remove( elem, type );
    -
    -							// This is a shortcut to avoid jQuery.event.remove's overhead
    -							} else {
    -								jQuery.removeEvent( elem, type, data.handle );
    -							}
    -						}
    -					}
    -
    -					// Remove cache only if it was not already removed by jQuery.event.remove
    -					if ( cache[ id ] ) {
    -
    -						delete cache[ id ];
    -
    -						// IE does not allow us to delete expando properties from nodes,
    -						// nor does it have a removeAttribute function on Document nodes;
    -						// we must handle all of these cases
    -						if ( deleteExpando ) {
    -							delete elem[ internalKey ];
    -
    -						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
    -							elem.removeAttribute( internalKey );
    -
    -						} else {
    -							elem[ internalKey ] = null;
    -						}
    -
    -						core_deletedIds.push( id );
    -					}
    -				}
    -			}
    -		}
    -	},
    -
    -	_evalUrl: function( url ) {
    -		return jQuery.ajax({
    -			url: url,
    -			type: "GET",
    -			dataType: "script",
    -			async: false,
    -			global: false,
    -			"throws": true
    -		});
    -	}
    -});
    -jQuery.fn.extend({
    -	wrapAll: function( html ) {
    -		if ( jQuery.isFunction( html ) ) {
    -			return this.each(function(i) {
    -				jQuery(this).wrapAll( html.call(this, i) );
    -			});
    -		}
    -
    -		if ( this[0] ) {
    -			// The elements to wrap the target around
    -			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
    -
    -			if ( this[0].parentNode ) {
    -				wrap.insertBefore( this[0] );
    -			}
    -
    -			wrap.map(function() {
    -				var elem = this;
    -
    -				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
    -					elem = elem.firstChild;
    -				}
    -
    -				return elem;
    -			}).append( this );
    -		}
    -
    -		return this;
    -	},
    -
    -	wrapInner: function( html ) {
    -		if ( jQuery.isFunction( html ) ) {
    -			return this.each(function(i) {
    -				jQuery(this).wrapInner( html.call(this, i) );
    -			});
    -		}
    -
    -		return this.each(function() {
    -			var self = jQuery( this ),
    -				contents = self.contents();
    -
    -			if ( contents.length ) {
    -				contents.wrapAll( html );
    -
    -			} else {
    -				self.append( html );
    -			}
    -		});
    -	},
    -
    -	wrap: function( html ) {
    -		var isFunction = jQuery.isFunction( html );
    -
    -		return this.each(function(i) {
    -			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
    -		});
    -	},
    -
    -	unwrap: function() {
    -		return this.parent().each(function() {
    -			if ( !jQuery.nodeName( this, "body" ) ) {
    -				jQuery( this ).replaceWith( this.childNodes );
    -			}
    -		}).end();
    -	}
    -});
    -var iframe, getStyles, curCSS,
    -	ralpha = /alpha\([^)]*\)/i,
    -	ropacity = /opacity\s*=\s*([^)]*)/,
    -	rposition = /^(top|right|bottom|left)$/,
    -	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
    -	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
    -	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
    -	rmargin = /^margin/,
    -	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
    -	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
    -	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
    -	elemdisplay = { BODY: "block" },
    -
    -	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
    -	cssNormalTransform = {
    -		letterSpacing: 0,
    -		fontWeight: 400
    -	},
    -
    -	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
    -	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
    -
    -// return a css property mapped to a potentially vendor prefixed property
    -function vendorPropName( style, name ) {
    -
    -	// shortcut for names that are not vendor prefixed
    -	if ( name in style ) {
    -		return name;
    -	}
    -
    -	// check for vendor prefixed names
    -	var capName = name.charAt(0).toUpperCase() + name.slice(1),
    -		origName = name,
    -		i = cssPrefixes.length;
    -
    -	while ( i-- ) {
    -		name = cssPrefixes[ i ] + capName;
    -		if ( name in style ) {
    -			return name;
    -		}
    -	}
    -
    -	return origName;
    -}
    -
    -function isHidden( elem, el ) {
    -	// isHidden might be called from jQuery#filter function;
    -	// in that case, element will be second argument
    -	elem = el || elem;
    -	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
    -}
    -
    -function showHide( elements, show ) {
    -	var display, elem, hidden,
    -		values = [],
    -		index = 0,
    -		length = elements.length;
    -
    -	for ( ; index < length; index++ ) {
    -		elem = elements[ index ];
    -		if ( !elem.style ) {
    -			continue;
    -		}
    -
    -		values[ index ] = jQuery._data( elem, "olddisplay" );
    -		display = elem.style.display;
    -		if ( show ) {
    -			// Reset the inline display of this element to learn if it is
    -			// being hidden by cascaded rules or not
    -			if ( !values[ index ] && display === "none" ) {
    -				elem.style.display = "";
    -			}
    -
    -			// Set elements which have been overridden with display: none
    -			// in a stylesheet to whatever the default browser style is
    -			// for such an element
    -			if ( elem.style.display === "" && isHidden( elem ) ) {
    -				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
    -			}
    -		} else {
    -
    -			if ( !values[ index ] ) {
    -				hidden = isHidden( elem );
    -
    -				if ( display && display !== "none" || !hidden ) {
    -					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
    -				}
    -			}
    -		}
    -	}
    -
    -	// Set the display of most of the elements in a second loop
    -	// to avoid the constant reflow
    -	for ( index = 0; index < length; index++ ) {
    -		elem = elements[ index ];
    -		if ( !elem.style ) {
    -			continue;
    -		}
    -		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
    -			elem.style.display = show ? values[ index ] || "" : "none";
    -		}
    -	}
    -
    -	return elements;
    -}
    -
    -jQuery.fn.extend({
    -	css: function( name, value ) {
    -		return jQuery.access( this, function( elem, name, value ) {
    -			var len, styles,
    -				map = {},
    -				i = 0;
    -
    -			if ( jQuery.isArray( name ) ) {
    -				styles = getStyles( elem );
    -				len = name.length;
    -
    -				for ( ; i < len; i++ ) {
    -					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
    -				}
    -
    -				return map;
    -			}
    -
    -			return value !== undefined ?
    -				jQuery.style( elem, name, value ) :
    -				jQuery.css( elem, name );
    -		}, name, value, arguments.length > 1 );
    -	},
    -	show: function() {
    -		return showHide( this, true );
    -	},
    -	hide: function() {
    -		return showHide( this );
    -	},
    -	toggle: function( state ) {
    -		if ( typeof state === "boolean" ) {
    -			return state ? this.show() : this.hide();
    -		}
    -
    -		return this.each(function() {
    -			if ( isHidden( this ) ) {
    -				jQuery( this ).show();
    -			} else {
    -				jQuery( this ).hide();
    -			}
    -		});
    -	}
    -});
    -
    -jQuery.extend({
    -	// Add in style property hooks for overriding the default
    -	// behavior of getting and setting a style property
    -	cssHooks: {
    -		opacity: {
    -			get: function( elem, computed ) {
    -				if ( computed ) {
    -					// We should always get a number back from opacity
    -					var ret = curCSS( elem, "opacity" );
    -					return ret === "" ? "1" : ret;
    -				}
    -			}
    -		}
    -	},
    -
    -	// Don't automatically add "px" to these possibly-unitless properties
    -	cssNumber: {
    -		"columnCount": true,
    -		"fillOpacity": true,
    -		"fontWeight": true,
    -		"lineHeight": true,
    -		"opacity": true,
    -		"order": true,
    -		"orphans": true,
    -		"widows": true,
    -		"zIndex": true,
    -		"zoom": true
    -	},
    -
    -	// Add in properties whose names you wish to fix before
    -	// setting or getting the value
    -	cssProps: {
    -		// normalize float css property
    -		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
    -	},
    -
    -	// Get and set the style property on a DOM Node
    -	style: function( elem, name, value, extra ) {
    -		// Don't set styles on text and comment nodes
    -		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
    -			return;
    -		}
    -
    -		// Make sure that we're working with the right name
    -		var ret, type, hooks,
    -			origName = jQuery.camelCase( name ),
    -			style = elem.style;
    -
    -		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
    -
    -		// gets hook for the prefixed version
    -		// followed by the unprefixed version
    -		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
    -
    -		// Check if we're setting a value
    -		if ( value !== undefined ) {
    -			type = typeof value;
    -
    -			// convert relative number strings (+= or -=) to relative numbers. #7345
    -			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
    -				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
    -				// Fixes bug #9237
    -				type = "number";
    -			}
    -
    -			// Make sure that NaN and null values aren't set. See: #7116
    -			if ( value == null || type === "number" && isNaN( value ) ) {
    -				return;
    -			}
    -
    -			// If a number was passed in, add 'px' to the (except for certain CSS properties)
    -			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
    -				value += "px";
    -			}
    -
    -			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
    -			// but it would mean to define eight (for every problematic property) identical functions
    -			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
    -				style[ name ] = "inherit";
    -			}
    -
    -			// If a hook was provided, use that value, otherwise just set the specified value
    -			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
    -
    -				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
    -				// Fixes bug #5509
    -				try {
    -					style[ name ] = value;
    -				} catch(e) {}
    -			}
    -
    -		} else {
    -			// If a hook was provided get the non-computed value from there
    -			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
    -				return ret;
    -			}
    -
    -			// Otherwise just get the value from the style object
    -			return style[ name ];
    -		}
    -	},
    -
    -	css: function( elem, name, extra, styles ) {
    -		var num, val, hooks,
    -			origName = jQuery.camelCase( name );
    -
    -		// Make sure that we're working with the right name
    -		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
    -
    -		// gets hook for the prefixed version
    -		// followed by the unprefixed version
    -		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
    -
    -		// If a hook was provided get the computed value from there
    -		if ( hooks && "get" in hooks ) {
    -			val = hooks.get( elem, true, extra );
    -		}
    -
    -		// Otherwise, if a way to get the computed value exists, use that
    -		if ( val === undefined ) {
    -			val = curCSS( elem, name, styles );
    -		}
    -
    -		//convert "normal" to computed value
    -		if ( val === "normal" && name in cssNormalTransform ) {
    -			val = cssNormalTransform[ name ];
    -		}
    -
    -		// Return, converting to number if forced or a qualifier was provided and val looks numeric
    -		if ( extra === "" || extra ) {
    -			num = parseFloat( val );
    -			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
    -		}
    -		return val;
    -	}
    -});
    -
    -// NOTE: we've included the "window" in window.getComputedStyle
    -// because jsdom on node.js will break without it.
    -if ( window.getComputedStyle ) {
    -	getStyles = function( elem ) {
    -		return window.getComputedStyle( elem, null );
    -	};
    -
    -	curCSS = function( elem, name, _computed ) {
    -		var width, minWidth, maxWidth,
    -			computed = _computed || getStyles( elem ),
    -
    -			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
    -			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
    -			style = elem.style;
    -
    -		if ( computed ) {
    -
    -			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
    -				ret = jQuery.style( elem, name );
    -			}
    -
    -			// A tribute to the "awesome hack by Dean Edwards"
    -			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
    -			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
    -			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
    -			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
    -
    -				// Remember the original values
    -				width = style.width;
    -				minWidth = style.minWidth;
    -				maxWidth = style.maxWidth;
    -
    -				// Put in the new values to get a computed value out
    -				style.minWidth = style.maxWidth = style.width = ret;
    -				ret = computed.width;
    -
    -				// Revert the changed values
    -				style.width = width;
    -				style.minWidth = minWidth;
    -				style.maxWidth = maxWidth;
    -			}
    -		}
    -
    -		return ret;
    -	};
    -} else if ( document.documentElement.currentStyle ) {
    -	getStyles = function( elem ) {
    -		return elem.currentStyle;
    -	};
    -
    -	curCSS = function( elem, name, _computed ) {
    -		var left, rs, rsLeft,
    -			computed = _computed || getStyles( elem ),
    -			ret = computed ? computed[ name ] : undefined,
    -			style = elem.style;
    -
    -		// Avoid setting ret to empty string here
    -		// so we don't default to auto
    -		if ( ret == null && style && style[ name ] ) {
    -			ret = style[ name ];
    -		}
    -
    -		// From the awesome hack by Dean Edwards
    -		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
    -
    -		// If we're not dealing with a regular pixel number
    -		// but a number that has a weird ending, we need to convert it to pixels
    -		// but not position css attributes, as those are proportional to the parent element instead
    -		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
    -		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
    -
    -			// Remember the original values
    -			left = style.left;
    -			rs = elem.runtimeStyle;
    -			rsLeft = rs && rs.left;
    -
    -			// Put in the new values to get a computed value out
    -			if ( rsLeft ) {
    -				rs.left = elem.currentStyle.left;
    -			}
    -			style.left = name === "fontSize" ? "1em" : ret;
    -			ret = style.pixelLeft + "px";
    -
    -			// Revert the changed values
    -			style.left = left;
    -			if ( rsLeft ) {
    -				rs.left = rsLeft;
    -			}
    -		}
    -
    -		return ret === "" ? "auto" : ret;
    -	};
    -}
    -
    -function setPositiveNumber( elem, value, subtract ) {
    -	var matches = rnumsplit.exec( value );
    -	return matches ?
    -		// Guard against undefined "subtract", e.g., when used as in cssHooks
    -		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
    -		value;
    -}
    -
    -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
    -	var i = extra === ( isBorderBox ? "border" : "content" ) ?
    -		// If we already have the right measurement, avoid augmentation
    -		4 :
    -		// Otherwise initialize for horizontal or vertical properties
    -		name === "width" ? 1 : 0,
    -
    -		val = 0;
    -
    -	for ( ; i < 4; i += 2 ) {
    -		// both box models exclude margin, so add it if we want it
    -		if ( extra === "margin" ) {
    -			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
    -		}
    -
    -		if ( isBorderBox ) {
    -			// border-box includes padding, so remove it if we want content
    -			if ( extra === "content" ) {
    -				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
    -			}
    -
    -			// at this point, extra isn't border nor margin, so remove border
    -			if ( extra !== "margin" ) {
    -				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
    -			}
    -		} else {
    -			// at this point, extra isn't content, so add padding
    -			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
    -
    -			// at this point, extra isn't content nor padding, so add border
    -			if ( extra !== "padding" ) {
    -				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
    -			}
    -		}
    -	}
    -
    -	return val;
    -}
    -
    -function getWidthOrHeight( elem, name, extra ) {
    -
    -	// Start with offset property, which is equivalent to the border-box value
    -	var valueIsBorderBox = true,
    -		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
    -		styles = getStyles( elem ),
    -		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
    -
    -	// some non-html elements return undefined for offsetWidth, so check for null/undefined
    -	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
    -	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
    -	if ( val <= 0 || val == null ) {
    -		// Fall back to computed then uncomputed css if necessary
    -		val = curCSS( elem, name, styles );
    -		if ( val < 0 || val == null ) {
    -			val = elem.style[ name ];
    -		}
    -
    -		// Computed unit is not pixels. Stop here and return.
    -		if ( rnumnonpx.test(val) ) {
    -			return val;
    -		}
    -
    -		// we need the check for style in case a browser which returns unreliable values
    -		// for getComputedStyle silently falls back to the reliable elem.style
    -		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
    -
    -		// Normalize "", auto, and prepare for extra
    -		val = parseFloat( val ) || 0;
    -	}
    -
    -	// use the active box-sizing model to add/subtract irrelevant styles
    -	return ( val +
    -		augmentWidthOrHeight(
    -			elem,
    -			name,
    -			extra || ( isBorderBox ? "border" : "content" ),
    -			valueIsBorderBox,
    -			styles
    -		)
    -	) + "px";
    -}
    -
    -// Try to determine the default display value of an element
    -function css_defaultDisplay( nodeName ) {
    -	var doc = document,
    -		display = elemdisplay[ nodeName ];
    -
    -	if ( !display ) {
    -		display = actualDisplay( nodeName, doc );
    -
    -		// If the simple way fails, read from inside an iframe
    -		if ( display === "none" || !display ) {
    -			// Use the already-created iframe if possible
    -			iframe = ( iframe ||
    -				jQuery("<iframe frameborder='0' width='0' height='0'/>")
    -				.css( "cssText", "display:block !important" )
    -			).appendTo( doc.documentElement );
    -
    -			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
    -			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
    -			doc.write("<!doctype html><html><body>");
    -			doc.close();
    -
    -			display = actualDisplay( nodeName, doc );
    -			iframe.detach();
    -		}
    -
    -		// Store the correct default display
    -		elemdisplay[ nodeName ] = display;
    -	}
    -
    -	return display;
    -}
    -
    -// Called ONLY from within css_defaultDisplay
    -function actualDisplay( name, doc ) {
    -	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
    -		display = jQuery.css( elem[0], "display" );
    -	elem.remove();
    -	return display;
    -}
    -
    -jQuery.each([ "height", "width" ], function( i, name ) {
    -	jQuery.cssHooks[ name ] = {
    -		get: function( elem, computed, extra ) {
    -			if ( computed ) {
    -				// certain elements can have dimension info if we invisibly show them
    -				// however, it must have a current display style that would benefit from this
    -				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
    -					jQuery.swap( elem, cssShow, function() {
    -						return getWidthOrHeight( elem, name, extra );
    -					}) :
    -					getWidthOrHeight( elem, name, extra );
    -			}
    -		},
    -
    -		set: function( elem, value, extra ) {
    -			var styles = extra && getStyles( elem );
    -			return setPositiveNumber( elem, value, extra ?
    -				augmentWidthOrHeight(
    -					elem,
    -					name,
    -					extra,
    -					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
    -					styles
    -				) : 0
    -			);
    -		}
    -	};
    -});
    -
    -if ( !jQuery.support.opacity ) {
    -	jQuery.cssHooks.opacity = {
    -		get: function( elem, computed ) {
    -			// IE uses filters for opacity
    -			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
    -				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
    -				computed ? "1" : "";
    -		},
    -
    -		set: function( elem, value ) {
    -			var style = elem.style,
    -				currentStyle = elem.currentStyle,
    -				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
    -				filter = currentStyle && currentStyle.filter || style.filter || "";
    -
    -			// IE has trouble with opacity if it does not have layout
    -			// Force it by setting the zoom level
    -			style.zoom = 1;
    -
    -			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
    -			// if value === "", then remove inline opacity #12685
    -			if ( ( value >= 1 || value === "" ) &&
    -					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
    -					style.removeAttribute ) {
    -
    -				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
    -				// if "filter:" is present at all, clearType is disabled, we want to avoid this
    -				// style.removeAttribute is IE Only, but so apparently is this code path...
    -				style.removeAttribute( "filter" );
    -
    -				// if there is no filter style applied in a css rule or unset inline opacity, we are done
    -				if ( value === "" || currentStyle && !currentStyle.filter ) {
    -					return;
    -				}
    -			}
    -
    -			// otherwise, set new filter values
    -			style.filter = ralpha.test( filter ) ?
    -				filter.replace( ralpha, opacity ) :
    -				filter + " " + opacity;
    -		}
    -	};
    -}
    -
    -// These hooks cannot be added until DOM ready because the support test
    -// for it is not run until after DOM ready
    -jQuery(function() {
    -	if ( !jQuery.support.reliableMarginRight ) {
    -		jQuery.cssHooks.marginRight = {
    -			get: function( elem, computed ) {
    -				if ( computed ) {
    -					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
    -					// Work around by temporarily setting element display to inline-block
    -					return jQuery.swap( elem, { "display": "inline-block" },
    -						curCSS, [ elem, "marginRight" ] );
    -				}
    -			}
    -		};
    -	}
    -
    -	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
    -	// getComputedStyle returns percent when specified for top/left/bottom/right
    -	// rather than make the css module depend on the offset module, we just check for it here
    -	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
    -		jQuery.each( [ "top", "left" ], function( i, prop ) {
    -			jQuery.cssHooks[ prop ] = {
    -				get: function( elem, computed ) {
    -					if ( computed ) {
    -						computed = curCSS( elem, prop );
    -						// if curCSS returns percentage, fallback to offset
    -						return rnumnonpx.test( computed ) ?
    -							jQuery( elem ).position()[ prop ] + "px" :
    -							computed;
    -					}
    -				}
    -			};
    -		});
    -	}
    -
    -});
    -
    -if ( jQuery.expr && jQuery.expr.filters ) {
    -	jQuery.expr.filters.hidden = function( elem ) {
    -		// Support: Opera <= 12.12
    -		// Opera reports offsetWidths and offsetHeights less than zero on some elements
    -		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
    -			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
    -	};
    -
    -	jQuery.expr.filters.visible = function( elem ) {
    -		return !jQuery.expr.filters.hidden( elem );
    -	};
    -}
    -
    -// These hooks are used by animate to expand properties
    -jQuery.each({
    -	margin: "",
    -	padding: "",
    -	border: "Width"
    -}, function( prefix, suffix ) {
    -	jQuery.cssHooks[ prefix + suffix ] = {
    -		expand: function( value ) {
    -			var i = 0,
    -				expanded = {},
    -
    -				// assumes a single number if not a string
    -				parts = typeof value === "string" ? value.split(" ") : [ value ];
    -
    -			for ( ; i < 4; i++ ) {
    -				expanded[ prefix + cssExpand[ i ] + suffix ] =
    -					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
    -			}
    -
    -			return expanded;
    -		}
    -	};
    -
    -	if ( !rmargin.test( prefix ) ) {
    -		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
    -	}
    -});
    -var r20 = /%20/g,
    -	rbracket = /\[\]$/,
    -	rCRLF = /\r?\n/g,
    -	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
    -	rsubmittable = /^(?:input|select|textarea|keygen)/i;
    -
    -jQuery.fn.extend({
    -	serialize: function() {
    -		return jQuery.param( this.serializeArray() );
    -	},
    -	serializeArray: function() {
    -		return this.map(function(){
    -			// Can add propHook for "elements" to filter or add form elements
    -			var elements = jQuery.prop( this, "elements" );
    -			return elements ? jQuery.makeArray( elements ) : this;
    -		})
    -		.filter(function(){
    -			var type = this.type;
    -			// Use .is(":disabled") so that fieldset[disabled] works
    -			return this.name && !jQuery( this ).is( ":disabled" ) &&
    -				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
    -				( this.checked || !manipulation_rcheckableType.test( type ) );
    -		})
    -		.map(function( i, elem ){
    -			var val = jQuery( this ).val();
    -
    -			return val == null ?
    -				null :
    -				jQuery.isArray( val ) ?
    -					jQuery.map( val, function( val ){
    -						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
    -					}) :
    -					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
    -		}).get();
    -	}
    -});
    -
    -//Serialize an array of form elements or a set of
    -//key/values into a query string
    -jQuery.param = function( a, traditional ) {
    -	var prefix,
    -		s = [],
    -		add = function( key, value ) {
    -			// If value is a function, invoke it and return its value
    -			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
    -			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
    -		};
    -
    -	// Set traditional to true for jQuery <= 1.3.2 behavior.
    -	if ( traditional === undefined ) {
    -		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
    -	}
    -
    -	// If an array was passed in, assume that it is an array of form elements.
    -	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
    -		// Serialize the form elements
    -		jQuery.each( a, function() {
    -			add( this.name, this.value );
    -		});
    -
    -	} else {
    -		// If traditional, encode the "old" way (the way 1.3.2 or older
    -		// did it), otherwise encode params recursively.
    -		for ( prefix in a ) {
    -			buildParams( prefix, a[ prefix ], traditional, add );
    -		}
    -	}
    -
    -	// Return the resulting serialization
    -	return s.join( "&" ).replace( r20, "+" );
    -};
    -
    -function buildParams( prefix, obj, traditional, add ) {
    -	var name;
    -
    -	if ( jQuery.isArray( obj ) ) {
    -		// Serialize array item.
    -		jQuery.each( obj, function( i, v ) {
    -			if ( traditional || rbracket.test( prefix ) ) {
    -				// Treat each array item as a scalar.
    -				add( prefix, v );
    -
    -			} else {
    -				// Item is non-scalar (array or object), encode its numeric index.
    -				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
    -			}
    -		});
    -
    -	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
    -		// Serialize object item.
    -		for ( name in obj ) {
    -			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
    -		}
    -
    -	} else {
    -		// Serialize scalar item.
    -		add( prefix, obj );
    -	}
    -}
    -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
    -	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
    -	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
    -
    -	// Handle event binding
    -	jQuery.fn[ name ] = function( data, fn ) {
    -		return arguments.length > 0 ?
    -			this.on( name, null, data, fn ) :
    -			this.trigger( name );
    -	};
    -});
    -
    -jQuery.fn.extend({
    -	hover: function( fnOver, fnOut ) {
    -		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
    -	},
    -
    -	bind: function( types, data, fn ) {
    -		return this.on( types, null, data, fn );
    -	},
    -	unbind: function( types, fn ) {
    -		return this.off( types, null, fn );
    -	},
    -
    -	delegate: function( selector, types, data, fn ) {
    -		return this.on( types, selector, data, fn );
    -	},
    -	undelegate: function( selector, types, fn ) {
    -		// ( namespace ) or ( selector, types [, fn] )
    -		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
    -	}
    -});
    -var
    -	// Document location
    -	ajaxLocParts,
    -	ajaxLocation,
    -	ajax_nonce = jQuery.now(),
    -
    -	ajax_rquery = /\?/,
    -	rhash = /#.*$/,
    -	rts = /([?&])_=[^&]*/,
    -	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
    -	// #7653, #8125, #8152: local protocol detection
    -	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
    -	rnoContent = /^(?:GET|HEAD)$/,
    -	rprotocol = /^\/\//,
    -	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
    -
    -	// Keep a copy of the old load method
    -	_load = jQuery.fn.load,
    -
    -	/* Prefilters
    -	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
    -	 * 2) These are called:
    -	 *    - BEFORE asking for a transport
    -	 *    - AFTER param serialization (s.data is a string if s.processData is true)
    -	 * 3) key is the dataType
    -	 * 4) the catchall symbol "*" can be used
    -	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
    -	 */
    -	prefilters = {},
    -
    -	/* Transports bindings
    -	 * 1) key is the dataType
    -	 * 2) the catchall symbol "*" can be used
    -	 * 3) selection will start with transport dataType and THEN go to "*" if needed
    -	 */
    -	transports = {},
    -
    -	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
    -	allTypes = "*/".concat("*");
    -
    -// #8138, IE may throw an exception when accessing
    -// a field from window.location if document.domain has been set
    -try {
    -	ajaxLocation = location.href;
    -} catch( e ) {
    -	// Use the href attribute of an A element
    -	// since IE will modify it given document.location
    -	ajaxLocation = document.createElement( "a" );
    -	ajaxLocation.href = "";
    -	ajaxLocation = ajaxLocation.href;
    -}
    -
    -// Segment location into parts
    -ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
    -
    -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
    -function addToPrefiltersOrTransports( structure ) {
    -
    -	// dataTypeExpression is optional and defaults to "*"
    -	return function( dataTypeExpression, func ) {
    -
    -		if ( typeof dataTypeExpression !== "string" ) {
    -			func = dataTypeExpression;
    -			dataTypeExpression = "*";
    -		}
    -
    -		var dataType,
    -			i = 0,
    -			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
    -
    -		if ( jQuery.isFunction( func ) ) {
    -			// For each dataType in the dataTypeExpression
    -			while ( (dataType = dataTypes[i++]) ) {
    -				// Prepend if requested
    -				if ( dataType[0] === "+" ) {
    -					dataType = dataType.slice( 1 ) || "*";
    -					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
    -
    -				// Otherwise append
    -				} else {
    -					(structure[ dataType ] = structure[ dataType ] || []).push( func );
    -				}
    -			}
    -		}
    -	};
    -}
    -
    -// Base inspection function for prefilters and transports
    -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
    -
    -	var inspected = {},
    -		seekingTransport = ( structure === transports );
    -
    -	function inspect( dataType ) {
    -		var selected;
    -		inspected[ dataType ] = true;
    -		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
    -			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
    -			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
    -				options.dataTypes.unshift( dataTypeOrTransport );
    -				inspect( dataTypeOrTransport );
    -				return false;
    -			} else if ( seekingTransport ) {
    -				return !( selected = dataTypeOrTransport );
    -			}
    -		});
    -		return selected;
    -	}
    -
    -	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
    -}
    -
    -// A special extend for ajax options
    -// that takes "flat" options (not to be deep extended)
    -// Fixes #9887
    -function ajaxExtend( target, src ) {
    -	var deep, key,
    -		flatOptions = jQuery.ajaxSettings.flatOptions || {};
    -
    -	for ( key in src ) {
    -		if ( src[ key ] !== undefined ) {
    -			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
    -		}
    -	}
    -	if ( deep ) {
    -		jQuery.extend( true, target, deep );
    -	}
    -
    -	return target;
    -}
    -
    -jQuery.fn.load = function( url, params, callback ) {
    -	if ( typeof url !== "string" && _load ) {
    -		return _load.apply( this, arguments );
    -	}
    -
    -	var selector, response, type,
    -		self = this,
    -		off = url.indexOf(" ");
    -
    -	if ( off >= 0 ) {
    -		selector = url.slice( off, url.length );
    -		url = url.slice( 0, off );
    -	}
    -
    -	// If it's a function
    -	if ( jQuery.isFunction( params ) ) {
    -
    -		// We assume that it's the callback
    -		callback = params;
    -		params = undefined;
    -
    -	// Otherwise, build a param string
    -	} else if ( params && typeof params === "object" ) {
    -		type = "POST";
    -	}
    -
    -	// If we have elements to modify, make the request
    -	if ( self.length > 0 ) {
    -		jQuery.ajax({
    -			url: url,
    -
    -			// if "type" variable is undefined, then "GET" method will be used
    -			type: type,
    -			dataType: "html",
    -			data: params
    -		}).done(function( responseText ) {
    -
    -			// Save response for use in complete callback
    -			response = arguments;
    -
    -			self.html( selector ?
    -
    -				// If a selector was specified, locate the right elements in a dummy div
    -				// Exclude scripts to avoid IE 'Permission Denied' errors
    -				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
    -
    -				// Otherwise use the full result
    -				responseText );
    -
    -		}).complete( callback && function( jqXHR, status ) {
    -			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
    -		});
    -	}
    -
    -	return this;
    -};
    -
    -// Attach a bunch of functions for handling common AJAX events
    -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
    -	jQuery.fn[ type ] = function( fn ){
    -		return this.on( type, fn );
    -	};
    -});
    -
    -jQuery.extend({
    -
    -	// Counter for holding the number of active queries
    -	active: 0,
    -
    -	// Last-Modified header cache for next request
    -	lastModified: {},
    -	etag: {},
    -
    -	ajaxSettings: {
    -		url: ajaxLocation,
    -		type: "GET",
    -		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
    -		global: true,
    -		processData: true,
    -		async: true,
    -		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    -		/*
    -		timeout: 0,
    -		data: null,
    -		dataType: null,
    -		username: null,
    -		password: null,
    -		cache: null,
    -		throws: false,
    -		traditional: false,
    -		headers: {},
    -		*/
    -
    -		accepts: {
    -			"*": allTypes,
    -			text: "text/plain",
    -			html: "text/html",
    -			xml: "application/xml, text/xml",
    -			json: "application/json, text/javascript"
    -		},
    -
    -		contents: {
    -			xml: /xml/,
    -			html: /html/,
    -			json: /json/
    -		},
    -
    -		responseFields: {
    -			xml: "responseXML",
    -			text: "responseText",
    -			json: "responseJSON"
    -		},
    -
    -		// Data converters
    -		// Keys separate source (or catchall "*") and destination types with a single space
    -		converters: {
    -
    -			// Convert anything to text
    -			"* text": String,
    -
    -			// Text to html (true = no transformation)
    -			"text html": true,
    -
    -			// Evaluate text as a json expression
    -			"text json": jQuery.parseJSON,
    -
    -			// Parse text as xml
    -			"text xml": jQuery.parseXML
    -		},
    -
    -		// For options that shouldn't be deep extended:
    -		// you can add your own custom options here if
    -		// and when you create one that shouldn't be
    -		// deep extended (see ajaxExtend)
    -		flatOptions: {
    -			url: true,
    -			context: true
    -		}
    -	},
    -
    -	// Creates a full fledged settings object into target
    -	// with both ajaxSettings and settings fields.
    -	// If target is omitted, writes into ajaxSettings.
    -	ajaxSetup: function( target, settings ) {
    -		return settings ?
    -
    -			// Building a settings object
    -			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
    -
    -			// Extending ajaxSettings
    -			ajaxExtend( jQuery.ajaxSettings, target );
    -	},
    -
    -	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
    -	ajaxTransport: addToPrefiltersOrTransports( transports ),
    -
    -	// Main method
    -	ajax: function( url, options ) {
    -
    -		// If url is an object, simulate pre-1.5 signature
    -		if ( typeof url === "object" ) {
    -			options = url;
    -			url = undefined;
    -		}
    -
    -		// Force options to be an object
    -		options = options || {};
    -
    -		var // Cross-domain detection vars
    -			parts,
    -			// Loop variable
    -			i,
    -			// URL without anti-cache param
    -			cacheURL,
    -			// Response headers as string
    -			responseHeadersString,
    -			// timeout handle
    -			timeoutTimer,
    -
    -			// To know if global events are to be dispatched
    -			fireGlobals,
    -
    -			transport,
    -			// Response headers
    -			responseHeaders,
    -			// Create the final options object
    -			s = jQuery.ajaxSetup( {}, options ),
    -			// Callbacks context
    -			callbackContext = s.context || s,
    -			// Context for global events is callbackContext if it is a DOM node or jQuery collection
    -			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
    -				jQuery( callbackContext ) :
    -				jQuery.event,
    -			// Deferreds
    -			deferred = jQuery.Deferred(),
    -			completeDeferred = jQuery.Callbacks("once memory"),
    -			// Status-dependent callbacks
    -			statusCode = s.statusCode || {},
    -			// Headers (they are sent all at once)
    -			requestHeaders = {},
    -			requestHeadersNames = {},
    -			// The jqXHR state
    -			state = 0,
    -			// Default abort message
    -			strAbort = "canceled",
    -			// Fake xhr
    -			jqXHR = {
    -				readyState: 0,
    -
    -				// Builds headers hashtable if needed
    -				getResponseHeader: function( key ) {
    -					var match;
    -					if ( state === 2 ) {
    -						if ( !responseHeaders ) {
    -							responseHeaders = {};
    -							while ( (match = rheaders.exec( responseHeadersString )) ) {
    -								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
    -							}
    -						}
    -						match = responseHeaders[ key.toLowerCase() ];
    -					}
    -					return match == null ? null : match;
    -				},
    -
    -				// Raw string
    -				getAllResponseHeaders: function() {
    -					return state === 2 ? responseHeadersString : null;
    -				},
    -
    -				// Caches the header
    -				setRequestHeader: function( name, value ) {
    -					var lname = name.toLowerCase();
    -					if ( !state ) {
    -						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
    -						requestHeaders[ name ] = value;
    -					}
    -					return this;
    -				},
    -
    -				// Overrides response content-type header
    -				overrideMimeType: function( type ) {
    -					if ( !state ) {
    -						s.mimeType = type;
    -					}
    -					return this;
    -				},
    -
    -				// Status-dependent callbacks
    -				statusCode: function( map ) {
    -					var code;
    -					if ( map ) {
    -						if ( state < 2 ) {
    -							for ( code in map ) {
    -								// Lazy-add the new callback in a way that preserves old ones
    -								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
    -							}
    -						} else {
    -							// Execute the appropriate callbacks
    -							jqXHR.always( map[ jqXHR.status ] );
    -						}
    -					}
    -					return this;
    -				},
    -
    -				// Cancel the request
    -				abort: function( statusText ) {
    -					var finalText = statusText || strAbort;
    -					if ( transport ) {
    -						transport.abort( finalText );
    -					}
    -					done( 0, finalText );
    -					return this;
    -				}
    -			};
    -
    -		// Attach deferreds
    -		deferred.promise( jqXHR ).complete = completeDeferred.add;
    -		jqXHR.success = jqXHR.done;
    -		jqXHR.error = jqXHR.fail;
    -
    -		// Remove hash character (#7531: and string promotion)
    -		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
    -		// Handle falsy url in the settings object (#10093: consistency with old signature)
    -		// We also use the url parameter if available
    -		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
    -
    -		// Alias method option to type as per ticket #12004
    -		s.type = options.method || options.type || s.method || s.type;
    -
    -		// Extract dataTypes list
    -		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
    -
    -		// A cross-domain request is in order when we have a protocol:host:port mismatch
    -		if ( s.crossDomain == null ) {
    -			parts = rurl.exec( s.url.toLowerCase() );
    -			s.crossDomain = !!( parts &&
    -				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
    -					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
    -						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
    -			);
    -		}
    -
    -		// Convert data if not already a string
    -		if ( s.data && s.processData && typeof s.data !== "string" ) {
    -			s.data = jQuery.param( s.data, s.traditional );
    -		}
    -
    -		// Apply prefilters
    -		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
    -
    -		// If request was aborted inside a prefilter, stop there
    -		if ( state === 2 ) {
    -			return jqXHR;
    -		}
    -
    -		// We can fire global events as of now if asked to
    -		fireGlobals = s.global;
    -
    -		// Watch for a new set of requests
    -		if ( fireGlobals && jQuery.active++ === 0 ) {
    -			jQuery.event.trigger("ajaxStart");
    -		}
    -
    -		// Uppercase the type
    -		s.type = s.type.toUpperCase();
    -
    -		// Determine if request has content
    -		s.hasContent = !rnoContent.test( s.type );
    -
    -		// Save the URL in case we're toying with the If-Modified-Since
    -		// and/or If-None-Match header later on
    -		cacheURL = s.url;
    -
    -		// More options handling for requests with no content
    -		if ( !s.hasContent ) {
    -
    -			// If data is available, append data to url
    -			if ( s.data ) {
    -				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
    -				// #9682: remove data so that it's not used in an eventual retry
    -				delete s.data;
    -			}
    -
    -			// Add anti-cache in url if needed
    -			if ( s.cache === false ) {
    -				s.url = rts.test( cacheURL ) ?
    -
    -					// If there is already a '_' parameter, set its value
    -					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
    -
    -					// Otherwise add one to the end
    -					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
    -			}
    -		}
    -
    -		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
    -		if ( s.ifModified ) {
    -			if ( jQuery.lastModified[ cacheURL ] ) {
    -				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
    -			}
    -			if ( jQuery.etag[ cacheURL ] ) {
    -				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
    -			}
    -		}
    -
    -		// Set the correct header, if data is being sent
    -		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
    -			jqXHR.setRequestHeader( "Content-Type", s.contentType );
    -		}
    -
    -		// Set the Accepts header for the server, depending on the dataType
    -		jqXHR.setRequestHeader(
    -			"Accept",
    -			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
    -				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
    -				s.accepts[ "*" ]
    -		);
    -
    -		// Check for headers option
    -		for ( i in s.headers ) {
    -			jqXHR.setRequestHeader( i, s.headers[ i ] );
    -		}
    -
    -		// Allow custom headers/mimetypes and early abort
    -		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
    -			// Abort if not done already and return
    -			return jqXHR.abort();
    -		}
    -
    -		// aborting is no longer a cancellation
    -		strAbort = "abort";
    -
    -		// Install callbacks on deferreds
    -		for ( i in { success: 1, error: 1, complete: 1 } ) {
    -			jqXHR[ i ]( s[ i ] );
    -		}
    -
    -		// Get transport
    -		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
    -
    -		// If no transport, we auto-abort
    -		if ( !transport ) {
    -			done( -1, "No Transport" );
    -		} else {
    -			jqXHR.readyState = 1;
    -
    -			// Send global event
    -			if ( fireGlobals ) {
    -				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
    -			}
    -			// Timeout
    -			if ( s.async && s.timeout > 0 ) {
    -				timeoutTimer = setTimeout(function() {
    -					jqXHR.abort("timeout");
    -				}, s.timeout );
    -			}
    -
    -			try {
    -				state = 1;
    -				transport.send( requestHeaders, done );
    -			} catch ( e ) {
    -				// Propagate exception as error if not done
    -				if ( state < 2 ) {
    -					done( -1, e );
    -				// Simply rethrow otherwise
    -				} else {
    -					throw e;
    -				}
    -			}
    -		}
    -
    -		// Callback for when everything is done
    -		function done( status, nativeStatusText, responses, headers ) {
    -			var isSuccess, success, error, response, modified,
    -				statusText = nativeStatusText;
    -
    -			// Called once
    -			if ( state === 2 ) {
    -				return;
    -			}
    -
    -			// State is "done" now
    -			state = 2;
    -
    -			// Clear timeout if it exists
    -			if ( timeoutTimer ) {
    -				clearTimeout( timeoutTimer );
    -			}
    -
    -			// Dereference transport for early garbage collection
    -			// (no matter how long the jqXHR object will be used)
    -			transport = undefined;
    -
    -			// Cache response headers
    -			responseHeadersString = headers || "";
    -
    -			// Set readyState
    -			jqXHR.readyState = status > 0 ? 4 : 0;
    -
    -			// Determine if successful
    -			isSuccess = status >= 200 && status < 300 || status === 304;
    -
    -			// Get response data
    -			if ( responses ) {
    -				response = ajaxHandleResponses( s, jqXHR, responses );
    -			}
    -
    -			// Convert no matter what (that way responseXXX fields are always set)
    -			response = ajaxConvert( s, response, jqXHR, isSuccess );
    -
    -			// If successful, handle type chaining
    -			if ( isSuccess ) {
    -
    -				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
    -				if ( s.ifModified ) {
    -					modified = jqXHR.getResponseHeader("Last-Modified");
    -					if ( modified ) {
    -						jQuery.lastModified[ cacheURL ] = modified;
    -					}
    -					modified = jqXHR.getResponseHeader("etag");
    -					if ( modified ) {
    -						jQuery.etag[ cacheURL ] = modified;
    -					}
    -				}
    -
    -				// if no content
    -				if ( status === 204 || s.type === "HEAD" ) {
    -					statusText = "nocontent";
    -
    -				// if not modified
    -				} else if ( status === 304 ) {
    -					statusText = "notmodified";
    -
    -				// If we have data, let's convert it
    -				} else {
    -					statusText = response.state;
    -					success = response.data;
    -					error = response.error;
    -					isSuccess = !error;
    -				}
    -			} else {
    -				// We extract error from statusText
    -				// then normalize statusText and status for non-aborts
    -				error = statusText;
    -				if ( status || !statusText ) {
    -					statusText = "error";
    -					if ( status < 0 ) {
    -						status = 0;
    -					}
    -				}
    -			}
    -
    -			// Set data for the fake xhr object
    -			jqXHR.status = status;
    -			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
    -
    -			// Success/Error
    -			if ( isSuccess ) {
    -				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
    -			} else {
    -				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
    -			}
    -
    -			// Status-dependent callbacks
    -			jqXHR.statusCode( statusCode );
    -			statusCode = undefined;
    -
    -			if ( fireGlobals ) {
    -				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
    -					[ jqXHR, s, isSuccess ? success : error ] );
    -			}
    -
    -			// Complete
    -			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
    -
    -			if ( fireGlobals ) {
    -				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
    -				// Handle the global AJAX counter
    -				if ( !( --jQuery.active ) ) {
    -					jQuery.event.trigger("ajaxStop");
    -				}
    -			}
    -		}
    -
    -		return jqXHR;
    -	},
    -
    -	getJSON: function( url, data, callback ) {
    -		return jQuery.get( url, data, callback, "json" );
    -	},
    -
    -	getScript: function( url, callback ) {
    -		return jQuery.get( url, undefined, callback, "script" );
    -	}
    -});
    -
    -jQuery.each( [ "get", "post" ], function( i, method ) {
    -	jQuery[ method ] = function( url, data, callback, type ) {
    -		// shift arguments if data argument was omitted
    -		if ( jQuery.isFunction( data ) ) {
    -			type = type || callback;
    -			callback = data;
    -			data = undefined;
    -		}
    -
    -		return jQuery.ajax({
    -			url: url,
    -			type: method,
    -			dataType: type,
    -			data: data,
    -			success: callback
    -		});
    -	};
    -});
    -
    -/* Handles responses to an ajax request:
    - * - finds the right dataType (mediates between content-type and expected dataType)
    - * - returns the corresponding response
    - */
    -function ajaxHandleResponses( s, jqXHR, responses ) {
    -	var firstDataType, ct, finalDataType, type,
    -		contents = s.contents,
    -		dataTypes = s.dataTypes;
    -
    -	// Remove auto dataType and get content-type in the process
    -	while( dataTypes[ 0 ] === "*" ) {
    -		dataTypes.shift();
    -		if ( ct === undefined ) {
    -			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
    -		}
    -	}
    -
    -	// Check if we're dealing with a known content-type
    -	if ( ct ) {
    -		for ( type in contents ) {
    -			if ( contents[ type ] && contents[ type ].test( ct ) ) {
    -				dataTypes.unshift( type );
    -				break;
    -			}
    -		}
    -	}
    -
    -	// Check to see if we have a response for the expected dataType
    -	if ( dataTypes[ 0 ] in responses ) {
    -		finalDataType = dataTypes[ 0 ];
    -	} else {
    -		// Try convertible dataTypes
    -		for ( type in responses ) {
    -			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
    -				finalDataType = type;
    -				break;
    -			}
    -			if ( !firstDataType ) {
    -				firstDataType = type;
    -			}
    -		}
    -		// Or just use first one
    -		finalDataType = finalDataType || firstDataType;
    -	}
    -
    -	// If we found a dataType
    -	// We add the dataType to the list if needed
    -	// and return the corresponding response
    -	if ( finalDataType ) {
    -		if ( finalDataType !== dataTypes[ 0 ] ) {
    -			dataTypes.unshift( finalDataType );
    -		}
    -		return responses[ finalDataType ];
    -	}
    -}
    -
    -/* Chain conversions given the request and the original response
    - * Also sets the responseXXX fields on the jqXHR instance
    - */
    -function ajaxConvert( s, response, jqXHR, isSuccess ) {
    -	var conv2, current, conv, tmp, prev,
    -		converters = {},
    -		// Work with a copy of dataTypes in case we need to modify it for conversion
    -		dataTypes = s.dataTypes.slice();
    -
    -	// Create converters map with lowercased keys
    -	if ( dataTypes[ 1 ] ) {
    -		for ( conv in s.converters ) {
    -			converters[ conv.toLowerCase() ] = s.converters[ conv ];
    -		}
    -	}
    -
    -	current = dataTypes.shift();
    -
    -	// Convert to each sequential dataType
    -	while ( current ) {
    -
    -		if ( s.responseFields[ current ] ) {
    -			jqXHR[ s.responseFields[ current ] ] = response;
    -		}
    -
    -		// Apply the dataFilter if provided
    -		if ( !prev && isSuccess && s.dataFilter ) {
    -			response = s.dataFilter( response, s.dataType );
    -		}
    -
    -		prev = current;
    -		current = dataTypes.shift();
    -
    -		if ( current ) {
    -
    -			// There's only work to do if current dataType is non-auto
    -			if ( current === "*" ) {
    -
    -				current = prev;
    -
    -			// Convert response if prev dataType is non-auto and differs from current
    -			} else if ( prev !== "*" && prev !== current ) {
    -
    -				// Seek a direct converter
    -				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
    -
    -				// If none found, seek a pair
    -				if ( !conv ) {
    -					for ( conv2 in converters ) {
    -
    -						// If conv2 outputs current
    -						tmp = conv2.split( " " );
    -						if ( tmp[ 1 ] === current ) {
    -
    -							// If prev can be converted to accepted input
    -							conv = converters[ prev + " " + tmp[ 0 ] ] ||
    -								converters[ "* " + tmp[ 0 ] ];
    -							if ( conv ) {
    -								// Condense equivalence converters
    -								if ( conv === true ) {
    -									conv = converters[ conv2 ];
    -
    -								// Otherwise, insert the intermediate dataType
    -								} else if ( converters[ conv2 ] !== true ) {
    -									current = tmp[ 0 ];
    -									dataTypes.unshift( tmp[ 1 ] );
    -								}
    -								break;
    -							}
    -						}
    -					}
    -				}
    -
    -				// Apply converter (if not an equivalence)
    -				if ( conv !== true ) {
    -
    -					// Unless errors are allowed to bubble, catch and return them
    -					if ( conv && s[ "throws" ] ) {
    -						response = conv( response );
    -					} else {
    -						try {
    -							response = conv( response );
    -						} catch ( e ) {
    -							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
    -						}
    -					}
    -				}
    -			}
    -		}
    -	}
    -
    -	return { state: "success", data: response };
    -}
    -// Install script dataType
    -jQuery.ajaxSetup({
    -	accepts: {
    -		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
    -	},
    -	contents: {
    -		script: /(?:java|ecma)script/
    -	},
    -	converters: {
    -		"text script": function( text ) {
    -			jQuery.globalEval( text );
    -			return text;
    -		}
    -	}
    -});
    -
    -// Handle cache's special case and global
    -jQuery.ajaxPrefilter( "script", function( s ) {
    -	if ( s.cache === undefined ) {
    -		s.cache = false;
    -	}
    -	if ( s.crossDomain ) {
    -		s.type = "GET";
    -		s.global = false;
    -	}
    -});
    -
    -// Bind script tag hack transport
    -jQuery.ajaxTransport( "script", function(s) {
    -
    -	// This transport only deals with cross domain requests
    -	if ( s.crossDomain ) {
    -
    -		var script,
    -			head = document.head || jQuery("head")[0] || document.documentElement;
    -
    -		return {
    -
    -			send: function( _, callback ) {
    -
    -				script = document.createElement("script");
    -
    -				script.async = true;
    -
    -				if ( s.scriptCharset ) {
    -					script.charset = s.scriptCharset;
    -				}
    -
    -				script.src = s.url;
    -
    -				// Attach handlers for all browsers
    -				script.onload = script.onreadystatechange = function( _, isAbort ) {
    -
    -					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
    -
    -						// Handle memory leak in IE
    -						script.onload = script.onreadystatechange = null;
    -
    -						// Remove the script
    -						if ( script.parentNode ) {
    -							script.parentNode.removeChild( script );
    -						}
    -
    -						// Dereference the script
    -						script = null;
    -
    -						// Callback if not abort
    -						if ( !isAbort ) {
    -							callback( 200, "success" );
    -						}
    -					}
    -				};
    -
    -				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
    -				// Use native DOM manipulation to avoid our domManip AJAX trickery
    -				head.insertBefore( script, head.firstChild );
    -			},
    -
    -			abort: function() {
    -				if ( script ) {
    -					script.onload( undefined, true );
    -				}
    -			}
    -		};
    -	}
    -});
    -var oldCallbacks = [],
    -	rjsonp = /(=)\?(?=&|$)|\?\?/;
    -
    -// Default jsonp settings
    -jQuery.ajaxSetup({
    -	jsonp: "callback",
    -	jsonpCallback: function() {
    -		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
    -		this[ callback ] = true;
    -		return callback;
    -	}
    -});
    -
    -// Detect, normalize options and install callbacks for jsonp requests
    -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
    -
    -	var callbackName, overwritten, responseContainer,
    -		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
    -			"url" :
    -			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
    -		);
    -
    -	// Handle iff the expected data type is "jsonp" or we have a parameter to set
    -	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
    -
    -		// Get callback name, remembering preexisting value associated with it
    -		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
    -			s.jsonpCallback() :
    -			s.jsonpCallback;
    -
    -		// Insert callback into url or form data
    -		if ( jsonProp ) {
    -			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
    -		} else if ( s.jsonp !== false ) {
    -			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
    -		}
    -
    -		// Use data converter to retrieve json after script execution
    -		s.converters["script json"] = function() {
    -			if ( !responseContainer ) {
    -				jQuery.error( callbackName + " was not called" );
    -			}
    -			return responseContainer[ 0 ];
    -		};
    -
    -		// force json dataType
    -		s.dataTypes[ 0 ] = "json";
    -
    -		// Install callback
    -		overwritten = window[ callbackName ];
    -		window[ callbackName ] = function() {
    -			responseContainer = arguments;
    -		};
    -
    -		// Clean-up function (fires after converters)
    -		jqXHR.always(function() {
    -			// Restore preexisting value
    -			window[ callbackName ] = overwritten;
    -
    -			// Save back as free
    -			if ( s[ callbackName ] ) {
    -				// make sure that re-using the options doesn't screw things around
    -				s.jsonpCallback = originalSettings.jsonpCallback;
    -
    -				// save the callback name for future use
    -				oldCallbacks.push( callbackName );
    -			}
    -
    -			// Call if it was a function and we have a response
    -			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
    -				overwritten( responseContainer[ 0 ] );
    -			}
    -
    -			responseContainer = overwritten = undefined;
    -		});
    -
    -		// Delegate to script
    -		return "script";
    -	}
    -});
    -var xhrCallbacks, xhrSupported,
    -	xhrId = 0,
    -	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
    -	xhrOnUnloadAbort = window.ActiveXObject && function() {
    -		// Abort all pending requests
    -		var key;
    -		for ( key in xhrCallbacks ) {
    -			xhrCallbacks[ key ]( undefined, true );
    -		}
    -	};
    -
    -// Functions to create xhrs
    -function createStandardXHR() {
    -	try {
    -		return new window.XMLHttpRequest();
    -	} catch( e ) {}
    -}
    -
    -function createActiveXHR() {
    -	try {
    -		return new window.ActiveXObject("Microsoft.XMLHTTP");
    -	} catch( e ) {}
    -}
    -
    -// Create the request object
    -// (This is still attached to ajaxSettings for backward compatibility)
    -jQuery.ajaxSettings.xhr = window.ActiveXObject ?
    -	/* Microsoft failed to properly
    -	 * implement the XMLHttpRequest in IE7 (can't request local files),
    -	 * so we use the ActiveXObject when it is available
    -	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
    -	 * we need a fallback.
    -	 */
    -	function() {
    -		return !this.isLocal && createStandardXHR() || createActiveXHR();
    -	} :
    -	// For all other browsers, use the standard XMLHttpRequest object
    -	createStandardXHR;
    -
    -// Determine support properties
    -xhrSupported = jQuery.ajaxSettings.xhr();
    -jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
    -xhrSupported = jQuery.support.ajax = !!xhrSupported;
    -
    -// Create transport if the browser can provide an xhr
    -if ( xhrSupported ) {
    -
    -	jQuery.ajaxTransport(function( s ) {
    -		// Cross domain only allowed if supported through XMLHttpRequest
    -		if ( !s.crossDomain || jQuery.support.cors ) {
    -
    -			var callback;
    -
    -			return {
    -				send: function( headers, complete ) {
    -
    -					// Get a new xhr
    -					var handle, i,
    -						xhr = s.xhr();
    -
    -					// Open the socket
    -					// Passing null username, generates a login popup on Opera (#2865)
    -					if ( s.username ) {
    -						xhr.open( s.type, s.url, s.async, s.username, s.password );
    -					} else {
    -						xhr.open( s.type, s.url, s.async );
    -					}
    -
    -					// Apply custom fields if provided
    -					if ( s.xhrFields ) {
    -						for ( i in s.xhrFields ) {
    -							xhr[ i ] = s.xhrFields[ i ];
    -						}
    -					}
    -
    -					// Override mime type if needed
    -					if ( s.mimeType && xhr.overrideMimeType ) {
    -						xhr.overrideMimeType( s.mimeType );
    -					}
    -
    -					// X-Requested-With header
    -					// For cross-domain requests, seeing as conditions for a preflight are
    -					// akin to a jigsaw puzzle, we simply never set it to be sure.
    -					// (it can always be set on a per-request basis or even using ajaxSetup)
    -					// For same-domain requests, won't change header if already provided.
    -					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
    -						headers["X-Requested-With"] = "XMLHttpRequest";
    -					}
    -
    -					// Need an extra try/catch for cross domain requests in Firefox 3
    -					try {
    -						for ( i in headers ) {
    -							xhr.setRequestHeader( i, headers[ i ] );
    -						}
    -					} catch( err ) {}
    -
    -					// Do send the request
    -					// This may raise an exception which is actually
    -					// handled in jQuery.ajax (so no try/catch here)
    -					xhr.send( ( s.hasContent && s.data ) || null );
    -
    -					// Listener
    -					callback = function( _, isAbort ) {
    -						var status, responseHeaders, statusText, responses;
    -
    -						// Firefox throws exceptions when accessing properties
    -						// of an xhr when a network error occurred
    -						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
    -						try {
    -
    -							// Was never called and is aborted or complete
    -							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
    -
    -								// Only called once
    -								callback = undefined;
    -
    -								// Do not keep as active anymore
    -								if ( handle ) {
    -									xhr.onreadystatechange = jQuery.noop;
    -									if ( xhrOnUnloadAbort ) {
    -										delete xhrCallbacks[ handle ];
    -									}
    -								}
    -
    -								// If it's an abort
    -								if ( isAbort ) {
    -									// Abort it manually if needed
    -									if ( xhr.readyState !== 4 ) {
    -										xhr.abort();
    -									}
    -								} else {
    -									responses = {};
    -									status = xhr.status;
    -									responseHeaders = xhr.getAllResponseHeaders();
    -
    -									// When requesting binary data, IE6-9 will throw an exception
    -									// on any attempt to access responseText (#11426)
    -									if ( typeof xhr.responseText === "string" ) {
    -										responses.text = xhr.responseText;
    -									}
    -
    -									// Firefox throws an exception when accessing
    -									// statusText for faulty cross-domain requests
    -									try {
    -										statusText = xhr.statusText;
    -									} catch( e ) {
    -										// We normalize with Webkit giving an empty statusText
    -										statusText = "";
    -									}
    -
    -									// Filter status for non standard behaviors
    -
    -									// If the request is local and we have data: assume a success
    -									// (success with no data won't get notified, that's the best we
    -									// can do given current implementations)
    -									if ( !status && s.isLocal && !s.crossDomain ) {
    -										status = responses.text ? 200 : 404;
    -									// IE - #1450: sometimes returns 1223 when it should be 204
    -									} else if ( status === 1223 ) {
    -										status = 204;
    -									}
    -								}
    -							}
    -						} catch( firefoxAccessException ) {
    -							if ( !isAbort ) {
    -								complete( -1, firefoxAccessException );
    -							}
    -						}
    -
    -						// Call complete if needed
    -						if ( responses ) {
    -							complete( status, statusText, responses, responseHeaders );
    -						}
    -					};
    -
    -					if ( !s.async ) {
    -						// if we're in sync mode we fire the callback
    -						callback();
    -					} else if ( xhr.readyState === 4 ) {
    -						// (IE6 & IE7) if it's in cache and has been
    -						// retrieved directly we need to fire the callback
    -						setTimeout( callback );
    -					} else {
    -						handle = ++xhrId;
    -						if ( xhrOnUnloadAbort ) {
    -							// Create the active xhrs callbacks list if needed
    -							// and attach the unload handler
    -							if ( !xhrCallbacks ) {
    -								xhrCallbacks = {};
    -								jQuery( window ).unload( xhrOnUnloadAbort );
    -							}
    -							// Add to list of active xhrs callbacks
    -							xhrCallbacks[ handle ] = callback;
    -						}
    -						xhr.onreadystatechange = callback;
    -					}
    -				},
    -
    -				abort: function() {
    -					if ( callback ) {
    -						callback( undefined, true );
    -					}
    -				}
    -			};
    -		}
    -	});
    -}
    -var fxNow, timerId,
    -	rfxtypes = /^(?:toggle|show|hide)$/,
    -	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
    -	rrun = /queueHooks$/,
    -	animationPrefilters = [ defaultPrefilter ],
    -	tweeners = {
    -		"*": [function( prop, value ) {
    -			var tween = this.createTween( prop, value ),
    -				target = tween.cur(),
    -				parts = rfxnum.exec( value ),
    -				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
    -
    -				// Starting value computation is required for potential unit mismatches
    -				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
    -					rfxnum.exec( jQuery.css( tween.elem, prop ) ),
    -				scale = 1,
    -				maxIterations = 20;
    -
    -			if ( start && start[ 3 ] !== unit ) {
    -				// Trust units reported by jQuery.css
    -				unit = unit || start[ 3 ];
    -
    -				// Make sure we update the tween properties later on
    -				parts = parts || [];
    -
    -				// Iteratively approximate from a nonzero starting point
    -				start = +target || 1;
    -
    -				do {
    -					// If previous iteration zeroed out, double until we get *something*
    -					// Use a string for doubling factor so we don't accidentally see scale as unchanged below
    -					scale = scale || ".5";
    -
    -					// Adjust and apply
    -					start = start / scale;
    -					jQuery.style( tween.elem, prop, start + unit );
    -
    -				// Update scale, tolerating zero or NaN from tween.cur()
    -				// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
    -				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
    -			}
    -
    -			// Update tween properties
    -			if ( parts ) {
    -				start = tween.start = +start || +target || 0;
    -				tween.unit = unit;
    -				// If a +=/-= token was provided, we're doing a relative animation
    -				tween.end = parts[ 1 ] ?
    -					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
    -					+parts[ 2 ];
    -			}
    -
    -			return tween;
    -		}]
    -	};
    -
    -// Animations created synchronously will run synchronously
    -function createFxNow() {
    -	setTimeout(function() {
    -		fxNow = undefined;
    -	});
    -	return ( fxNow = jQuery.now() );
    -}
    -
    -function createTween( value, prop, animation ) {
    -	var tween,
    -		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
    -		index = 0,
    -		length = collection.length;
    -	for ( ; index < length; index++ ) {
    -		if ( (tween = collection[ index ].call( animation, prop, value )) ) {
    -
    -			// we're done with this property
    -			return tween;
    -		}
    -	}
    -}
    -
    -function Animation( elem, properties, options ) {
    -	var result,
    -		stopped,
    -		index = 0,
    -		length = animationPrefilters.length,
    -		deferred = jQuery.Deferred().always( function() {
    -			// don't match elem in the :animated selector
    -			delete tick.elem;
    -		}),
    -		tick = function() {
    -			if ( stopped ) {
    -				return false;
    -			}
    -			var currentTime = fxNow || createFxNow(),
    -				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
    -				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
    -				temp = remaining / animation.duration || 0,
    -				percent = 1 - temp,
    -				index = 0,
    -				length = animation.tweens.length;
    -
    -			for ( ; index < length ; index++ ) {
    -				animation.tweens[ index ].run( percent );
    -			}
    -
    -			deferred.notifyWith( elem, [ animation, percent, remaining ]);
    -
    -			if ( percent < 1 && length ) {
    -				return remaining;
    -			} else {
    -				deferred.resolveWith( elem, [ animation ] );
    -				return false;
    -			}
    -		},
    -		animation = deferred.promise({
    -			elem: elem,
    -			props: jQuery.extend( {}, properties ),
    -			opts: jQuery.extend( true, { specialEasing: {} }, options ),
    -			originalProperties: properties,
    -			originalOptions: options,
    -			startTime: fxNow || createFxNow(),
    -			duration: options.duration,
    -			tweens: [],
    -			createTween: function( prop, end ) {
    -				var tween = jQuery.Tween( elem, animation.opts, prop, end,
    -						animation.opts.specialEasing[ prop ] || animation.opts.easing );
    -				animation.tweens.push( tween );
    -				return tween;
    -			},
    -			stop: function( gotoEnd ) {
    -				var index = 0,
    -					// if we are going to the end, we want to run all the tweens
    -					// otherwise we skip this part
    -					length = gotoEnd ? animation.tweens.length : 0;
    -				if ( stopped ) {
    -					return this;
    -				}
    -				stopped = true;
    -				for ( ; index < length ; index++ ) {
    -					animation.tweens[ index ].run( 1 );
    -				}
    -
    -				// resolve when we played the last frame
    -				// otherwise, reject
    -				if ( gotoEnd ) {
    -					deferred.resolveWith( elem, [ animation, gotoEnd ] );
    -				} else {
    -					deferred.rejectWith( elem, [ animation, gotoEnd ] );
    -				}
    -				return this;
    -			}
    -		}),
    -		props = animation.props;
    -
    -	propFilter( props, animation.opts.specialEasing );
    -
    -	for ( ; index < length ; index++ ) {
    -		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
    -		if ( result ) {
    -			return result;
    -		}
    -	}
    -
    -	jQuery.map( props, createTween, animation );
    -
    -	if ( jQuery.isFunction( animation.opts.start ) ) {
    -		animation.opts.start.call( elem, animation );
    -	}
    -
    -	jQuery.fx.timer(
    -		jQuery.extend( tick, {
    -			elem: elem,
    -			anim: animation,
    -			queue: animation.opts.queue
    -		})
    -	);
    -
    -	// attach callbacks from options
    -	return animation.progress( animation.opts.progress )
    -		.done( animation.opts.done, animation.opts.complete )
    -		.fail( animation.opts.fail )
    -		.always( animation.opts.always );
    -}
    -
    -function propFilter( props, specialEasing ) {
    -	var index, name, easing, value, hooks;
    -
    -	// camelCase, specialEasing and expand cssHook pass
    -	for ( index in props ) {
    -		name = jQuery.camelCase( index );
    -		easing = specialEasing[ name ];
    -		value = props[ index ];
    -		if ( jQuery.isArray( value ) ) {
    -			easing = value[ 1 ];
    -			value = props[ index ] = value[ 0 ];
    -		}
    -
    -		if ( index !== name ) {
    -			props[ name ] = value;
    -			delete props[ index ];
    -		}
    -
    -		hooks = jQuery.cssHooks[ name ];
    -		if ( hooks && "expand" in hooks ) {
    -			value = hooks.expand( value );
    -			delete props[ name ];
    -
    -			// not quite $.extend, this wont overwrite keys already present.
    -			// also - reusing 'index' from above because we have the correct "name"
    -			for ( index in value ) {
    -				if ( !( index in props ) ) {
    -					props[ index ] = value[ index ];
    -					specialEasing[ index ] = easing;
    -				}
    -			}
    -		} else {
    -			specialEasing[ name ] = easing;
    -		}
    -	}
    -}
    -
    -jQuery.Animation = jQuery.extend( Animation, {
    -
    -	tweener: function( props, callback ) {
    -		if ( jQuery.isFunction( props ) ) {
    -			callback = props;
    -			props = [ "*" ];
    -		} else {
    -			props = props.split(" ");
    -		}
    -
    -		var prop,
    -			index = 0,
    -			length = props.length;
    -
    -		for ( ; index < length ; index++ ) {
    -			prop = props[ index ];
    -			tweeners[ prop ] = tweeners[ prop ] || [];
    -			tweeners[ prop ].unshift( callback );
    -		}
    -	},
    -
    -	prefilter: function( callback, prepend ) {
    -		if ( prepend ) {
    -			animationPrefilters.unshift( callback );
    -		} else {
    -			animationPrefilters.push( callback );
    -		}
    -	}
    -});
    -
    -function defaultPrefilter( elem, props, opts ) {
    -	/* jshint validthis: true */
    -	var prop, value, toggle, tween, hooks, oldfire,
    -		anim = this,
    -		orig = {},
    -		style = elem.style,
    -		hidden = elem.nodeType && isHidden( elem ),
    -		dataShow = jQuery._data( elem, "fxshow" );
    -
    -	// handle queue: false promises
    -	if ( !opts.queue ) {
    -		hooks = jQuery._queueHooks( elem, "fx" );
    -		if ( hooks.unqueued == null ) {
    -			hooks.unqueued = 0;
    -			oldfire = hooks.empty.fire;
    -			hooks.empty.fire = function() {
    -				if ( !hooks.unqueued ) {
    -					oldfire();
    -				}
    -			};
    -		}
    -		hooks.unqueued++;
    -
    -		anim.always(function() {
    -			// doing this makes sure that the complete handler will be called
    -			// before this completes
    -			anim.always(function() {
    -				hooks.unqueued--;
    -				if ( !jQuery.queue( elem, "fx" ).length ) {
    -					hooks.empty.fire();
    -				}
    -			});
    -		});
    -	}
    -
    -	// height/width overflow pass
    -	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
    -		// Make sure that nothing sneaks out
    -		// Record all 3 overflow attributes because IE does not
    -		// change the overflow attribute when overflowX and
    -		// overflowY are set to the same value
    -		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
    -
    -		// Set display property to inline-block for height/width
    -		// animations on inline elements that are having width/height animated
    -		if ( jQuery.css( elem, "display" ) === "inline" &&
    -				jQuery.css( elem, "float" ) === "none" ) {
    -
    -			// inline-level elements accept inline-block;
    -			// block-level elements need to be inline with layout
    -			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
    -				style.display = "inline-block";
    -
    -			} else {
    -				style.zoom = 1;
    -			}
    -		}
    -	}
    -
    -	if ( opts.overflow ) {
    -		style.overflow = "hidden";
    -		if ( !jQuery.support.shrinkWrapBlocks ) {
    -			anim.always(function() {
    -				style.overflow = opts.overflow[ 0 ];
    -				style.overflowX = opts.overflow[ 1 ];
    -				style.overflowY = opts.overflow[ 2 ];
    -			});
    -		}
    -	}
    -
    -
    -	// show/hide pass
    -	for ( prop in props ) {
    -		value = props[ prop ];
    -		if ( rfxtypes.exec( value ) ) {
    -			delete props[ prop ];
    -			toggle = toggle || value === "toggle";
    -			if ( value === ( hidden ? "hide" : "show" ) ) {
    -				continue;
    -			}
    -			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
    -		}
    -	}
    -
    -	if ( !jQuery.isEmptyObject( orig ) ) {
    -		if ( dataShow ) {
    -			if ( "hidden" in dataShow ) {
    -				hidden = dataShow.hidden;
    -			}
    -		} else {
    -			dataShow = jQuery._data( elem, "fxshow", {} );
    -		}
    -
    -		// store state if its toggle - enables .stop().toggle() to "reverse"
    -		if ( toggle ) {
    -			dataShow.hidden = !hidden;
    -		}
    -		if ( hidden ) {
    -			jQuery( elem ).show();
    -		} else {
    -			anim.done(function() {
    -				jQuery( elem ).hide();
    -			});
    -		}
    -		anim.done(function() {
    -			var prop;
    -			jQuery._removeData( elem, "fxshow" );
    -			for ( prop in orig ) {
    -				jQuery.style( elem, prop, orig[ prop ] );
    -			}
    -		});
    -		for ( prop in orig ) {
    -			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
    -
    -			if ( !( prop in dataShow ) ) {
    -				dataShow[ prop ] = tween.start;
    -				if ( hidden ) {
    -					tween.end = tween.start;
    -					tween.start = prop === "width" || prop === "height" ? 1 : 0;
    -				}
    -			}
    -		}
    -	}
    -}
    -
    -function Tween( elem, options, prop, end, easing ) {
    -	return new Tween.prototype.init( elem, options, prop, end, easing );
    -}
    -jQuery.Tween = Tween;
    -
    -Tween.prototype = {
    -	constructor: Tween,
    -	init: function( elem, options, prop, end, easing, unit ) {
    -		this.elem = elem;
    -		this.prop = prop;
    -		this.easing = easing || "swing";
    -		this.options = options;
    -		this.start = this.now = this.cur();
    -		this.end = end;
    -		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
    -	},
    -	cur: function() {
    -		var hooks = Tween.propHooks[ this.prop ];
    -
    -		return hooks && hooks.get ?
    -			hooks.get( this ) :
    -			Tween.propHooks._default.get( this );
    -	},
    -	run: function( percent ) {
    -		var eased,
    -			hooks = Tween.propHooks[ this.prop ];
    -
    -		if ( this.options.duration ) {
    -			this.pos = eased = jQuery.easing[ this.easing ](
    -				percent, this.options.duration * percent, 0, 1, this.options.duration
    -			);
    -		} else {
    -			this.pos = eased = percent;
    -		}
    -		this.now = ( this.end - this.start ) * eased + this.start;
    -
    -		if ( this.options.step ) {
    -			this.options.step.call( this.elem, this.now, this );
    -		}
    -
    -		if ( hooks && hooks.set ) {
    -			hooks.set( this );
    -		} else {
    -			Tween.propHooks._default.set( this );
    -		}
    -		return this;
    -	}
    -};
    -
    -Tween.prototype.init.prototype = Tween.prototype;
    -
    -Tween.propHooks = {
    -	_default: {
    -		get: function( tween ) {
    -			var result;
    -
    -			if ( tween.elem[ tween.prop ] != null &&
    -				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
    -				return tween.elem[ tween.prop ];
    -			}
    -
    -			// passing an empty string as a 3rd parameter to .css will automatically
    -			// attempt a parseFloat and fallback to a string if the parse fails
    -			// so, simple values such as "10px" are parsed to Float.
    -			// complex values such as "rotate(1rad)" are returned as is.
    -			result = jQuery.css( tween.elem, tween.prop, "" );
    -			// Empty strings, null, undefined and "auto" are converted to 0.
    -			return !result || result === "auto" ? 0 : result;
    -		},
    -		set: function( tween ) {
    -			// use step hook for back compat - use cssHook if its there - use .style if its
    -			// available and use plain properties where available
    -			if ( jQuery.fx.step[ tween.prop ] ) {
    -				jQuery.fx.step[ tween.prop ]( tween );
    -			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
    -				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
    -			} else {
    -				tween.elem[ tween.prop ] = tween.now;
    -			}
    -		}
    -	}
    -};
    -
    -// Support: IE <=9
    -// Panic based approach to setting things on disconnected nodes
    -
    -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
    -	set: function( tween ) {
    -		if ( tween.elem.nodeType && tween.elem.parentNode ) {
    -			tween.elem[ tween.prop ] = tween.now;
    -		}
    -	}
    -};
    -
    -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
    -	var cssFn = jQuery.fn[ name ];
    -	jQuery.fn[ name ] = function( speed, easing, callback ) {
    -		return speed == null || typeof speed === "boolean" ?
    -			cssFn.apply( this, arguments ) :
    -			this.animate( genFx( name, true ), speed, easing, callback );
    -	};
    -});
    -
    -jQuery.fn.extend({
    -	fadeTo: function( speed, to, easing, callback ) {
    -
    -		// show any hidden elements after setting opacity to 0
    -		return this.filter( isHidden ).css( "opacity", 0 ).show()
    -
    -			// animate to the value specified
    -			.end().animate({ opacity: to }, speed, easing, callback );
    -	},
    -	animate: function( prop, speed, easing, callback ) {
    -		var empty = jQuery.isEmptyObject( prop ),
    -			optall = jQuery.speed( speed, easing, callback ),
    -			doAnimation = function() {
    -				// Operate on a copy of prop so per-property easing won't be lost
    -				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
    -
    -				// Empty animations, or finishing resolves immediately
    -				if ( empty || jQuery._data( this, "finish" ) ) {
    -					anim.stop( true );
    -				}
    -			};
    -			doAnimation.finish = doAnimation;
    -
    -		return empty || optall.queue === false ?
    -			this.each( doAnimation ) :
    -			this.queue( optall.queue, doAnimation );
    -	},
    -	stop: function( type, clearQueue, gotoEnd ) {
    -		var stopQueue = function( hooks ) {
    -			var stop = hooks.stop;
    -			delete hooks.stop;
    -			stop( gotoEnd );
    -		};
    -
    -		if ( typeof type !== "string" ) {
    -			gotoEnd = clearQueue;
    -			clearQueue = type;
    -			type = undefined;
    -		}
    -		if ( clearQueue && type !== false ) {
    -			this.queue( type || "fx", [] );
    -		}
    -
    -		return this.each(function() {
    -			var dequeue = true,
    -				index = type != null && type + "queueHooks",
    -				timers = jQuery.timers,
    -				data = jQuery._data( this );
    -
    -			if ( index ) {
    -				if ( data[ index ] && data[ index ].stop ) {
    -					stopQueue( data[ index ] );
    -				}
    -			} else {
    -				for ( index in data ) {
    -					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
    -						stopQueue( data[ index ] );
    -					}
    -				}
    -			}
    -
    -			for ( index = timers.length; index--; ) {
    -				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
    -					timers[ index ].anim.stop( gotoEnd );
    -					dequeue = false;
    -					timers.splice( index, 1 );
    -				}
    -			}
    -
    -			// start the next in the queue if the last step wasn't forced
    -			// timers currently will call their complete callbacks, which will dequeue
    -			// but only if they were gotoEnd
    -			if ( dequeue || !gotoEnd ) {
    -				jQuery.dequeue( this, type );
    -			}
    -		});
    -	},
    -	finish: function( type ) {
    -		if ( type !== false ) {
    -			type = type || "fx";
    -		}
    -		return this.each(function() {
    -			var index,
    -				data = jQuery._data( this ),
    -				queue = data[ type + "queue" ],
    -				hooks = data[ type + "queueHooks" ],
    -				timers = jQuery.timers,
    -				length = queue ? queue.length : 0;
    -
    -			// enable finishing flag on private data
    -			data.finish = true;
    -
    -			// empty the queue first
    -			jQuery.queue( this, type, [] );
    -
    -			if ( hooks && hooks.stop ) {
    -				hooks.stop.call( this, true );
    -			}
    -
    -			// look for any active animations, and finish them
    -			for ( index = timers.length; index--; ) {
    -				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
    -					timers[ index ].anim.stop( true );
    -					timers.splice( index, 1 );
    -				}
    -			}
    -
    -			// look for any animations in the old queue and finish them
    -			for ( index = 0; index < length; index++ ) {
    -				if ( queue[ index ] && queue[ index ].finish ) {
    -					queue[ index ].finish.call( this );
    -				}
    -			}
    -
    -			// turn off finishing flag
    -			delete data.finish;
    -		});
    -	}
    -});
    -
    -// Generate parameters to create a standard animation
    -function genFx( type, includeWidth ) {
    -	var which,
    -		attrs = { height: type },
    -		i = 0;
    -
    -	// if we include width, step value is 1 to do all cssExpand values,
    -	// if we don't include width, step value is 2 to skip over Left and Right
    -	includeWidth = includeWidth? 1 : 0;
    -	for( ; i < 4 ; i += 2 - includeWidth ) {
    -		which = cssExpand[ i ];
    -		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
    -	}
    -
    -	if ( includeWidth ) {
    -		attrs.opacity = attrs.width = type;
    -	}
    -
    -	return attrs;
    -}
    -
    -// Generate shortcuts for custom animations
    -jQuery.each({
    -	slideDown: genFx("show"),
    -	slideUp: genFx("hide"),
    -	slideToggle: genFx("toggle"),
    -	fadeIn: { opacity: "show" },
    -	fadeOut: { opacity: "hide" },
    -	fadeToggle: { opacity: "toggle" }
    -}, function( name, props ) {
    -	jQuery.fn[ name ] = function( speed, easing, callback ) {
    -		return this.animate( props, speed, easing, callback );
    -	};
    -});
    -
    -jQuery.speed = function( speed, easing, fn ) {
    -	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
    -		complete: fn || !fn && easing ||
    -			jQuery.isFunction( speed ) && speed,
    -		duration: speed,
    -		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
    -	};
    -
    -	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
    -		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
    -
    -	// normalize opt.queue - true/undefined/null -> "fx"
    -	if ( opt.queue == null || opt.queue === true ) {
    -		opt.queue = "fx";
    -	}
    -
    -	// Queueing
    -	opt.old = opt.complete;
    -
    -	opt.complete = function() {
    -		if ( jQuery.isFunction( opt.old ) ) {
    -			opt.old.call( this );
    -		}
    -
    -		if ( opt.queue ) {
    -			jQuery.dequeue( this, opt.queue );
    -		}
    -	};
    -
    -	return opt;
    -};
    -
    -jQuery.easing = {
    -	linear: function( p ) {
    -		return p;
    -	},
    -	swing: function( p ) {
    -		return 0.5 - Math.cos( p*Math.PI ) / 2;
    -	}
    -};
    -
    -jQuery.timers = [];
    -jQuery.fx = Tween.prototype.init;
    -jQuery.fx.tick = function() {
    -	var timer,
    -		timers = jQuery.timers,
    -		i = 0;
    -
    -	fxNow = jQuery.now();
    -
    -	for ( ; i < timers.length; i++ ) {
    -		timer = timers[ i ];
    -		// Checks the timer has not already been removed
    -		if ( !timer() && timers[ i ] === timer ) {
    -			timers.splice( i--, 1 );
    -		}
    -	}
    -
    -	if ( !timers.length ) {
    -		jQuery.fx.stop();
    -	}
    -	fxNow = undefined;
    -};
    -
    -jQuery.fx.timer = function( timer ) {
    -	if ( timer() && jQuery.timers.push( timer ) ) {
    -		jQuery.fx.start();
    -	}
    -};
    -
    -jQuery.fx.interval = 13;
    -
    -jQuery.fx.start = function() {
    -	if ( !timerId ) {
    -		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
    -	}
    -};
    -
    -jQuery.fx.stop = function() {
    -	clearInterval( timerId );
    -	timerId = null;
    -};
    -
    -jQuery.fx.speeds = {
    -	slow: 600,
    -	fast: 200,
    -	// Default speed
    -	_default: 400
    -};
    -
    -// Back Compat <1.8 extension point
    -jQuery.fx.step = {};
    -
    -if ( jQuery.expr && jQuery.expr.filters ) {
    -	jQuery.expr.filters.animated = function( elem ) {
    -		return jQuery.grep(jQuery.timers, function( fn ) {
    -			return elem === fn.elem;
    -		}).length;
    -	};
    -}
    -jQuery.fn.offset = function( options ) {
    -	if ( arguments.length ) {
    -		return options === undefined ?
    -			this :
    -			this.each(function( i ) {
    -				jQuery.offset.setOffset( this, options, i );
    -			});
    -	}
    -
    -	var docElem, win,
    -		box = { top: 0, left: 0 },
    -		elem = this[ 0 ],
    -		doc = elem && elem.ownerDocument;
    -
    -	if ( !doc ) {
    -		return;
    -	}
    -
    -	docElem = doc.documentElement;
    -
    -	// Make sure it's not a disconnected DOM node
    -	if ( !jQuery.contains( docElem, elem ) ) {
    -		return box;
    -	}
    -
    -	// If we don't have gBCR, just use 0,0 rather than error
    -	// BlackBerry 5, iOS 3 (original iPhone)
    -	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
    -		box = elem.getBoundingClientRect();
    -	}
    -	win = getWindow( doc );
    -	return {
    -		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
    -		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
    -	};
    -};
    -
    -jQuery.offset = {
    -
    -	setOffset: function( elem, options, i ) {
    -		var position = jQuery.css( elem, "position" );
    -
    -		// set position first, in-case top/left are set even on static elem
    -		if ( position === "static" ) {
    -			elem.style.position = "relative";
    -		}
    -
    -		var curElem = jQuery( elem ),
    -			curOffset = curElem.offset(),
    -			curCSSTop = jQuery.css( elem, "top" ),
    -			curCSSLeft = jQuery.css( elem, "left" ),
    -			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
    -			props = {}, curPosition = {}, curTop, curLeft;
    -
    -		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
    -		if ( calculatePosition ) {
    -			curPosition = curElem.position();
    -			curTop = curPosition.top;
    -			curLeft = curPosition.left;
    -		} else {
    -			curTop = parseFloat( curCSSTop ) || 0;
    -			curLeft = parseFloat( curCSSLeft ) || 0;
    -		}
    -
    -		if ( jQuery.isFunction( options ) ) {
    -			options = options.call( elem, i, curOffset );
    -		}
    -
    -		if ( options.top != null ) {
    -			props.top = ( options.top - curOffset.top ) + curTop;
    -		}
    -		if ( options.left != null ) {
    -			props.left = ( options.left - curOffset.left ) + curLeft;
    -		}
    -
    -		if ( "using" in options ) {
    -			options.using.call( elem, props );
    -		} else {
    -			curElem.css( props );
    -		}
    -	}
    -};
    -
    -
    -jQuery.fn.extend({
    -
    -	position: function() {
    -		if ( !this[ 0 ] ) {
    -			return;
    -		}
    -
    -		var offsetParent, offset,
    -			parentOffset = { top: 0, left: 0 },
    -			elem = this[ 0 ];
    -
    -		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
    -		if ( jQuery.css( elem, "position" ) === "fixed" ) {
    -			// we assume that getBoundingClientRect is available when computed position is fixed
    -			offset = elem.getBoundingClientRect();
    -		} else {
    -			// Get *real* offsetParent
    -			offsetParent = this.offsetParent();
    -
    -			// Get correct offsets
    -			offset = this.offset();
    -			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
    -				parentOffset = offsetParent.offset();
    -			}
    -
    -			// Add offsetParent borders
    -			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
    -			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
    -		}
    -
    -		// Subtract parent offsets and element margins
    -		// note: when an element has margin: auto the offsetLeft and marginLeft
    -		// are the same in Safari causing offset.left to incorrectly be 0
    -		return {
    -			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
    -			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
    -		};
    -	},
    -
    -	offsetParent: function() {
    -		return this.map(function() {
    -			var offsetParent = this.offsetParent || docElem;
    -			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
    -				offsetParent = offsetParent.offsetParent;
    -			}
    -			return offsetParent || docElem;
    -		});
    -	}
    -});
    -
    -
    -// Create scrollLeft and scrollTop methods
    -jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
    -	var top = /Y/.test( prop );
    -
    -	jQuery.fn[ method ] = function( val ) {
    -		return jQuery.access( this, function( elem, method, val ) {
    -			var win = getWindow( elem );
    -
    -			if ( val === undefined ) {
    -				return win ? (prop in win) ? win[ prop ] :
    -					win.document.documentElement[ method ] :
    -					elem[ method ];
    -			}
    -
    -			if ( win ) {
    -				win.scrollTo(
    -					!top ? val : jQuery( win ).scrollLeft(),
    -					top ? val : jQuery( win ).scrollTop()
    -				);
    -
    -			} else {
    -				elem[ method ] = val;
    -			}
    -		}, method, val, arguments.length, null );
    -	};
    -});
    -
    -function getWindow( elem ) {
    -	return jQuery.isWindow( elem ) ?
    -		elem :
    -		elem.nodeType === 9 ?
    -			elem.defaultView || elem.parentWindow :
    -			false;
    -}
    -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
    -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
    -	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
    -		// margin is only for outerHeight, outerWidth
    -		jQuery.fn[ funcName ] = function( margin, value ) {
    -			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
    -				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
    -
    -			return jQuery.access( this, function( elem, type, value ) {
    -				var doc;
    -
    -				if ( jQuery.isWindow( elem ) ) {
    -					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
    -					// isn't a whole lot we can do. See pull request at this URL for discussion:
    -					// https://github.com/jquery/jquery/pull/764
    -					return elem.document.documentElement[ "client" + name ];
    -				}
    -
    -				// Get document width or height
    -				if ( elem.nodeType === 9 ) {
    -					doc = elem.documentElement;
    -
    -					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
    -					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
    -					return Math.max(
    -						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
    -						elem.body[ "offset" + name ], doc[ "offset" + name ],
    -						doc[ "client" + name ]
    -					);
    -				}
    -
    -				return value === undefined ?
    -					// Get width or height on the element, requesting but not forcing parseFloat
    -					jQuery.css( elem, type, extra ) :
    -
    -					// Set width or height on the element
    -					jQuery.style( elem, type, value, extra );
    -			}, type, chainable ? margin : undefined, chainable, null );
    -		};
    -	});
    -});
    -// Limit scope pollution from any deprecated API
    -// (function() {
    -
    -// The number of elements contained in the matched element set
    -jQuery.fn.size = function() {
    -	return this.length;
    -};
    -
    -jQuery.fn.andSelf = jQuery.fn.addBack;
    -
    -// })();
    -if ( typeof module === "object" && module && typeof module.exports === "object" ) {
    -	// Expose jQuery as module.exports in loaders that implement the Node
    -	// module pattern (including browserify). Do not create the global, since
    -	// the user will be storing it themselves locally, and globals are frowned
    -	// upon in the Node module world.
    -	module.exports = jQuery;
    -} else {
    -	// Otherwise expose jQuery to the global object as usual
    -	window.jQuery = window.$ = jQuery;
    -
    -	// Register as a named AMD module, since jQuery can be concatenated with other
    -	// files that may use define, but not via a proper concatenation script that
    -	// understands anonymous AMD modules. A named AMD is safest and most robust
    -	// way to register. Lowercase jquery is used because AMD module names are
    -	// derived from file names, and jQuery is normally delivered in a lowercase
    -	// file name. Do this after creating the global so that if an AMD module wants
    -	// to call noConflict to hide this version of jQuery, it will work.
    -	if ( typeof define === "function" && define.amd ) {
    -		define( "jquery", [], function () { return jQuery; } );
    -	}
    -}
    -
    -})( window );
    diff --git a/js/prettify.js b/js/prettify.js
    new file mode 100644
    index 0000000..7b99049
    --- /dev/null
    +++ b/js/prettify.js
    @@ -0,0 +1,30 @@
    +!function(){var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
    +(function(){function S(a){function d(e){var b=e.charCodeAt(0);if(b!==92)return b;var a=e.charAt(1);return(b=r[a])?b:"0"<=a&&a<="7"?parseInt(e.substring(1),8):a==="u"||a==="x"?parseInt(e.substring(2),16):e.charCodeAt(1)}function g(e){if(e<32)return(e<16?"\\x0":"\\x")+e.toString(16);e=String.fromCharCode(e);return e==="\\"||e==="-"||e==="]"||e==="^"?"\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),e=[],a=
    +b[0]==="^",c=["["];a&&c.push("^");for(var a=a?1:0,f=b.length;a<f;++a){var h=b[a];if(/\\[bdsw]/i.test(h))c.push(h);else{var h=d(h),l;a+2<f&&"-"===b[a+1]?(l=d(b[a+2]),a+=2):l=h;e.push([h,l]);l<65||h>122||(l<65||h>90||e.push([Math.max(65,h)|32,Math.min(l,90)|32]),l<97||h>122||e.push([Math.max(97,h)&-33,Math.min(l,122)&-33]))}}e.sort(function(e,a){return e[0]-a[0]||a[1]-e[1]});b=[];f=[];for(a=0;a<e.length;++a)h=e[a],h[0]<=f[1]+1?f[1]=Math.max(f[1],h[1]):b.push(f=h);for(a=0;a<b.length;++a)h=b[a],c.push(g(h[0])),
    +h[1]>h[0]&&(h[1]+1>h[0]&&c.push("-"),c.push(g(h[1])));c.push("]");return c.join("")}function s(e){for(var a=e.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),c=a.length,d=[],f=0,h=0;f<c;++f){var l=a[f];l==="("?++h:"\\"===l.charAt(0)&&(l=+l.substring(1))&&(l<=h?d[l]=-1:a[f]=g(l))}for(f=1;f<d.length;++f)-1===d[f]&&(d[f]=++x);for(h=f=0;f<c;++f)l=a[f],l==="("?(++h,d[h]||(a[f]="(?:")):"\\"===l.charAt(0)&&(l=+l.substring(1))&&l<=h&&
    +(a[f]="\\"+d[l]);for(f=0;f<c;++f)"^"===a[f]&&"^"!==a[f+1]&&(a[f]="");if(e.ignoreCase&&m)for(f=0;f<c;++f)l=a[f],e=l.charAt(0),l.length>=2&&e==="["?a[f]=b(l):e!=="\\"&&(a[f]=l.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var x=0,m=!1,j=!1,k=0,c=a.length;k<c;++k){var i=a[k];if(i.ignoreCase)j=!0;else if(/[a-z]/i.test(i.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){m=!0;j=!1;break}}for(var r={b:8,t:9,n:10,v:11,
    +f:12,r:13},n=[],k=0,c=a.length;k<c;++k){i=a[k];if(i.global||i.multiline)throw Error(""+i);n.push("(?:"+s(i)+")")}return RegExp(n.join("|"),j?"gi":"g")}function T(a,d){function g(a){var c=a.nodeType;if(c==1){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)g(c);c=a.nodeName.toLowerCase();if("br"===c||"li"===c)s[j]="\n",m[j<<1]=x++,m[j++<<1|1]=a}}else if(c==3||c==4)c=a.nodeValue,c.length&&(c=d?c.replace(/\r\n?/g,"\n"):c.replace(/[\t\n\r ]+/g," "),s[j]=c,m[j<<1]=x,x+=c.length,m[j++<<1|1]=
    +a)}var b=/(?:^|\s)nocode(?:\s|$)/,s=[],x=0,m=[],j=0;g(a);return{a:s.join("").replace(/\n$/,""),d:m}}function H(a,d,g,b){d&&(a={a:d,e:a},g(a),b.push.apply(b,a.g))}function U(a){for(var d=void 0,g=a.firstChild;g;g=g.nextSibling)var b=g.nodeType,d=b===1?d?a:g:b===3?V.test(g.nodeValue)?a:d:d;return d===a?void 0:d}function C(a,d){function g(a){for(var j=a.e,k=[j,"pln"],c=0,i=a.a.match(s)||[],r={},n=0,e=i.length;n<e;++n){var z=i[n],w=r[z],t=void 0,f;if(typeof w==="string")f=!1;else{var h=b[z.charAt(0)];
    +if(h)t=z.match(h[1]),w=h[0];else{for(f=0;f<x;++f)if(h=d[f],t=z.match(h[1])){w=h[0];break}t||(w="pln")}if((f=w.length>=5&&"lang-"===w.substring(0,5))&&!(t&&typeof t[1]==="string"))f=!1,w="src";f||(r[z]=w)}h=c;c+=z.length;if(f){f=t[1];var l=z.indexOf(f),B=l+f.length;t[2]&&(B=z.length-t[2].length,l=B-f.length);w=w.substring(5);H(j+h,z.substring(0,l),g,k);H(j+h+l,f,I(w,f),k);H(j+h+B,z.substring(B),g,k)}else k.push(j+h,w)}a.g=k}var b={},s;(function(){for(var g=a.concat(d),j=[],k={},c=0,i=g.length;c<i;++c){var r=
    +g[c],n=r[3];if(n)for(var e=n.length;--e>=0;)b[n.charAt(e)]=r;r=r[1];n=""+r;k.hasOwnProperty(n)||(j.push(r),k[n]=q)}j.push(/[\S\s]/);s=S(j)})();var x=d.length;return g}function v(a){var d=[],g=[];a.tripleQuotedStrings?d.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?d.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
    +q,"'\"`"]):d.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&g.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),g.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,q])):d.push(["com",
    +/^#[^\n\r]*/,q,"#"]));a.cStyleComments&&(g.push(["com",/^\/\/[^\n\r]*/,q]),g.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));if(b=a.regexLiterals){var s=(b=b>1?"":"\n\r")?".":"[\\S\\s]";g.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*("+("/(?=[^/*"+b+"])(?:[^/\\x5B\\x5C"+b+"]|\\x5C"+s+"|\\x5B(?:[^\\x5C\\x5D"+b+"]|\\x5C"+
    +s+")*(?:\\x5D|$))+/")+")")])}(b=a.types)&&g.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&g.push(["kwd",RegExp("^(?:"+b.replace(/[\s,]+/g,"|")+")\\b"),q]);d.push(["pln",/^\s+/,q," \r\n\t\u00a0"]);b="^.[^\\s\\w.$@'\"`/\\\\]*";a.regexLiterals&&(b+="(?!s*/)");g.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,
    +q],["pun",RegExp(b),q]);return C(d,g)}function J(a,d,g){function b(a){var c=a.nodeType;if(c==1&&!x.test(a.className))if("br"===a.nodeName)s(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&g){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(j.createTextNode(d),a.nextSibling),s(a),c||a.parentNode.removeChild(a)}}function s(a){function b(a,c){var d=
    +c?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=b(e,1),g=a.nextSibling;e.appendChild(d);for(var i=g;i;i=g)g=i.nextSibling,e.appendChild(i)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var x=/(?:^|\s)nocode(?:\s|$)/,m=/\r\n?|\n/,j=a.ownerDocument,k=j.createElement("li");a.firstChild;)k.appendChild(a.firstChild);for(var c=[k],i=0;i<c.length;++i)b(c[i]);d===(d|0)&&c[0].setAttribute("value",d);var r=j.createElement("ol");
    +r.className="linenums";for(var d=Math.max(0,d-1|0)||0,i=0,n=c.length;i<n;++i)k=c[i],k.className="L"+(i+d)%10,k.firstChild||k.appendChild(j.createTextNode("\u00a0")),r.appendChild(k);a.appendChild(r)}function p(a,d){for(var g=d.length;--g>=0;){var b=d[g];F.hasOwnProperty(b)?D.console&&console.warn("cannot override language handler %s",b):F[b]=a}}function I(a,d){if(!a||!F.hasOwnProperty(a))a=/^\s*</.test(d)?"default-markup":"default-code";return F[a]}function K(a){var d=a.h;try{var g=T(a.c,a.i),b=g.a;
    +a.a=b;a.d=g.d;a.e=0;I(d,b)(a);var s=/\bMSIE\s(\d+)/.exec(navigator.userAgent),s=s&&+s[1]<=8,d=/\n/g,x=a.a,m=x.length,g=0,j=a.d,k=j.length,b=0,c=a.g,i=c.length,r=0;c[i]=m;var n,e;for(e=n=0;e<i;)c[e]!==c[e+2]?(c[n++]=c[e++],c[n++]=c[e++]):e+=2;i=n;for(e=n=0;e<i;){for(var p=c[e],w=c[e+1],t=e+2;t+2<=i&&c[t+1]===w;)t+=2;c[n++]=p;c[n++]=w;e=t}c.length=n;var f=a.c,h;if(f)h=f.style.display,f.style.display="none";try{for(;b<k;){var l=j[b+2]||m,B=c[r+2]||m,t=Math.min(l,B),A=j[b+1],G;if(A.nodeType!==1&&(G=x.substring(g,
    +t))){s&&(G=G.replace(d,"\r"));A.nodeValue=G;var L=A.ownerDocument,o=L.createElement("span");o.className=c[r+1];var v=A.parentNode;v.replaceChild(o,A);o.appendChild(A);g<l&&(j[b+1]=A=L.createTextNode(x.substring(t,l)),v.insertBefore(A,o.nextSibling))}g=t;g>=l&&(b+=2);g>=B&&(r+=2)}}finally{if(f)f.style.display=h}}catch(u){D.console&&console.log(u&&u.stack||u)}}var D=window,y=["break,continue,do,else,for,if,return,while"],E=[[y,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
    +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],M=[E,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],N=[E,"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],
    +O=[N,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],E=[E,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],P=[y,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
    +Q=[y,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],W=[y,"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use"],y=[y,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],R=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,
    +V=/\S/,X=v({keywords:[M,O,E,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",P,Q,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),F={};p(X,["default-code"]);p(C([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",
    +/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);p(C([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],
    +["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);p(C([],[["atv",/^[\S\s]+/]]),["uq.val"]);p(v({keywords:M,hashComments:!0,cStyleComments:!0,types:R}),["c","cc","cpp","cxx","cyc","m"]);p(v({keywords:"null,true,false"}),["json"]);p(v({keywords:O,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:R}),
    +["cs"]);p(v({keywords:N,cStyleComments:!0}),["java"]);p(v({keywords:y,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);p(v({keywords:P,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]);p(v({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]);p(v({keywords:Q,
    +hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);p(v({keywords:E,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);p(v({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);p(v({keywords:W,cStyleComments:!0,multilineStrings:!0}),["rc","rs","rust"]);
    +p(C([],[["str",/^[\S\s]+/]]),["regex"]);var Y=D.PR={createSimpleLexer:C,registerLangHandler:p,sourceDecorator:v,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:D.prettyPrintOne=function(a,d,g){var b=document.createElement("div");b.innerHTML="<pre>"+a+"</pre>";b=b.firstChild;g&&J(b,g,!0);K({h:d,j:g,c:b,i:1});
    +return b.innerHTML},prettyPrint:D.prettyPrint=function(a,d){function g(){for(var b=D.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;i<p.length&&c.now()<b;i++){for(var d=p[i],j=h,k=d;k=k.previousSibling;){var m=k.nodeType,o=(m===7||m===8)&&k.nodeValue;if(o?!/^\??prettify\b/.test(o):m!==3||/\S/.test(k.nodeValue))break;if(o){j={};o.replace(/\b(\w+)=([\w%+\-.:]+)/g,function(a,b,c){j[b]=c});break}}k=d.className;if((j!==h||e.test(k))&&!v.test(k)){m=!1;for(o=d.parentNode;o;o=o.parentNode)if(f.test(o.tagName)&&
    +o.className&&e.test(o.className)){m=!0;break}if(!m){d.className+=" prettyprinted";m=j.lang;if(!m){var m=k.match(n),y;if(!m&&(y=U(d))&&t.test(y.tagName))m=y.className.match(n);m&&(m=m[1])}if(w.test(d.tagName))o=1;else var o=d.currentStyle,u=s.defaultView,o=(o=o?o.whiteSpace:u&&u.getComputedStyle?u.getComputedStyle(d,q).getPropertyValue("white-space"):0)&&"pre"===o.substring(0,3);u=j.linenums;if(!(u=u==="true"||+u))u=(u=k.match(/\blinenums\b(?::(\d+))?/))?u[1]&&u[1].length?+u[1]:!0:!1;u&&J(d,u,o);r=
    +{h:m,c:d,j:u,i:o};K(r)}}}i<p.length?setTimeout(g,250):"function"===typeof a&&a()}for(var b=d||document.body,s=b.ownerDocument||document,b=[b.getElementsByTagName("pre"),b.getElementsByTagName("code"),b.getElementsByTagName("xmp")],p=[],m=0;m<b.length;++m)for(var j=0,k=b[m].length;j<k;++j)p.push(b[m][j]);var b=q,c=Date;c.now||(c={now:function(){return+new Date}});var i=0,r,n=/\blang(?:uage)?-([\w.]+)(?!\S)/,e=/\bprettyprint\b/,v=/\bprettyprinted\b/,w=/pre|xmp/i,t=/^code$/i,f=/^(?:pre|code|xmp)$/i,
    +h={};g()}};typeof define==="function"&&define.amd&&define("google-code-prettify",[],function(){return Y})})();}()
    diff --git a/js/widgets.js b/js/widgets.js
    deleted file mode 100644
    index e1fbce9..0000000
    --- a/js/widgets.js
    +++ /dev/null
    @@ -1,45 +0,0 @@
    -(function(e,t){function y(e){for(var t=1,n;n=arguments[t];t++)for(var r in n)e[r]=n[r];return e}function b(e){return Array.prototype.slice.call(e)}function E(e,t){for(var n=0,r;r=e[n];n++)if(t==r)return n;return-1}function S(){var e=b(arguments),t=[];for(var n=0,r=e.length;n<r;n++)e[n].length>0&&t.push(e[n].replace(/\/$/,""));return t.join("/")}function x(e,t,n){var r=t.split("/"),i=e;while(r.length>1){var s=r.shift();i=i[s]=i[s]||{}}i[r[0]]=n}function T(){}function N(e,t){this.id=this.path=e,this.force=!!t}function C(e,t){this.id=e,this.body=t,typeof t=="undefined"&&(this.path=this.resolvePath(e))}function k(e,t){this.deps=e,this.collectResults=t,this.deps.length==0&&this.complete()}function L(e,t){this.deps=e,this.collectResults=t}function A(){for(var e in r)if(r[e].readyState=="interactive")return c[r[e].id]}function O(e,t){var r;return!e&&n&&(r=l||A()),r?(delete c[r.scriptId],r.body=t,r.execute()):(f=r=new C(e,t),a[r.id]=r),r}function M(){var e=b(arguments),t,n;return typeof e[0]=="string"&&(t=e.shift()),n=e.shift(),O(t,n)}function _(e,t){var n=t.id||"",r=n.split("/");r.pop();var i=r.join("/");return e.replace(/^\./,i)}function D(e,t){function r(e){return C.exports[_(e,t)]}var n=[];for(var i=0,s=e.length;i<s;i++){if(e[i]=="require"){n.push(r);continue}if(e[i]=="exports"){t.exports=t.exports||{},n.push(t.exports);continue}n.push(r(e[i]))}return n}function P(){var e=b(arguments),t=[],n,r;return typeof e[0]=="string"&&(n=e.shift()),w(e[0])&&(t=e.shift()),r=e.shift(),O(n,function(e){function s(){var i=D(b(t),n),s;typeof r=="function"?s=r.apply(n,i):s=r,typeof s=="undefined"&&(s=n.exports),e(s)}var n=this,i=[];for(var o=0,u=t.length;o<u;o++){var a=t[o];E(["require","exports"],a)==-1&&i.push(_(a,n))}i.length>0?H.apply(this,i.concat(s)):s()})}function H(){var e=b(arguments),t,n;typeof e[e.length-1]=="function"&&(t=e.pop()),typeof e[e.length-1]=="boolean"&&(n=e.pop());var r=new k(B(e,n),n);return t&&r.then(t),r}function B(e,t){var n=[];for(var r=0,i;i=e[r];r++)typeof i=="string"&&(i=j(i)),w(i)&&(i=new L(B(i,t),t)),n.push(i);return n}function j(e){var t,n;for(var r=0,i;i=H.matchers[r];r++){var s=i[0],o=i[1];if(t=e.match(s))return o(e)}throw new Error(e+" was not recognised by loader")}function I(){return e.using=h,e.provide=p,e.define=d,e.loadrunner=v,F}function q(e){for(var t=0;t<H.bundles.length;t++)for(var n in H.bundles[t])if(n!=e&&E(H.bundles[t][n],e)>-1)return n}var n=e.attachEvent&&!e.opera,r=t.getElementsByTagName("script"),i=0,s,o=t.createElement("script"),u={},a={},f,l,c={},h=e.using,p=e.provide,d=e.define,v=e.loadrunner;for(var m=0,g;g=r[m];m++)if(g.src.match(/loadrunner\.js(\?|#|$)/)){s=g;break}var w=Array.isArray||function(e){return e.constructor==Array};T.prototype.then=function(t){var n=this;return this.started||(this.started=!0,this.start()),this.completed?t.apply(e,this.results):(this.callbacks=this.callbacks||[],this.callbacks.push(t)),this},T.prototype.start=function(){},T.prototype.complete=function(){if(!this.completed){this.results=b(arguments),this.completed=!0;if(this.callbacks)for(var t=0,n;n=this.callbacks[t];t++)n.apply(e,this.results)}},N.loaded=[],N.prototype=new T,N.prototype.start=function(){var e=this,t,n,r;return(r=a[this.id])?(r.then(function(){e.complete()}),this):((t=u[this.id])?t.then(function(){e.loaded()}):!this.force&&E(N.loaded,this.id)>-1?this.loaded():(n=q(this.id))?H(n,function(){e.loaded()}):this.load(),this)},N.prototype.load=function(){var t=this;u[this.id]=t;var n=o.cloneNode(!1);this.scriptId=n.id="LR"+ ++i,n.type="text/javascript",n.async=!0,n.onerror=function(){throw new Error(t.path+" not loaded")},n.onreadystatechange=n.onload=function(n){n=e.event||n;if(n.type=="load"||E(["loaded","complete"],this.readyState)>-1)this.onreadystatechange=null,t.loaded()},n.src=this.path,l=this,r[0].parentNode.insertBefore(n,r[0]),l=null,c[n.id]=this},N.prototype.loaded=function(){this.complete()},N.prototype.complete=function(){E(N.loaded,this.id)==-1&&N.loaded.push(this.id),delete u[this.id],T.prototype.complete.apply(this,arguments)},C.exports={},C.prototype=new N,C.prototype.resolvePath=function(e){return S(H.path,e+".js")},C.prototype.start=function(){var e,t,n=this,r;this.body?this.execute():(e=C.exports[this.id])?this.exp(e):(t=a[this.id])?t.then(function(e){n.exp(e)}):(bundle=q(this.id))?H(bundle,function(){n.start()}):(a[this.id]=this,this.load())},C.prototype.loaded=function(){var e,t,r=this;n?(t=C.exports[this.id])?this.exp(t):(e=a[this.id])&&e.then(function(e){r.exp(e)}):(e=f,f=null,e.id=e.id||this.id,e.then(function(e){r.exp(e)}))},C.prototype.complete=function(){delete a[this.id],N.prototype.complete.apply(this,arguments)},C.prototype.execute=function(){var e=this;typeof this.body=="object"?this.exp(this.body):typeof this.body=="function"&&this.body.apply(window,[function(t){e.exp(t)}])},C.prototype.exp=function(e){this.complete(this.exports=C.exports[this.id]=e||{})},k.prototype=new T,k.prototype.start=function(){function t(){var t=[];e.collectResults&&(t[0]={});for(var n=0,r;r=e.deps[n];n++){if(!r.completed)return;r.results.length>0&&(e.collectResults?r instanceof L?y(t[0],r.results[0]):x(t[0],r.id,r.results[0]):t=t.concat(r.results))}e.complete.apply(e,t)}var e=this;for(var n=0,r;r=this.deps[n];n++)r.then(t);return this},L.prototype=new T,L.prototype.start=function(){var e=this,t=0,n=[];return e.collectResults&&(n[0]={}),function r(){var i=e.deps[t++];i?i.then(function(t){i.results.length>0&&(e.collectResults?i instanceof L?y(n[0],i.results[0]):x(n[0],i.id,i.results[0]):n.push(i.results[0])),r()}):e.complete.apply(e,n)}(),this},P.amd={};var F=function(e){return e(H,M,F,define)};F.Script=N,F.Module=C,F.Collection=k,F.Sequence=L,F.Dependency=T,F.noConflict=I,e.loadrunner=F,e.using=H,e.provide=M,e.define=P,H.path="",H.matchers=[],H.matchers.add=function(e,t){this.unshift([e,t])},H.matchers.add(/(^script!|\.js$)/,function(e){var t=new N(e.replace(/^\$/,H.path.replace(/\/$/,"")+"/").replace(/^script!/,""),!1);return t.id=e,t}),H.matchers.add(/^[a-zA-Z0-9_\-\/]+$/,function(e){return new C(e)}),H.bundles=[],s&&(H.path=window.__twttrLoadRunnerPath||s.getAttribute("data-path")||s.src.split(/loadrunner\.js/)[0]||"",(main=s.getAttribute("data-main"))&&H.apply(e,main.split(/\s*,\s*/)).then(function(){}))})(this,document);window.__twttrlr = loadrunner.noConflict();__twttrlr(function(using, provide, loadrunner, define) {provide("util/util",function(e){function t(e){return e&&String(e).toLowerCase().indexOf("[native code]")>-1}function n(e){return o(arguments,function(t){s(t,function(t,n){e[t]=n})}),e}function r(e){return s(e,function(t,n){d(n)&&(r(n),v(n)&&delete e[t]),(n===undefined||n===null||n==="")&&delete e[t]}),e}function s(e,t){for(var n in e)(!e.hasOwnProperty||e.hasOwnProperty(n))&&t(n,e[n]);return e}function l(e){return{}.toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowerCase()}function c(e,t){return e==l(t)}function h(e,t,n){return n=n||[],function(){var r=a(arguments,function(e){return e});return e.apply(t,n.concat(r))}}function d(e){return e===Object(e)}function v(e){if(!d(e))return!1;if(Object.keys)return!Object.keys(e).length;for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}var i=function(){var e=Array.prototype.indexOf;return t(e)?function(t,n){return t?e.apply(t,[n]):-1}:function(e,t){if(!e)return-1;for(var n=0,r=e.length;n<r;n++)if(t==e[n])return n;return-1}}(),o=function(){var e=Array.prototype.forEach;return t(e)?function(t,n){if(!t)return;if(!n)return;e.apply(t,[n])}:function(e,t){if(!e)return;if(!t)return;for(var n=0,r=e.length;n<r;n++)t(e[n],n)}}(),u=function(){var e=Array.prototype.filter;return t(e)?function(t,n){return t?n?e.apply(t,[n]):t:null}:function(e,t){if(!e)return null;if(!t)return e;var n=[],r=0,i=e.length;for(;r<i;r++)t(e[r])&&n.push(e[r]);return n}}(),a=function(){var e=Array.prototype.map;return t(e)?function(t,n){return t?n?e.apply(t,[n]):t:null}:function(e,t){if(!e)return null;if(!t)return e;var n=[],r=0,i=e.length;for(;r<i;r++)n.push(t(e[r]));return n}}(),f=function(){var e=String.prototype.trim;return t(e)?function(t){return t&&e.apply(t)}:function(e){return e&&e.replace(/(^\s+|\s+$)/g,"")}}(),p=t(Object.create)?Object.create:function(e){function t(){}return t.prototype=e,new t};e({aug:n,compact:r,forIn:s,forEach:o,filter:u,map:a,trim:f,indexOf:i,isNative:t,isObject:d,isEmptyObject:v,createObject:p,bind:h,toType:l,isType:c})});
    -provide("util/events",function(e){using("util/util",function(t){function r(){this.completed=!1,this.callbacks=[]}var n={bind:function(e,t){return this._handlers=this._handlers||{},this._handlers[e]=this._handlers[e]||[],this._handlers[e].push(t)},unbind:function(e,n){if(!this._handlers[e])return;if(n){var r=t.indexOf(this._handlers[e],n);r>=0&&this._handlers[e].splice(r,1)}else this._handlers[e]=[]},trigger:function(e,t){var n=this._handlers&&this._handlers[e];t.type=e;if(n)for(var r=0,i;i=n[r];r++)i.call(this,t)}};r.prototype.addCallback=function(e){this.completed?e.apply(this,this.results):this.callbacks.push(e)},r.prototype.complete=function(){this.results=makeArray(arguments),this.completed=!0;for(var e=0,t;t=this.callbacks[e];e++)t.apply(this,this.results)},e({Emitter:n,Promise:r})})});
    -provide("$xd/json2.js", function(exports) {window.JSON||(window.JSON={}),function(){function f(e){return e<10?"0"+e:e}function quote(e){return escapable.lastIndex=0,escapable.test(e)?'"'+e.replace(escapable,function(e){var t=meta[e];return typeof t=="string"?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var n,r,i,s,o=gap,u,a=t[e];a&&typeof a=="object"&&typeof a.toJSON=="function"&&(a=a.toJSON(e)),typeof rep=="function"&&(a=rep.call(t,e,a));switch(typeof a){case"string":return quote(a);case"number":return isFinite(a)?String(a):"null";case"boolean":case"null":return String(a);case"object":if(!a)return"null";gap+=indent,u=[];if(Object.prototype.toString.apply(a)==="[object Array]"){s=a.length;for(n=0;n<s;n+=1)u[n]=str(n,a)||"null";return i=u.length===0?"[]":gap?"[\n"+gap+u.join(",\n"+gap)+"\n"+o+"]":"["+u.join(",")+"]",gap=o,i}if(rep&&typeof rep=="object"){s=rep.length;for(n=0;n<s;n+=1)r=rep[n],typeof r=="string"&&(i=str(r,a),i&&u.push(quote(r)+(gap?": ":":")+i))}else for(r in a)Object.hasOwnProperty.call(a,r)&&(i=str(r,a),i&&u.push(quote(r)+(gap?": ":":")+i));return i=u.length===0?"{}":gap?"{\n"+gap+u.join(",\n"+gap)+"\n"+o+"}":"{"+u.join(",")+"}",gap=o,i}}typeof Date.prototype.toJSON!="function"&&(Date.prototype.toJSON=function(e){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(e){return this.valueOf()});var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","	":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;typeof JSON.stringify!="function"&&(JSON.stringify=function(e,t,n){var r;gap="",indent="";if(typeof n=="number")for(r=0;r<n;r+=1)indent+=" ";else typeof n=="string"&&(indent=n);rep=t;if(!t||typeof t=="function"||typeof t=="object"&&typeof t.length=="number")return str("",{"":e});throw new Error("JSON.stringify")}),typeof JSON.parse!="function"&&(JSON.parse=function(text,reviver){function walk(e,t){var n,r,i=e[t];if(i&&typeof i=="object")for(n in i)Object.hasOwnProperty.call(i,n)&&(r=walk(i,n),r!==undefined?i[n]=r:delete i[n]);return reviver.call(e,t,i)}var j;cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),typeof reviver=="function"?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}();exports();loadrunner.Script.loaded.push("$xd/json2.js")});
    -provide("util/querystring",function(e){function t(e){return encodeURIComponent(e).replace(/\+/g,"%2B")}function n(e){return decodeURIComponent(e)}function r(e){var n=[],r;for(r in e)e[r]!==null&&typeof e[r]!="undefined"&&n.push(t(r)+"="+t(e[r]));return n.sort().join("&")}function i(e){var t={},r,i,s,o;if(e){r=e.split("&");for(o=0;s=r[o];o++)i=s.split("="),i.length==2&&(t[n(i[0])]=n(i[1]))}return t}function s(e,t){var n=r(t);return n.length>0?e.indexOf("?")>=0?e+"&"+r(t):e+"?"+r(t):e}function o(e){var t=e&&e.split("?");return t.length==2?i(t[1]):{}}e({url:s,decodeURL:o,decode:i,encode:r,encodePart:t,decodePart:n})});
    -provide("util/twitter",function(e){using("util/querystring",function(t){function o(e){return typeof e=="string"&&n.test(e)&&RegExp.$1.length<=20}function u(e){if(o(e))return RegExp.$1}function a(e){var n=t.decodeURL(e);n.screen_name=u(e);if(n.screen_name)return t.url("https://twitter.com/intent/user",n)}function f(e){return typeof e=="string"&&s.test(e)}function l(e,t){t=t===undefined?!0:t;if(f(e))return(t?"#":"")+RegExp.$1}function c(e){return typeof e=="string"&&r.test(e)}function h(e){return c(e)&&RegExp.$1}function p(e){return i.test(e)}var n=/(?:^|(?:https?\:)?\/\/(?:www\.)?twitter\.com(?:\:\d+)?(?:\/intent\/(?:follow|user)\/?\?screen_name=|(?:\/#!)?\/))@?([\w]+)(?:\?|&|$)/i,r=/(?:^|(?:https?\:)?\/\/(?:www\.)?twitter\.com(?:\:\d+)?\/(?:#!\/)?[\w_]+\/status(?:es)?\/)(\d+)/i,i=/^http(s?):\/\/((www\.)?)twitter\.com\//,s=/^#?([^.,<>!\s\/#\-\(\)\'\"]+)$/;e({isHashTag:f,hashTag:l,isScreenName:o,screenName:u,isStatus:c,status:h,intentForProfileURL:a,isTwitterURL:p,regexen:{profile:n}})})});
    -provide("util/uri",function(e){using("util/querystring","util/util","util/twitter",function(t,n,r){function i(e,t){var n,r;return t=t||location,/^https?:\/\//.test(e)?e:/^\/\//.test(e)?t.protocol+e:(n=t.host+(t.port.length?":"+t.port:""),e.indexOf("/")!==0&&(r=t.pathname.split("/"),r.pop(),r.push(e),e="/"+r.join("/")),[t.protocol,"//",n,e].join(""))}function s(){var e=document.getElementsByTagName("link"),t=0,n;for(;n=e[t];t++)if(n.rel=="canonical")return i(n.href)}function o(){var e=document.getElementsByTagName("a"),t=document.getElementsByTagName("link"),n=[e,t],i,s,o=0,u=0,a=/\bme\b/,f;for(;i=n[o];o++)for(u=0;s=i[u];u++)if(a.test(s.rel)&&(f=r.screenName(s.href)))return f}e({absolutize:i,getCanonicalURL:s,getScreenNameFromPage:o})})});
    -provide("util/typevalidator",function(e){using("util/util",function(t){function n(e){return e!==undefined&&e!==null&&e!==""}function r(e){return s(e)&&e%1===0}function i(e){return s(e)&&!r(e)}function s(e){return n(e)&&!isNaN(e)}function o(e){return n(e)&&t.toType(e)=="array"}function u(e){if(!n(e))return!1;switch(e){case"on":case"ON":case"true":case"TRUE":return!0;case"off":case"OFF":case"false":case"FALSE":return!1;default:return!!e}}function a(e){if(s(e))return e}function f(e){if(i(e))return e}function l(e){if(r(e))return e}e({hasValue:n,isInt:r,isFloat:i,isNumber:s,isArray:o,asInt:l,asFloat:f,asNumber:a,asBoolean:u})})});
    -provide("tfw/util/globals",function(e){using("util/typevalidator",function(t){function r(){var e=document.getElementsByTagName("meta"),t,r,i=0;n={};for(;t=e[i];i++){if(!/^twitter:/.test(t.name))continue;r=t.name.replace(/^twitter:/,""),n[r]=t.content}}function i(e){return n[e]}function s(e){return t.asBoolean(e)&&(n.dnt=!0),t.asBoolean(n.dnt)}var n;r(),e({init:r,val:i,dnt:s})})});
    -provide("util/logger",function(e){function n(e,n,r,i,s){window[t]&&window[t].log&&window[t].log(e,n,r,i,s)}function r(e,n,r,i,s){window[t]&&window[t].warn&&window[t].warn(e,n,r,i,s)}function i(e,n,r,i,s){window[t]&&window[t].error&&window[t].error(e,n,r,i,s)}var t=["con","sole"].join("");e({info:n,warn:r,error:i})});
    -provide("util/domready",function(e){function l(){t=1;for(var e=0,r=n.length;e<r;e++)n[e]()}var t=0,n=[],r,i,s=!1,o=document.createElement("a"),u="DOMContentLoaded",a="addEventListener",f="onreadystatechange";/^loade|c/.test(document.readyState)&&(t=1),document[a]&&document[a](u,i=function(){document.removeEventListener(u,i,s),l()},s),o.doScroll&&document.attachEvent(f,r=function(){/^c/.test(document.readyState)&&(document.detachEvent(f,r),l())});var c=o.doScroll?function(e){self!=top?t?e():n.push(e):!function(){try{o.doScroll("left")}catch(t){return setTimeout(function(){c(e)},50)}e()}()}:function(e){t?e():n.push(e)};e(c)});
    -provide("util/env",function(e){using("util/domready","util/typevalidator","util/logger","tfw/util/globals",function(t,n,r,i){function f(){return window.devicePixelRatio?window.devicePixelRatio>=1.5:window.matchMedia?window.matchMedia("only screen and (min-resolution: 144dpi)").matches:!1}function l(){return/MSIE \d/.test(s)}function c(){return/MSIE 6/.test(s)}function h(){return/MSIE 7/.test(s)}function p(){return/MSIE 9/.test(s)}function d(){return o}function v(){return"ontouchstart"in window||/Opera Mini/.test(s)||navigator.msMaxTouchPoints>0}function m(){var e=document.body.style;return e.transition!==undefined||e.webkitTransition!==undefined||e.mozTransition!==undefined||e.oTransition!==undefined||e.msTransition!==undefined}var s=window.navigator.userAgent,o=!1,u=!1,a="twitter-csp-test";window.twttr=window.twttr||{},twttr.verifyCSP=function(e){var t=document.getElementById(a);u=!0,o=!!e,t&&t.parentNode.removeChild(t)},t(function(){var e;if(c()||h())return o=!1;if(n.asBoolean(i.val("widgets:csp")))return o=!0;e=document.createElement("script"),e.id=a,e.text="twttr.verifyCSP(false);",document.body.appendChild(e),window.setTimeout(function(){if(u)return;r.warn('TWITTER: Content Security Policy restrictions may be applied to your site. Add <meta name="twitter:widgets:csp" content="on"> to supress this warning.'),r.warn("TWITTER: Please note: Not all embedded timeline and embedded Tweet functionality is supported when CSP is applied.")},5e3)}),e({retina:f,anyIE:l,ie6:c,ie7:h,ie9:p,cspEnabled:d,touch:v,cssTransitions:m})})});
    -provide("dom/delegate",function(e){using("util/env",function(t){function i(e){var t=e.getAttribute("data-twitter-event-id");return t?t:(e.setAttribute("data-twitter-event-id",++r),r)}function s(e,t,n){var r=0,i=e&&e.length||0;for(r=0;r<i;r++)e[r].call(t,n)}function o(e,t,n){var r=n||e.target||e.srcElement,i=r.className.split(" "),u=0,a,f=i.length;for(;u<f;u++)s(t["."+i[u]],r,e);s(t[r.tagName],r,e);if(e.cease)return;r!==this&&o.call(this,e,t,r.parentElement||r.parentNode)}function u(e,t,n){if(e.addEventListener){e.addEventListener(t,function(r){o.call(e,r,n[t])},!1);return}e.attachEvent&&e.attachEvent("on"+t,function(){o.call(e,e.ownerDocument.parentWindow.event,n[t])})}function a(e,t,r,s){var o=i(e);n[o]=n[o]||{},n[o][t]||(n[o][t]={},u(e,t,n[o])),n[o][t][r]=n[o][t][r]||[],n[o][t][r].push(s)}function f(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,function(){n(window.event)})}function l(e,t,r){var s=i(t),u=n[s]&&n[s];o.call(t,{target:r},u[e])}function c(e){return p(e),h(e),!1}function h(e){e&&e.preventDefault?e.preventDefault():e.returnValue=!1}function p(e){e&&(e.cease=!0)&&e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}var n={},r=-1;e({stop:c,stopPropagation:p,preventDefault:h,delegate:a,on:f,simulate:l})})});
    -provide("tfw/util/article",function(e){using("dom/delegate","tfw/util/globals","util/uri","$xd/json2.js",function(t,n,r){function o(){i=r.getCanonicalURL()||""+document.location;if(!window.top.postMessage)return;if(window==window.top){t.on(window,"message",function(e){var t;if(e.data&&e.data[0]!="{")return;try{t=JSON.parse(e.data)}catch(r){}t&&t.name=="twttr:private:requestArticleUrl"&&e.source.postMessage(JSON.stringify({name:"twttr:private:provideArticleUrl",data:{url:i,dnt:n.dnt()}}),"*")});return}t.on(window,"message",function(e){var t;if(e.data&&e.data[0]!="{")return;try{t=JSON.parse(e.data)}catch(r){}t&&t.name=="twttr:private:provideArticleUrl"&&(i=t.data&&t.data.url,n.dnt(t.data.dnt),s=document.location.href)}),window.top.postMessage(JSON.stringify({name:"twttr:private:requestArticleUrl"}),"*")}var i,s="";o(),e({url:function(){return i},frameUrl:function(){return s}})})});
    -provide("util/promise",function(e){using("util/util",function(t){var n=function(e,t){setTimeout(function(){e.call(t)},1)},r=function(e){try{var t=e.then;if(typeof t=="function")return!0}catch(n){}return!1},i=function(e){Error.call(this,e)};i.prototype=t.createObject(Error.prototype);var s=function(){var e=[];return e.pump=function(t){n(function(){var n=e.length,r=0;while(r<n)r++,e.shift()(t)})},e},o=function(e,t,i,s,o,u){var a=!1,f=this,l=function(e){n(function(){u("fulfilled"),s(e),t.pump(e)})},c=function(e){n(function(){u("rejected"),o(e),i.pump(e)})},h=function(e){if(r(e)){e.then(h,c);return}l(e)},p=function(e,t){return function(t){a||(a=!0,e(t))}};this.resolve=p(h,"resolve"),this.fulfill=p(l,"fulfill"),this.reject=p(c,"reject"),this.cancel=function(){f.reject(new Error("Cancel"))},this.timeout=function(){f.reject(new Error("Timeout"))},u("pending")},u=function(e){var t=new s,n=new s,r,i,u="pending";this._addAcceptCallback=function(e){t.push(e),u=="fulfilled"&&t.pump(r)},this._addRejectCallback=function(e){n.push(e),u=="rejected"&&n.pump(i)};var a=new o(this,t,n,function(e){r=e},function(e){i=e},function(e){u=e});try{e&&e(a)}catch(f){a.reject(f)}},a=function(e){return typeof e=="function"},f=function(e,n,r){return a(e)?function(){try{var t=e.apply(null,arguments);n.resolve(t)}catch(r){n.reject(r)}}:t.bind(n[r],n)},l=function(e,t,n){return a(e)&&n._addAcceptCallback(e),a(t)&&n._addRejectCallback(t),n};t.aug(u.prototype,{then:function(e,t){var n=this;return new u(function(r){l(f(e,r,"resolve"),f(t,r,"reject"),n)})},"catch":function(e){var t=this;return new u(function(n){l(null,f(e,n,"reject"),t)})}}),u.isThenable=r;var c=function(e){return t.map(e,u.resolve)};u.any=function(){var e=c(arguments);return new u(function(n){if(!e.length)n.reject("No futures passed to Promise.any()");else{var r=!1,i=function(e){if(r)return;r=!0,n.resolve(e)},s=function(e){if(r)return;r=!0,n.reject(e)};t.forEach(e,function(e,t){e.then(i,s)})}})},u.every=function(){var e=c(arguments);return new u(function(n){if(!e.length)n.reject("No futures passed to Promise.every()");else{var r=new Array(e.length),i=0,s=function(t,s){i++,r[t]=s,i==e.length&&n.resolve(r)};t.forEach(e,function(e,r){e.then(t.bind(s,null,[r]),n.reject)})}})},u.some=function(){var e=c(arguments);return new u(function(n){if(!e.length)n.reject("No futures passed to Promise.some()");else{var r=0,i=function(t){r++,r==e.length&&n.reject()};t.forEach(e,function(e,t){e.then(n.resolve,i)})}})},u.fulfill=function(e){return new u(function(t){t.fulfill(e)})},u.resolve=function(e){return new u(function(t){t.resolve(e)})},u.reject=function(e){return new u(function(t){t.reject(e)})},e(u)})});
    -provide("util/layout",function(e){using("util/promise","util/logger",function(t,n){function s(){}var r=[],i;s.prototype.enqueue=function(e,n){return new t(function(t){r.push({action:e,resolver:t,note:n})})},s.prototype.exec=function(){var e=r,t;if(!e.length)return;r=[];while(e.length)t=e.shift(),t&&t.action?t.resolver.fulfill(t.action()):t.resolver.reject()},s.prototype.delayedExec=function(){i&&window.clearTimeout(i),i=window.setTimeout(this.exec,100)},e(s)})});
    -provide("util/iframe",function(e){using("util/util",function(t){e(function(e,n,r){var i;r=r||document,e=e||{},n=n||{};if(e.name){try{i=r.createElement('<iframe name="'+e.name+'"></iframe>')}catch(s){i=r.createElement("iframe"),i.name=e.name}delete e.name}else i=r.createElement("iframe");return e.id&&(i.id=e.id,delete e.id),i.allowtransparency="true",i.scrolling="no",i.setAttribute("frameBorder",0),i.setAttribute("allowTransparency",!0),t.forIn(e,function(e,t){i.setAttribute(e,t)}),t.forIn(n,function(e,t){i.style[e]=t}),i})})});
    -provide("dom/get",function(e){using("util/util",function(t){function r(e,t,r){return n(e,t,r,1)[0]}function i(e,n,r){var s=n&&n.parentNode,o;if(!s||s===r)return;return s.tagName==e?s:(o=s.className.split(" "),0===e.indexOf(".")&&~t.indexOf(o,e.slice(1))?s:i(e,s,r))}var n=function(){var e=document.getElementsByClassName;return t.isNative(e)?function(n,r,i,s){var o=r?r.getElementsByClassName(n):e.call(document,n),u=t.filter(o,function(e){return!i||e.tagName.toLowerCase()==i.toLowerCase()});return[].slice.call(u,0,s||u.length)}:function(e,n,r,i){var s,o,u=[],a,f,l,c,h,p;n=n||document,a=e.split(" "),c=a.length,s=n.getElementsByTagName(r||"*"),p=s.length;for(l=0;l<c&&p>0;l++){u=[],f=a[l];for(h=0;h<p;h++){o=s[h],~t.indexOf(o.className.split(" "),f)&&u.push(o);if(l+1==c&&u.length===i)break}s=u,p=s.length}return u}}();e({all:n,one:r,ancestor:i})})});
    -provide("tfw/widget/base",function(e){using("dom/get","util/domready","util/iframe","util/layout","util/promise","util/querystring","util/typevalidator","util/util","tfw/util/globals",function(t,n,r,i,s,o,u,a,f){function g(e){var t;if(!e)return;e.ownerDocument?(this.srcEl=e,this.classAttr=e.className.split(" ")):(this.srcOb=e,this.classAttr=[]),t=this.params(),this.id=this.generateId(),this.setLanguage(),this.related=t.related||this.dataAttr("related"),this.partner=t.partner||this.dataAttr("partner")||f.val("partner"),this.dnt=t.dnt||this.dataAttr("dnt")||f.dnt()||"",this.styleAttr=[],this.targetEl=e.targetEl}function y(){a.forEach(p,function(e){e()}),g.doLayout()}function b(e){if(!e)return;return e.lang?e.lang:b(e.parentNode)}var l=0,c,h={list:[],byId:{}},p=[],d=new i,v="data-twttr-rendered",m={ar:{"%{followers_count} followers":"عدد المتابعين %{followers_count}","100K+":"+100 ألف","10k unit":"10 آلاف وحدة",Follow:"تابِع","Follow %{screen_name}":"تابِع %{screen_name}",K:"ألف",M:"مليون",Tweet:"غرِّد","Tweet %{hashtag}":"غرِّد %{hashtag}","Tweet to %{name}":"غرِّد لـ %{name}"},da:{"%{followers_count} followers":"%{followers_count} følgere","10k unit":"10k enhed",Follow:"Følg","Follow %{screen_name}":"Følg %{screen_name}","Tweet to %{name}":"Tweet til %{name}"},de:{"%{followers_count} followers":"%{followers_count} Follower","100K+":"100Tsd+","10k unit":"10tsd-Einheit",Follow:"Folgen","Follow %{screen_name}":"%{screen_name} folgen",K:"Tsd",Tweet:"Twittern","Tweet to %{name}":"Tweet an %{name}"},es:{"%{followers_count} followers":"%{followers_count} seguidores","10k unit":"10k unidad",Follow:"Seguir","Follow %{screen_name}":"Seguir a %{screen_name}",Tweet:"Twittear","Tweet %{hashtag}":"Twittear %{hashtag}","Tweet to %{name}":"Twittear a %{name}"},fa:{"%{followers_count} followers":"%{followers_count} دنبال‌کننده","100K+":">۱۰۰هزار","10k unit":"۱۰هزار واحد",Follow:"دنبال کردن","Follow %{screen_name}":"دنبال کردن %{screen_name}",K:"هزار",M:"میلیون",Tweet:"توییت","Tweet %{hashtag}":"توییت کردن %{hashtag}","Tweet to %{name}":"به %{name} توییت کنید"},fi:{"%{followers_count} followers":"%{followers_count} seuraajaa","100K+":"100 000+","10k unit":"10 000 yksikköä",Follow:"Seuraa","Follow %{screen_name}":"Seuraa käyttäjää %{screen_name}",K:"tuhatta",M:"milj.",Tweet:"Twiittaa","Tweet %{hashtag}":"Twiittaa %{hashtag}","Tweet to %{name}":"Twiittaa käyttäjälle %{name}"},fil:{"%{followers_count} followers":"%{followers_count} mga tagasunod","10k unit":"10k yunit",Follow:"Sundan","Follow %{screen_name}":"Sundan si %{screen_name}",Tweet:"I-tweet","Tweet %{hashtag}":"I-tweet ang %{hashtag}","Tweet to %{name}":"Mag-Tweet kay %{name}"},fr:{"%{followers_count} followers":"%{followers_count} abonnés","10k unit":"unité de 10k",Follow:"Suivre","Follow %{screen_name}":"Suivre %{screen_name}",Tweet:"Tweeter","Tweet %{hashtag}":"Tweeter %{hashtag}","Tweet to %{name}":"Tweeter à %{name}"},he:{"%{followers_count} followers":"%{followers_count} עוקבים","100K+":"מאות אלפים","10k unit":"עשרות אלפים",Follow:"מעקב","Follow %{screen_name}":"לעקוב אחר %{screen_name}",K:"אלף",M:"מיליון",Tweet:"ציוץ","Tweet %{hashtag}":"צייצו %{hashtag}","Tweet to %{name}":"ציוץ אל %{name}"},hi:{"%{followers_count} followers":"%{followers_count} फ़ॉलोअर्स","100K+":"1 लाख+","10k unit":"10 हजार इकाईयां",Follow:"फ़ॉलो","Follow %{screen_name}":"%{screen_name} को फ़ॉलो करें",K:"हजार",M:"मिलियन",Tweet:"ट्वीट","Tweet %{hashtag}":"ट्वीट %{hashtag}","Tweet to %{name}":"%{name} को ट्वीट करें"},hu:{"%{followers_count} followers":"%{followers_count} követő","100K+":"100E+","10k unit":"10E+",Follow:"Követés","Follow %{screen_name}":"%{screen_name} követése",K:"E","Tweet %{hashtag}":"%{hashtag} tweetelése","Tweet to %{name}":"Tweet küldése neki: %{name}"},id:{"%{followers_count} followers":"%{followers_count} pengikut","100K+":"100 ribu+","10k unit":"10 ribu unit",Follow:"Ikuti","Follow %{screen_name}":"Ikuti %{screen_name}",K:"&nbsp;ribu",M:"&nbsp;juta","Tweet to %{name}":"Tweet ke %{name}"},it:{"%{followers_count} followers":"%{followers_count} follower","10k unit":"10k unità",Follow:"Segui","Follow %{screen_name}":"Segui %{screen_name}","Tweet %{hashtag}":"Twitta %{hashtag}","Tweet to %{name}":"Twitta a %{name}"},ja:{"%{followers_count} followers":"%{followers_count}人のフォロワー","100K+":"100K以上","10k unit":"万",Follow:"フォローする","Follow %{screen_name}":"%{screen_name}さんをフォロー",Tweet:"ツイート","Tweet %{hashtag}":"%{hashtag} をツイートする","Tweet to %{name}":"%{name}さんへツイートする"},ko:{"%{followers_count} followers":"%{followers_count}명의 팔로워","100K+":"100만 이상","10k unit":"만 단위",Follow:"팔로우","Follow %{screen_name}":"%{screen_name} 님 팔로우하기",K:"천",M:"백만",Tweet:"트윗","Tweet %{hashtag}":"%{hashtag} 관련 트윗하기","Tweet to %{name}":"%{name}님에게 트윗하기"},msa:{"%{followers_count} followers":"%{followers_count} pengikut","100K+":"100 ribu+","10k unit":"10 ribu unit",Follow:"Ikut","Follow %{screen_name}":"Ikut %{screen_name}",K:"ribu",M:"juta","Tweet to %{name}":"Tweet kepada %{name}"},nl:{"%{followers_count} followers":"%{followers_count} volgers","100K+":"100k+","10k unit":"10k-eenheid",Follow:"Volgen","Follow %{screen_name}":"%{screen_name} volgen",K:"k",M:" mln.",Tweet:"Tweeten","Tweet %{hashtag}":"%{hashtag} tweeten","Tweet to %{name}":"Tweeten naar %{name}"},no:{"%{followers_count} followers":"%{followers_count} følgere","100K+":"100 K+","10k unit":"10-K-enhet",Follow:"Følg","Follow %{screen_name}":"Følg %{screen_name}","Tweet to %{name}":"Send en tweet til %{name}"},pl:{"%{followers_count} followers":"%{followers_count} obserwujących","100K+":"100 tys.+","10k unit":"10 tys.",Follow:"Obserwuj","Follow %{screen_name}":"Obserwuj %{screen_name}",K:"tys.",M:"mln",Tweet:"Tweetnij","Tweet %{hashtag}":"Tweetnij %{hashtag}","Tweet to %{name}":"Tweetnij do %{name}"},pt:{"%{followers_count} followers":"%{followers_count} seguidores","100K+":"+100 mil","10k unit":"10 mil unidades",Follow:"Seguir","Follow %{screen_name}":"Seguir %{screen_name}",K:"Mil",Tweet:"Tweetar","Tweet %{hashtag}":"Tweetar %{hashtag}","Tweet to %{name}":"Tweetar para %{name}"},ru:{"%{followers_count} followers":"Читатели: %{followers_count} ","100K+":"100 тыс.+","10k unit":"блок 10k",Follow:"Читать","Follow %{screen_name}":"Читать %{screen_name}",K:"тыс.",M:"млн.",Tweet:"Твитнуть","Tweet %{hashtag}":"Твитнуть %{hashtag}","Tweet to %{name}":"Твитнуть %{name}"},sv:{"%{followers_count} followers":"%{followers_count} följare","10k unit":"10k",Follow:"Följ","Follow %{screen_name}":"Följ %{screen_name}",Tweet:"Tweeta","Tweet %{hashtag}":"Tweeta %{hashtag}","Tweet to %{name}":"Tweeta till %{name}"},th:{"%{followers_count} followers":"%{followers_count} ผู้ติดตาม","100K+":"100พัน+","10k unit":"หน่วย 10พัน",Follow:"ติดตาม","Follow %{screen_name}":"ติดตาม %{screen_name}",K:"พัน",M:"ล้าน",Tweet:"ทวีต","Tweet %{hashtag}":"ทวีต %{hashtag}","Tweet to %{name}":"ทวีตถึง %{name}"},tr:{"%{followers_count} followers":"%{followers_count} takipçi","100K+":"+100 bin","10k unit":"10 bin birim",Follow:"Takip et","Follow %{screen_name}":"Takip et: %{screen_name}",K:"bin",M:"milyon",Tweet:"Tweetle","Tweet %{hashtag}":"Tweetle: %{hashtag}","Tweet to %{name}":"Tweetle: %{name}"},ur:{"%{followers_count} followers":"%{followers_count} فالورز","100K+":"ایک لاکھ سے زیادہ","10k unit":"دس ہزار یونٹ",Follow:"فالو کریں","Follow %{screen_name}":"%{screen_name} کو فالو کریں",K:"ہزار",M:"ملین",Tweet:"ٹویٹ کریں","Tweet %{hashtag}":"%{hashtag} ٹویٹ کریں","Tweet to %{name}":"%{name} کو ٹویٹ کریں"},"zh-cn":{"%{followers_count} followers":"%{followers_count} 关注者","100K+":"10万+","10k unit":"1万单元",Follow:"关注","Follow %{screen_name}":"关注 %{screen_name}",K:"千",M:"百万",Tweet:"发推","Tweet %{hashtag}":"以 %{hashtag} 发推","Tweet to %{name}":"发推给 %{name}"},"zh-tw":{"%{followers_count} followers":"%{followers_count} 位跟隨者","100K+":"超過十萬","10k unit":"1萬 單位",Follow:"跟隨","Follow %{screen_name}":"跟隨 %{screen_name}",K:"千",M:"百萬",Tweet:"推文","Tweet %{hashtag}":"推文%{hashtag}","Tweet to %{name}":"推文給%{name}"}};a.aug(g.prototype,{setLanguage:function(e){var t;e||(e=this.params().lang||this.dataAttr("lang")||b(this.srcEl)),e=e&&e.toLowerCase();if(!e)return this.lang="en";if(m[e])return this.lang=e;t=e.replace(/[\-_].*/,"");if(m[t])return this.lang=t;this.lang="en"},_:function(e,t){var n=this.lang;t=t||{};if(!n||!m.hasOwnProperty(n))n=this.lang="en";return e=m[n]&&m[n][e]||e,this.ringo(e,t,/%\{([\w_]+)\}/g)},ringo:function(e,t,n){return n=n||/\{\{([\w_]+)\}\}/g,e.replace(n,function(e,n){return t[n]!==undefined?t[n]:e})},add:function(e){h.list.push(this),h.byId[this.id]=e},create:function(e,t,n){var i=this,o;return n[v]=!0,o=r(a.aug({id:this.id,src:e,"class":this.classAttr.join(" ")},n),t,this.targetEl&&this.targetEl.ownerDocument),this.srcEl?this.layout(function(){return i.srcEl.parentNode.replaceChild(o,i.srcEl),o}):this.targetEl?this.layout(function(){return i.targetEl.appendChild(o),o}):s.reject("Did not append widget")},params:function(){var e,t;return this.srcOb?t=this.srcOb:(e=this.srcEl&&this.srcEl.href&&this.srcEl.href.split("?")[1],t=e?o.decode(e):{}),this.params=function(){return t},t},dataAttr:function(e){return this.srcEl&&this.srcEl.getAttribute("data-"+e)},attr:function(e){return this.srcEl&&this.srcEl.getAttribute(e)},layout:function(e){return d.enqueue(e)},styles:{base:[["font","normal normal normal 11px/18px 'Helvetica Neue', Arial, sans-serif"],["margin","0"],["padding","0"],["whiteSpace","nowrap"]],button:[["fontWeight","bold"],["textShadow","0 1px 0 rgba(255,255,255,.5)"]],large:[["fontSize","13px"],["lineHeight","26px"]],vbubble:[["fontSize","16px"]]},width:function(){throw new Error(name+" not implemented")},height:function(){return this.size=="m"?20:28},minWidth:function(){},maxWidth:function(){},minHeight:function(){},maxHeight:function(){},dimensions:function(){function e(e){switch(typeof e){case"string":return e;case"undefined":return;default:return e+"px"}}var t={width:this.width(),height:this.height()};return this.minWidth()&&(t["min-width"]=this.minWidth()),this.maxWidth()&&(t["max-width"]=this.maxWidth()),this.minHeight()&&(t["min-height"]=this.minHeight()),this.maxHeight()&&(t["max-height"]=this.maxHeight()),a.forIn(t,function(n,r){t[n]=e(r)}),t},generateId:function(){return this.srcEl&&this.srcEl.id||"twitter-widget-"+l++}}),g.afterLoad=function(e){p.push(e)},g.doLayout=function(){d.exec()},g.doLayoutAsync=function(){d.delayedExec()},g.init=function(e){c=e},g.find=function(e){return e&&h.byId[e]?h.byId[e].element:null},g.embed=function(e){function o(e){var t=e.element&&e.element()||e;if(e!==document.body)return t}var n=c.widgets,r=[],i=[];u.isArray(e)||(e=[e||document]),a.forEach(e,function(e){a.forIn(n,function(n,i){var s,o;n.match(/\./)?(s=n.split("."),o=t.all(s[1],e,s[0])):o=e.getElementsByTagName(n),a.forEach(o,function(e){if(e.getAttribute(v))return;e.setAttribute(v,"true"),r.push(new i(e))})})}),g.doLayout(),a.forEach(r,function(e){var t;h.byId[e.id]=e,h.list.push(e),t=e.render(c),e.rendered&&(t=e.rendered()),i.push(t),t.then(function(e){var t=o(e);t&&twttr.events.trigger("rendered",{target:t})})}),s.every.apply(null,i).then(function(e){var t=a.map(Array.prototype.slice.call(e),o);t=a.filter(t,function(t){return t}),t.length&&twttr.events.trigger("loaded",{widgets:t})}),g.doLayoutAsync(),y()},window.setInterval(function(){g.doLayout()},500),e(g)})});
    -provide("tfw/widget/intent",function(e){using("tfw/widget/base","util/util","util/querystring","util/uri","util/promise",function(t,n,r,i,s){function p(e){var t=Math.round(c/2-a/2),n=0;l>f&&(n=Math.round(l/2-f/2)),window.open(e,undefined,[u,"width="+a,"height="+f,"left="+t,"top="+n].join(","))}function d(e,t){using("tfw/hub/client",function(n){n.openIntent(e,t)})}function v(e){var t="original_referer="+location.href;return[e,t].join(e.indexOf("?")==-1?"?":"&")}function m(e){var t,r,i,s;e=e||window.event,t=e.target||e.srcElement;if(e.altKey||e.metaKey||e.shiftKey)return;while(t){if(~n.indexOf(["A","AREA"],t.nodeName))break;t=t.parentNode}t&&t.href&&(r=t.href.match(o),r&&(s=v(t.href),s=s.replace(/^http[:]/,"https:"),s=s.replace(/^\/\//,"https://"),g(s,t),e.returnValue=!1,e.preventDefault&&e.preventDefault()))}function g(e,t){if(twttr.events.hub&&t){var n=new y(h.generateId(),t);h.add(n),d(e,t),twttr.events.trigger("click",{target:t,region:"intent",type:"click",data:{}})}else p(e)}function y(e,t){this.id=e,this.element=this.srcEl=t}function b(e){this.srcEl=[],this.element=e}var o=/twitter\.com(\:\d{2,4})?\/intent\/(\w+)/,u="scrollbars=yes,resizable=yes,toolbar=no,location=yes",a=550,f=520,l=screen.height,c=screen.width,h;b.prototype=new t,n.aug(b.prototype,{render:function(e){return h=this,window.__twitterIntentHandler||(document.addEventListener?document.addEventListener("click",m,!1):document.attachEvent&&document.attachEvent("onclick",m),window.__twitterIntentHandler=!0),s.fulfill(document.body)}}),b.open=g,e(b)})});
    -provide("dom/classname",function(e){function t(e){return new RegExp("\\b"+e+"\\b","g")}function n(e,n){if(e.classList){e.classList.add(n);return}t(n).test(e.className)||(e.className+=" "+n)}function r(e,n){if(e.classList){e.classList.remove(n);return}e.className=e.className.replace(t(n)," ")}function i(e,t,i){return e.classList&&e.classList.toggle?e.classList.toggle(t,i):(i?n(e,t):r(e,t),i)}function s(e,i,s){if(e.classList&&o(e,i)){r(e,i),n(e,s);return}e.className=e.className.replace(t(i),s)}function o(e,n){return e.classList?e.classList.contains(n):t(n).test(e.className)}e({add:n,remove:r,replace:s,toggle:i,present:o})});
    -provide("util/throttle",function(e){function t(e,t,n){function o(){var n=+(new Date);window.clearTimeout(s);if(n-i>t){i=n,e.call(r);return}s=window.setTimeout(o,t)}var r=n||this,i=0,s;return o}e(t)});
    -provide("util/css",function(e){using("util/util",function(t){e({sanitize:function(e,n,r){var i=/^[\w ,%\/"'\-_#]+$/,s=e&&t.map(e.split(";"),function(e){return t.map(e.split(":").slice(0,2),function(e){return t.trim(e)})}),o=0,u,a=[],f=r?"!important":"";n=n||/^(font|text\-|letter\-|color|line\-)[\w\-]*$/;for(;s&&(u=s[o]);o++)u[0].match(n)&&u[1].match(i)&&a.push(u.join(":")+f);return a.join(";")}})})});
    -provide("tfw/util/params",function(e){using("util/querystring","util/twitter",function(t,n){e(function(e,r){return function(i){var s,o="data-tw-params",u,a=i.innerHTML;if(!i)return;if(!n.isTwitterURL(i.href))return;if(i.getAttribute(o))return;i.setAttribute(o,!0);if(typeof r=="function"){s=r.call(this,i);for(u in s)s.hasOwnProperty(u)&&(e[u]=s[u])}i.href=t.url(i.href,e)}})})});
    -provide("util/params",function(e){using("util/querystring",function(t){var n=function(e){var n=e.search.substr(1);return t.decode(n)},r=function(e){var n=e.href,r=n.indexOf("#"),i=r<0?"":n.substring(r+1);return t.decode(i)},i=function(e){var t={},i=n(e),s=r(e);for(var o in i)i.hasOwnProperty(o)&&(t[o]=i[o]);for(var o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);return t};e({combined:i,fromQuery:n,fromFragment:r})})});
    -provide("tfw/util/env",function(e){using("util/params",function(t){function r(){var e=36e5,r=t.combined(document.location)._;return n!==undefined?n:(n=!1,r&&/^\d+$/.test(r)&&(n=+(new Date)-parseInt(r)<e),n)}var n;e({isDynamicWidget:r})})});
    -provide("util/decider",function(e){function n(e){var n=t[e]||!1;if(!n)return!1;if(n===!0||n===100)return!0;var r=Math.random()*100,i=n>=r;return t[e]=i,i}var t={force_new_cookie:100,rufous_pixel:100,decider_fixture:12.34};e({isAvailable:n})});
    -provide("dom/cookie",function(e){using("util/util",function(t){e(function(e,n,r){var i=t.aug({},r);if(arguments.length>1&&String(n)!=="[object Object]"){if(n===null||n===undefined)i.expires=-1;if(typeof i.expires=="number"){var s=i.expires,o=new Date((new Date).getTime()+s*60*1e3);i.expires=o}return n=String(n),document.cookie=[encodeURIComponent(e),"=",i.raw?n:encodeURIComponent(n),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}i=n||{};var u,a=i.raw?function(e){return e}:decodeURIComponent;return(u=(new RegExp("(?:^|; )"+encodeURIComponent(e)+"=([^;]*)")).exec(document.cookie))?a(u[1]):null})})});
    -provide("util/donottrack",function(e){using("dom/cookie",function(t){e(function(e,n){var r=/\.(gov|mil)(:\d+)?$/i,i=/https?:\/\/([^\/]+).*/i;return e=e||document.referrer,e=i.test(e)&&i.exec(e)[1],n=n||document.location.host,t("dnt")?!0:r.test(n)?!0:e&&r.test(e)?!0:document.navigator?document.navigator["doNotTrack"]==1:navigator?navigator["doNotTrack"]==1||navigator["msDoNotTrack"]==1:!1})})});
    -provide("tfw/util/guest_cookie",function(e){using("dom/cookie","util/donottrack","util/decider",function(t,n,r){function s(){var e=t(i)||!1;if(!e)return;e.match(/^v3\:/)||o()}function o(){t(i)&&t(i,null,{domain:".twitter.com",path:"/"})}function u(){n()&&o()}var i="pid";e({set:u,destroy:o,forceNewCookie:s,guest_id_cookie:i})})});
    -provide("sandbox/baseframe",function(e){using("util/domready","util/env","util/iframe","util/promise","util/util",function(t,n,r,i,s){function u(e,t,n,o){var u;this.readyPromise=new i(s.bind(function(e){this.resolver=e},this)),this.attrs=e||{},this.styles=t||{},this.appender=n||function(e){document.body.appendChild(e)},this.layout=o||function(e){return new i(function(t){return t.fulfill(e())})},this.frame=u=r(this.attrs,this.styles),u.onreadystatechange=u.onload=this.getCallback(this.onLoad),this.layout(s.bind(function(){this.appender(u)},this))}var o=0;window.twttr=window.twttr||{},window.twttr.sandbox=window.twttr.sandbox||{},u.prototype.getCallback=function(e){var t=this,n=!1;return function(){n||(n=!0,e.call(t))}},u.prototype.registerCallback=function(e){var t="cb"+o++;return window.twttr.sandbox[t]=e,t},u.prototype.onLoad=function(){try{this.document=this.frame.contentWindow.document}catch(e){this.setDocDomain();return}this.writeStandardsDoc(),this.resolver.fulfill(this)},u.prototype.ready=function(){return this.readyPromise},u.prototype.setDocDomain=function(){var e=r(this.attrs,this.styles),t=this.registerCallback(this.getCallback(this.onLoad));e.src=["javascript:",'document.write("");',"try { window.parent.document; }","catch (e) {",'document.domain="'+document.domain+'";',"}",'window.parent.twttr.sandbox["'+t+'"]();'].join(""),this.layout(s.bind(function(){this.frame.parentNode.removeChild(this.frame),this.frame=null,this.appender?this.appender(e):document.body.appendChild(e),this.frame=e},this))},u.prototype.writeStandardsDoc=function(){if(!n.anyIE()||n.cspEnabled())return;var e=["<!DOCTYPE html>","<html>","<head>","<scr","ipt>","try { window.parent.document; }",'catch (e) {document.domain="'+document.domain+'";}',"</scr","ipt>","</head>","<body></body>","</html>"].join("");this.document.write(e),this.document.close()},e(u)})});
    -provide("sandbox/minimal",function(e){using("sandbox/baseframe","util/env","util/promise","util/util",function(t,n,r,i){function s(e,t){if(!e)return;this._frame=e,this._win=e.contentWindow,this._doc=this._win.document,this._body=this._doc.body,this._head=this._body.parentNode.children[0],this.layout=t}i.aug(s.prototype,{createElement:function(e){return this._doc.createElement(e)},createDocumentFragment:function(){return this._doc.createDocumentFragment()},appendChild:function(e){return this.layout(i.bind(function(){return this._body.appendChild(e)},this))},setBaseTarget:function(e){var t=this._doc.createElement("base");return t.target=e,this.layout(i.bind(function(){return this._head.appendChild(t)},this))},setTitle:function(e){if(!e)return;this._frame.title=e},element:function(){return this._frame},document:function(){return this._doc}}),s.createSandbox=function(e,n,r,i){var o=new t(e,n,r,i);return o.ready().then(function(e){return new s(e.frame,e.layout)})},e(s)})});
    -provide("tfw/util/tracking",function(e){using("dom/cookie","dom/delegate","sandbox/minimal","util/donottrack","util/promise","tfw/util/guest_cookie","tfw/util/env","util/iframe","util/util","$xd/json2.js",function(t,n,r,i,s,o,u,a,f){function S(){return b?b:b=r.createSandbox({id:"rufous-sandbox"},{display:"none"}).then(f.bind(function(e){y=e,d=H(),v=B();while(m[0])A.apply(this,m.shift());return g?O():[d,v]},this))}function x(e,t,n,r){var i=!f.isObject(e),s=t?!f.isObject(t):!1,o,u;if(i||s)return;o=_(e),u=D(t,!!n,!!r),L(o,u,!0)}function T(e,n,r,s){var a=c[n],l,h,p=o.guest_id_cookie;if(!a)return;e=e||{},s=!!s,r=!!r,h=e.original_redirect_referrer||document.referrer,s=s||i(h),l=f.aug({},e),r||(k(l,"referrer",h),k(l,"widget",+u.isDynamicWidget()),k(l,"hask",+!!t("k")),k(l,"li",+!!t("twid")),k(l,p,t(p)||"")),s&&(k(l,"dnt",1),F(l)),j(a+"?"+P(l))}function N(e,t,n,r,i){var s=C(e.target||e.srcElement);s.action=i||"click",x(s,t,n,r)}function C(e,t){var n;return t=t||{},!e||e.nodeType!==1?t:((n=e.getAttribute("data-scribe"))&&f.forEach(n.split(" "),function(e){var n=f.trim(e).split(":"),r=n[0],i=n[1];r&&i&&!t[r]&&(t[r]=i)}),C(e.parentNode,t))}function k(e,t,n){var r=l+t;if(!e)return;return e[r]=n,e}function L(e,t,n){var r,i,s,o,u=w+"?";if(!f.isObject(e)||!f.isObject(t))return;s=f.aug({},t,{event_namespace:e}),n?(u+=P({l:I(s)}),j(u)):(r=d.firstChild,r.value=+r.value||+s.dnt,o=I(s),i=y.createElement("input"),i.type="hidden",i.name="l",i.value=o,d.appendChild(i))}function A(e,t,n,r){var i=!f.isObject(e),s=t?!f.isObject(t):!1,o,u;if(i||s)return;if(!y||!d){m.push([e,t,n,r]);return}o=_(e),u=D(t,!!n,!!r),L(o,u)}function O(){if(!d)return g=!0,b||s.reject();if(d.children.length<=2)return s.reject();var e=s.every(y.appendChild(d),y.appendChild(v)).then(function(e){var t=e[0],r=e[1];return n.on(r,"load",function(){window.setTimeout(M(t,r),0)}),t.submit(),e});return d=H(),v=B(),e}function M(e,t){return function(){var n=e.parentNode;if(!n)return;n.removeChild(e),n.removeChild(t)}}function _(e){return f.aug({client:"tfw"},e||{})}function D(e,t,n){var r={_category_:"tfw_client_event"},s,o;return t=!!t,n=!!n,s=f.aug(r,e||{}),o=s.widget_origin||document.referrer,s.format_version=1,s.dnt=n=n||i(o),s.triggered_on=s.triggered_on||+(new Date),t||(s.widget_origin=o),n&&F(s),s}function P(e){var t=[],n,r,i;for(n in e)e.hasOwnProperty(n)&&(r=encodeURIComponent(n),i=encodeURIComponent(e[n]),i=i.replace(/'/g,"%27"),t.push(r+"="+i));return t.join("&")}function H(){var e=y.createElement("form"),t=y.createElement("input"),n=y.createElement("input");return p++,e.action=w,e.method="POST",e.target="rufous-frame-"+p,e.id="rufous-form-"+p,t.type="hidden",t.name="dnt",t.value=0,n.type="hidden",n.name="tfw_redirect",n.value=E,e.appendChild(t),e.appendChild(n),e}function B(){var e="rufous-frame-"+p;return a({id:e,name:e,width:0,height:0,border:0},{display:"none"},y.document())}function j(e){var t=new Image;t.src=e}function F(e){f.forIn(e,function(t){~f.indexOf(h,t)&&delete e[t]})}function I(e){var t=Array.prototype.toJSON,n;return delete Array.prototype.toJSON,n=JSON.stringify(e),t&&(Array.prototype.toJSON=t),n}var l="twttr_",c={tweetbutton:"//p.twitter.com/t.gif",followbutton:"//p.twitter.com/f.gif",tweetembed:"//p.twitter.com/e.gif"},h=["hask","li","logged_in","pid","user_id",o.guest_id_cookie,l+"hask",l+"li",l+o.guest_id_cookie],p=0,d,v,m=[],g,y,b,w="https://twitter.com/i/jot",E="https://platform.twitter.com/jot.html";o.forceNewCookie(),e({enqueue:A,flush:O,initPostLogging:S,scribeInteraction:N,extractTermsFromDOM:C,addPixel:x,addLegacyPixel:T,addVar:k})})});
    -provide("tfw/util/data",function(e){using("util/logger","util/util","util/querystring",function(t,n,r){function c(e){return function(n){n.error?e.error&&e.error(n):n.headers&&n.headers.status!=200?(e.error&&e.error(n),t.warn(n.headers.message)):e.success&&e.success(n),e.complete&&e.complete(n),h(e)}}function h(e){var t=e.script;t&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),e.script=undefined,t=undefined),e.callbackName&&twttr.tfw.callbacks[e.callbackName]&&delete twttr.tfw.callbacks[e.callbackName]}function p(e){var t={};return e.success&&n.isType("function",e.success)&&(t.success=e.success),e.error&&n.isType("function",e.error)&&(t.error=e.error),e.complete&&n.isType("function",e.complete)&&(t.complete=e.complete),t}window.twttr=window.twttr||{},twttr.tfw=twttr.tfw||{},twttr.tfw.callbacks=twttr.tfw.callbacks||{};var i="twttr.tfw.callbacks",s=twttr.tfw.callbacks,o="cb",u=0,a=!1,f={},l={tweets:"https://syndication.twitter.com/tweets.json",timeline:"https://cdn.syndication.twimg.com/widgets/timelines/",timelinePoll:"https://syndication.twitter.com/widgets/timelines/paged/",timelinePreview:"https://syndication.twitter.com/widgets/timelines/preview/"};twttr.widgets&&twttr.widgets.endpoints&&n.aug(l,twttr.widgets.endpoints),f.jsonp=function(e,t,n){var f=n||o+u,l=i+"."+f,h=document.createElement("script"),p={callback:l,suppress_response_codes:!0};s[f]=c(t);if(a||!/^https?\:$/.test(window.location.protocol))e=e.replace(/^\/\//,"https://");h.src=r.url(e,p),h.async="async",document.body.appendChild(h),t.script=h,t.callbackName=f,n||u++},f.config=function(e){if(e.forceSSL===!0||e.forceSSL===!1)a=e.forceSSL},f.tweets=function(e){var t=arguments[0],n=p(t),i={ids:e.ids.join(","),lang:e.lang},s=r.url(l.tweets,i);this.jsonp(s,n)},f.timeline=function(e){var t=arguments[0],i=p(t),s,o=9e5,u=Math.floor(+(new Date)/o),a={lang:e.lang,t:u,domain:window.location.host,dnt:e.dnt,override_type:e.overrideType,override_id:e.overrideId,override_name:e.overrideName,override_owner_id:e.overrideOwnerId,override_owner_name:e.overrideOwnerName,with_replies:e.withReplies};n.compact(a),s=r.url(l.timeline+e.id,a),this.jsonp(s,i,"tl_"+e.id+"_"+e.instanceId)},f.timelinePoll=function(e){var t=arguments[0],i=p(t),s={lang:e.lang,since_id:e.sinceId,max_id:e.maxId,min_position:e.minPosition,max_position:e.maxPosition,domain:window.location.host,dnt:e.dnt,override_type:e.overrideType,override_id:e.overrideId,override_name:e.overrideName,override_owner_id:e.overrideOwnerId,override_owner_name:e.overrideOwnerName,with_replies:e.withReplies},o;n.compact(s),o=r.url(l.timelinePoll+e.id,s),this.jsonp(o,i,"tlPoll_"+e.id+"_"+e.instanceId+"_"+(e.sinceId||e.maxId||e.maxPosition||e.minPosition))},f.timelinePreview=function(e){var t=arguments[0],n=p(t),i=e.params,s=r.url(l.timelinePreview,i);this.jsonp(s,n)},e(f)})});
    -provide("anim/transition",function(e){function t(e,t){var n;return t=t||window,n=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.msRequestAnimationFrame||t.oRequestAnimationFrame||function(n){t.setTimeout(function(){e(+(new Date))},1e3/60)},n(e)}function n(e,t){return Math.sin(Math.PI/2*t)*e}function r(e,n,r,i,s){function a(){var u=+(new Date),f=u-o,l=Math.min(f/r,1),c=i?i(n,l):n*l;e(c);if(l==1)return;t(a,s)}var o=+(new Date),u;t(a)}e({animate:r,requestAnimationFrame:t,easeOut:n})});
    -provide("util/datetime",function(e){using("util/util",function(t){function h(e){return e<10?"0"+e:e}function p(e){function i(e,n){return t&&t[e]&&(e=t[e]),e.replace(/%\{([\w_]+)\}/g,function(e,t){return n[t]!==undefined?n[t]:e})}var t=e&&e.phrases,n=e&&e.months||s,r=e&&e.formats||o;this.timeAgo=function(e){var t=p.parseDate(e),s=+(new Date),o=s-t,h;return t?isNaN(o)||o<u*2?i("now"):o<a?(h=Math.floor(o/u),i(r.abbr,{number:h,symbol:i(c,{abbr:i("s"),expanded:h>1?i("seconds"):i("second")})})):o<f?(h=Math.floor(o/a),i(r.abbr,{number:h,symbol:i(c,{abbr:i("m"),expanded:h>1?i("minutes"):i("minute")})})):o<l?(h=Math.floor(o/f),i(r.abbr,{number:h,symbol:i(c,{abbr:i("h"),expanded:h>1?i("hours"):i("hour")})})):o<l*365?i(r.shortdate,{day:t.getDate(),month:i(n[t.getMonth()])}):i(r.longdate,{day:t.getDate(),month:i(n[t.getMonth()]),year:t.getFullYear().toString().slice(2)}):""},this.localTimeStamp=function(e){var t=p.parseDate(e),s=t&&t.getHours();return t?i(r.full,{day:t.getDate(),month:i(n[t.getMonth()]),year:t.getFullYear(),hours24:h(s),hours12:s<13?s?s:"12":s-12,minutes:h(t.getMinutes()),seconds:h(t.getSeconds()),amPm:s<12?i("AM"):i("PM")}):""}}var n=/(\d{4})-?(\d{2})-?(\d{2})T(\d{2}):?(\d{2}):?(\d{2})(Z|[\+\-]\d{2}:?\d{2})/,r=/[a-z]{3,4} ([a-z]{3}) (\d{1,2}) (\d{1,2}):(\d{2}):(\d{2}) ([\+\-]\d{2}:?\d{2}) (\d{4})/i,i=/^\d+$/,s=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],o={abbr:"%{number}%{symbol}",shortdate:"%{day} %{month}",longdate:"%{day} %{month} %{year}",full:"%{hours12}:%{minutes} %{amPm} - %{day} %{month} %{year}"},u=1e3,a=u*60,f=a*60,l=f*24,c='<abbr title="%{expanded}">%{abbr}</abbr>';p.parseDate=function(e){var o=e||"",u=o.toString(),a,f;return a=function(){var e;if(i.test(u))return parseInt(u,10);if(e=u.match(r))return Date.UTC(e[7],t.indexOf(s,e[1]),e[2],e[3],e[4],e[5]);if(e=u.match(n))return Date.UTC(e[1],e[2]-1,e[3],e[4],e[5],e[6])}(),a?(f=new Date(a),!isNaN(f.getTime())&&f):!1},e(p)})});
    -provide("sandbox/frame",function(e){using("sandbox/baseframe","sandbox/minimal","util/env","util/promise","util/util",function(t,n,r,i,s){function h(){var e,t;a={};if(f)return;e=document.body.offsetHeight,t=document.body.offsetWidth;if(e==c&&t==l)return;s.forEach(u,function(e){e.dispatchFrameResize(l,c)}),c=e,l=t}function p(e){var t;return e.id?e.id:(t=e.getAttribute("data-twttr-id"))?t:(t="twttr-sandbox-"+o++,e.setAttribute("data-twttr-id",t),t)}function d(e,t){n.apply(this,[e,t]),this._resizeHandlers=[],u.push(this),this._win.addEventListener?this._win.addEventListener("resize",s.bind(function(){this.dispatchFrameResize()},this),!0):this._win.attachEvent("onresize",s.bind(function(){this.dispatchFrameResize(this._win.event)},this))}var o=0,u=[],a={},f,l=0,c=0;window.addEventListener?window.addEventListener("resize",h,!0):document.body.attachEvent("onresize",function(){h(window.event)}),d.prototype=new n,s.aug(d.prototype,{dispatchFrameResize:function(){var e=this._frame.parentNode,t=p(e),n=a[t];f=!0;if(!this._resizeHandlers.length)return;n||(n=a[t]={w:this._frame.offsetWidth,h:this._frame.offsetHeight});if(this._frameWidth==n.w&&this._frameHeight==n.h)return;this._frameWidth=n.w,this._frameHeight=n.h,s.forEach(this._resizeHandlers,function(e){e(n.w,n.h)}),window.setTimeout(function(){a={}},50)},appendStyleSheet:function(e){var t=this._doc.createElement("link");return t.type="text/css",t.rel="stylesheet",t.href=e,this.layout(s.bind(function(){return this._head.appendChild(t)},this))},appendCss:function(e){var t;return r.cspEnabled()?i.reject("CSP enabled; cannot embed inline styles."):(t=this._doc.createElement("style"),t.type="text/css",t.styleSheet?t.styleSheet.cssText=e:t.appendChild(this._doc.createTextNode(e)),this.layout(s.bind(function(){return this._head.appendChild(t)},this)))},style:function(e){return this.layout(s.bind(function(){s.forIn(e,s.bind(function(e,t){this._frame.style[e]=t},this))},this))},onresize:function(e){this._resizeHandlers.push(e)},width:function(e){return e!==undefined&&(this._frame.width=e),this._frame.offsetWidth},height:function(e){return e!==undefined&&(this._frame.height=e),this._frame.offsetHeight}}),d.createSandbox=function(e,n,r,i){var s=new t(e,n,r,i);return s.ready().then(function(e){return new d(e.frame,e.layout)})},e(d)})});
    -provide("tfw/util/assets",function(e){using("util/env",function(t){function r(e,r){var i=n[e],s;return t.retina()?s="2x":t.ie6()||t.ie7()?s="gif":s="default",r&&(s+=".rtl"),i[s]}var n={"embed/timeline.css":{"default":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.default.css","2x":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.2x.css",gif:"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.gif.css","default.rtl":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.default.rtl.css","2x.rtl":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.2x.rtl.css","gif.rtl":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.gif.rtl.css"}};e(r)})});
    -provide("tfw/widget/syndicatedbase",function(e){using("tfw/widget/base","tfw/widget/intent","tfw/util/assets","tfw/util/globals","tfw/util/tracking","dom/classname","dom/get","dom/delegate","sandbox/frame","util/env","util/promise","util/twitter","util/util",function(t,n,r,i,s,o,u,a,f,l,c,h,p){function S(){y=x.VALID_COLOR.test(i.val("widgets:link-color"))&&RegExp.$1,w=x.VALID_COLOR.test(i.val("widgets:border-color"))&&RegExp.$1,b=i.val("widgets:theme")}function x(e){if(!e)return;var n;this.readyPromise=new c(p.bind(function(e){this.readyResolver=e},this)),this.renderedPromise=new c(p.bind(function(e){this.renderResolver=e},this)),t.apply(this,[e]),n=this.params(),this.targetEl=this.srcEl&&this.srcEl.parentNode||n.targetEl||document.body,this.predefinedWidth=x.VALID_UNIT.test(n.width||this.attr("width"))&&RegExp.$1,this.layout(p.bind(function(){return this.containerWidth=this.targetEl&&this.targetEl.offsetWidth},this)).then(p.bind(function(e){var t=this.predefinedWidth||e||this.dimensions.DEFAULT_WIDTH;this.height=x.VALID_UNIT.test(n.height||this.attr("height"))&&RegExp.$1,this.width=Math.max(this.dimensions.MIN_WIDTH,Math.min(t,this.dimensions.DEFAULT_WIDTH))},this)),x.VALID_COLOR.test(n.linkColor||this.dataAttr("link-color"))?this.linkColor=RegExp.$1:this.linkColor=y,x.VALID_COLOR.test(n.borderColor||this.dataAttr("border-color"))?this.borderColor=RegExp.$1:this.borderColor=w,this.theme=n.theme||this.attr("data-theme")||b,this.theme=/(dark|light)/.test(this.theme)?this.theme:"",this.classAttr.push(l.touch()?"is-touch":"not-touch"),l.ie9()&&this.classAttr.push("ie9"),f.createSandbox({"class":this.renderedClassNames,id:this.id},{width:"1px",height:"0px",border:"none",position:"absolute",visibility:"hidden"},p.bind(function(e){this.srcEl?this.targetEl.insertBefore(e,this.srcEl):this.targetEl.appendChild(e)},this),this.layout).then(p.bind(function(e){this.setupSandbox(e)},this))}var d=[".customisable",".customisable:link",".customisable:visited",".customisable:hover",".customisable:focus",".customisable:active",".customisable-highlight:hover",".customisable-highlight:focus","a:hover .customisable-highlight","a:focus .customisable-highlight"],v=["a:hover .ic-mask","a:focus .ic-mask"],m=[".customisable-border"],g=[".timeline-header h1.summary",".timeline-header h1.summary a:link",".timeline-header h1.summary a:visited"],y,b,w,E={TWEET:0,RETWEET:10};x.prototype=new t,p.aug(x.prototype,{setupSandbox:function(e){this.sandbox=e,c.some(e.appendCss("body{display:none}"),e.setBaseTarget("_blank"),e.appendStyleSheet(twttr.widgets.config.assetUrl()+"/"+r("embed/timeline.css"))).then(p.bind(function(){this.readyResolver.fulfill(e)},this))},ready:function(){return this.readyPromise},rendered:function(){return this.renderedPromise},contentWidth:function(e){var t=this.dimensions,n=this.fullBleedPhoto?0:this.chromeless&&this.narrow?t.NARROW_MEDIA_PADDING_CL:this.chromeless?t.WIDE_MEDIA_PADDING_CL:this.narrow?t.NARROW_MEDIA_PADDING:t.WIDE_MEDIA_PADDING;return(e||this.width)-n},addSiteStyles:function(){var e=p.bind(function(e){return(this.theme=="dark"?".thm-dark ":"")+e},this),t=[];this.headingStyle&&t.push(p.map(g,e).join(",")+"{"+this.headingStyle+"}"),this.linkColor&&(t.push(p.map(d,e).join(",")+"{color:"+this.linkColor+"}"),t.push(p.map(v,e).join(",")+"{background-color:"+this.linkColor+"}")),this.borderColor&&t.push(p.map(m,e).concat(this.theme=="dark"?[".thm-dark.customisable-border"]:[]).join(",")+"{border-color:"+this.borderColor+"}");if(!t.length)return;return this.sandbox.appendCss(t.join(""))},setNarrow:function(){var e=this.narrow;return this.narrow=this.width<this.dimensions.NARROW_WIDTH,e!=this.narrow?this.layout(p.bind(function(){return o.toggle(this.element,"var-narrow",this.narrow)},this)):c.fulfill(this.narrow)},bindIntentHandlers:function(){function r(n){var r=u.ancestor(".tweet",this,t),i=p.aug({},e.baseScribeData(),e.extractTweetScribeDetails(r));s.scribeInteraction(n,i,!0,e.dnt)}var e=this,t=this.element;a.delegate(t,"click","A",r),a.delegate(t,"click","BUTTON",r),a.delegate(t,"click",".profile",function(t){var r;if(t.altKey||t.metaKey||t.shiftKey)return;e.addUrlParams(this),r=h.intentForProfileURL(this.href),r&&(n.open(r,e.sandbox.element()),a.preventDefault(t))}),a.delegate(t,"click",".web-intent",function(t){e.addUrlParams(this);if(t.altKey||t.metaKey||t.shiftKey)return;n.open(this.href,e.sandbox.element()),a.preventDefault(t)})},baseScribeData:function(){return{}},extractTweetScribeDetails:function(e){var t=e.getAttribute("data-tweet-id"),n=e.getAttribute("data-rendered-tweet-id")||t,r={};return n==t?r[n]={item_type:E.TWEET}:t&&(r[n]={item_type:E.RETWEET,target_type:E.TWEET,target_id:t}),r},constrainMedia:function(e,t){var n=0,r=this.fullBleedPhoto?500:375;e=e||this.element,t=t||this.contentWidth();if(!e)return;return p.forEach(u.all("autosized-media",e),p.bind(function(e){var i=x.scaleDimensions(e.getAttribute("data-width"),e.getAttribute("data-height"),t,r);this.layout(function(){i.width>0&&(e.width=i.width),i.height>0&&(e.height=i.height)}),n=i.height>n?i.height:n},this)),n}}),x.VALID_UNIT=/^([0-9]+)( ?px)?$/,x.VALID_COLOR=/^(#(?:[0-9a-f]{3}|[0-9a-f]{6}))$/i,x.retinize=function(e){if(!l.retina())return;p.forEach(e.getElementsByTagName("IMG"),function(e){var t=e.getAttribute("data-src-2x");t&&(e.src=t)})},x.scaleDimensions=function(e,t,n,r){return t>e&&t>r&&(e*=r/t,t=r),e>n&&(t*=n/e,e=n,t>r&&(e*=r/t,t=r)),{width:Math.ceil(e),height:Math.ceil(t)}},S(),e(x)})});
    -provide("tfw/widget/timeline",function(e){using("tfw/widget/base","tfw/widget/syndicatedbase","util/datetime","util/promise","anim/transition","tfw/util/article","tfw/util/data","tfw/util/tracking","tfw/util/params","util/css","util/env","util/throttle","util/twitter","util/querystring","util/typevalidator","util/util","dom/delegate","dom/classname","dom/get",function(t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b){function I(e){if(!e)return;var t,r,i,s,o,u,a,f;n.apply(this,[e]),t=this.params(),r=(t.chrome||this.dataAttr("chrome")||"").split(" "),this.preview=t.previewParams,this.widgetId=t.widgetId||this.dataAttr("widget-id"),this.instanceId=++F,this.cursors={maxPosition:0,minPosition:0},(s=t.screenName||this.dataAttr("screen-name"))||(o=t.userId||this.dataAttr("user-id"))?this.override={overrideType:"user",overrideId:o,overrideName:s,withReplies:v.asBoolean(t.showReplies||this.dataAttr("show-replies"))?"true":"false"}:(s=t.favoritesScreenName||this.dataAttr("favorites-screen-name"))||(o=t.favoritesUserId||this.dataAttr("favorites-user-id"))?this.override={overrideType:"favorites",overrideId:o,overrideName:s}:((s=t.listOwnerScreenName||this.dataAttr("list-owner-screen-name"))||(o=t.listOwnerId||this.dataAttr("list-owner-id")))&&((u=t.listId||this.dataAttr("list-id"))||(a=t.listSlug||this.dataAttr("list-slug")))?this.override={overrideType:"list",overrideOwnerId:o,overrideOwnerName:s,overrideId:u,overrideName:a}:(f=t.customTimelineId||this.dataAttr("custom-timeline-id"))?this.override={overrideType:"custom",overrideId:f}:this.override={},this.tweetLimit=v.asInt(t.tweetLimit||this.dataAttr("tweet-limit")),this.staticTimeline=this.tweetLimit>0,r.length&&(i=~m.indexOf(r,"none"),this.chromeless=i||~m.indexOf(r,"transparent"),this.headerless=i||~m.indexOf(r,"noheader"),this.footerless=i||~m.indexOf(r,"nofooter"),this.borderless=i||~m.indexOf(r,"noborders"),this.noscrollbar=~m.indexOf(r,"noscrollbar")),this.headingStyle=l.sanitize(t.headingStyle||this.dataAttr("heading-style"),undefined,!0),this.classAttr.push("twitter-timeline-rendered"),this.ariaPolite=t.ariaPolite||this.dataAttr("aria-polite")}var w="1.0",E={CLIENT_SIDE_USER:0,CLIENT_SIDE_APP:2},S="timeline",x="new-tweets-bar",T="timeline-header",N="timeline-footer",C="stream",k="h-feed",L="tweet",A="expanded",O="detail-expander",M="expand",_="permalink",D="twitter-follow-button",P="no-more-pane",H="pending-scroll-in",B="pending-new-tweet",j="pending-new-tweet-display",F=0;I.prototype=new n,m.aug(I.prototype,{renderedClassNames:"twitter-timeline twitter-timeline-rendered",dimensions:{DEFAULT_HEIGHT:"600",DEFAULT_WIDTH:"520",NARROW_WIDTH:"320",MIN_WIDTH:"180",MIN_HEIGHT:"200",WIDE_MEDIA_PADDING:81,NARROW_MEDIA_PADDING:16,WIDE_MEDIA_PADDING_CL:60,NARROW_MEDIA_PADDING_CL:12},create:function(e){var r=this.sandbox.createElement("div"),i,s,o,u=[],f;r.innerHTML=e.body,i=r.children[0]||!1;if(!i)return;return this.reconfigure(e.config),this.discardStaticOverflow(i),this.sandbox.setTitle(i.getAttribute("data-iframe-title")||"Timeline"),n.retinize(i),this.constrainMedia(i),this.searchQuery=i.getAttribute("data-search-query"),this.profileId=i.getAttribute("data-profile-id"),this.timelineType=i.getAttribute("data-timeline-type"),f=this.getTweetDetails(r),m.forIn(f,function(e){u.push(e)}),o=this.baseScribeData(),o.item_ids=u,o.item_details=f,this.timelineType&&a.enqueue({page:this.timelineType+"_timeline",component:"timeline",element:"initial",action:u.length?"results":"no_results"},o,!0,this.dnt),a.enqueue({page:"timeline",component:"timeline",element:"initial",action:u.length?"results":"no_results"},o,!0,this.dnt),a.flush(),this.ariaPolite=="assertive"&&(s=b.one(x,i,"DIV"),s.setAttribute("aria-polite","assertive")),i.id=this.id,i.className+=" "+this.classAttr.join(" "),i.lang=this.lang,this.augmentWidgets(i),this.ready().then(m.bind(function(e){e.appendChild(i).then(m.bind(function(){this.renderResolver.fulfill(this.sandbox)},this)),e.style({cssText:"",border:"none",maxWidth:"100%",minWidth:this.dimensions.MIN_WIDTH+"px"}),this.layout(m.bind(function(){this.srcEl&&this.srcEl.parentNode&&this.srcEl.parentNode.removeChild(this.srcEl),this.predefinedWidth=this.width,this.predefinedHeight=this.height,this.width=e.width(this.width),this.height=e.height(this.height)},this)).then(m.bind(function(){this.width<this.predefinedWidth&&(this.layout(m.bind(function(){this.width=e.width(this.predefinedWidth)},this)),t.doLayoutAsync()),this.height<this.predefinedHeight&&(this.layout(m.bind(function(){this.height=e.height(this.predefinedHeight),this.recalculateStreamHeight()},this)),t.doLayoutAsync())},this)),this.setNarrow().then(m.bind(function(){this.sandbox.onresize(m.bind(this.handleResize,this))},this))},this)),i},render:function(e,n){var r,s;return!this.preview&&!this.widgetId?i.reject(400):(s=new i(function(e){r=e}),this.staticTimeline?this.rendered().then(m.bind(function(e){this.layout(m.bind(function(){e.height(this.height=this.element.offsetHeight)},this)),t.doLayoutAsync()},this)):this.rendered().then(m.bind(function(){this.recalculateStreamHeight(),t.doLayoutAsync()},this)),this.preview?this.getPreviewTimeline(r):this.getTimeline(r),n&&s.then(n),s)},getPreviewTimeline:function(e){u.timelinePreview({success:m.bind(function(n){this.ready().then(m.bind(function(){this.element=this.create(n),this.readTranslations(),this.bindInteractions(),this.updateCursors(n.headers,{initial:!0}),t.doLayoutAsync(),e.fulfill(this.element)},this))},this),error:function(t){if(!t||!t.headers)return;e.reject(t.headers.status)},params:this.preview})},getTimeline:function(e){a.initPostLogging(),u.timeline(m.aug({id:this.widgetId,instanceId:this.instanceId,dnt:this.dnt,lang:this.lang,success:m.bind(function(n){this.ready().then(m.bind(function(){this.element=this.create(n),this.readTranslations(),this.bindInteractions(),this.updateTimeStamps(),this.updateCursors(n.headers,{initial:!0}),n.headers.xPolling&&/\d/.test(n.headers.xPolling)&&(this.pollInterval=n.headers.xPolling*1e3),this.staticTimeline||this.schedulePolling(),t.doLayoutAsync(),e.fulfill(this.sandbox.element())},this))},this),error:function(t){if(!t||!t.headers)return;e.reject(t.headers.status)}},this.override))},reconfigure:function(e){this.lang=e.lang,this.theme||(this.theme=e.theme),this.theme=="dark"&&this.classAttr.push("thm-dark"),this.chromeless&&this.classAttr.push("var-chromeless"),this.borderless&&this.classAttr.push("var-borderless"),this.headerless&&this.classAttr.push("var-headerless"),this.footerless&&this.classAttr.push("var-footerless"),this.staticTimeline&&this.classAttr.push("var-static"),!this.linkColor&&e.linkColor&&n.VALID_COLOR.test(e.linkColor)&&(this.linkColor=RegExp.$1),!this.height&&n.VALID_UNIT.test(e.height)&&(this.height=RegExp.$1),this.height=Math.max(this.dimensions.MIN_HEIGHT,this.height?this.height:this.dimensions.DEFAULT_HEIGHT),this.preview&&this.classAttr.push("var-preview"),this.narrow=this.width<=this.dimensions.NARROW_WIDTH,this.narrow&&this.classAttr.push("var-narrow"),this.addSiteStyles()},getTweetDetails:function(e){var t=b.one(k,e),n,r={},i,s,o=0;n=t&&t.children||[];for(;i=n[o];o++)s=b.one(_,i,"A"),m.aug(r,this.extractTweetScribeDetails(i));return r},baseScribeData:function(){return{widget_id:this.widgetId,widget_origin:o.url(),client_version:w,message:this.partner,query:this.searchQuery,profile_id:this.profileId}},bindInteractions:function(){var e=this,t=this.element,n=!0;this.bindIntentHandlers(),g.delegate(t,"click",".load-tweets",function(t){n&&(n=!1,e.forceLoad(),g.stop(t))}),g.delegate(t,"click",".display-sensitive-image",function(n){e.showNSFW(b.ancestor("."+L,this,t)),g.stop(n)}),g.delegate(t,"mouseover","."+S,function(){e.mouseOver=!0}),g.delegate(t,"mouseout","."+S,function(){e.mouseOver=!1}),g.delegate(t,"mouseover","."+x,function(){e.mouseOverNotifier=!0}),g.delegate(t,"mouseout","."+x,function(){e.mouseOverNotifier=!1,window.setTimeout(function(){e.hideNewTweetNotifier()},3e3)});if(this.staticTimeline)return;g.delegate(t,"click","."+M,function(n){if(n.altKey||n.metaKey||n.shiftKey)return;e.toggleExpando(b.ancestor("."+L,this,t)),g.stop(n)}),g.delegate(t,"click","A",function(e){g.stopPropagation(e)}),g.delegate(t,"click",".with-expansion",function(t){e.toggleExpando(this),g.stop(t)}),g.delegate(t,"click",".load-more",function(){e.loadMore()}),g.delegate(t,"click","."+x,function(){e.scrollToTop(),e.hideNewTweetNotifier(!0)})},scrollToTop:function(){var e=b.one(C,this.element,"DIV");e.scrollTop=0,e.focus()},update:function(){var e=this,t=b.one(k,this.element),n=t&&t.children[0],r=n&&n.getAttribute("data-tweet-id");this.updateTimeStamps(),this.requestTweets(r,!0,function(t){t.childNodes.length>0&&e.insertNewTweets(t)})},loadMore:function(){var e=this,t=b.all(L,this.element,"LI").pop(),n=t&&t.getAttribute("data-tweet-id");this.requestTweets(n,!1,function(t){var r=b.one(P,e.element,"P"),i=t.childNodes[0];r.style.cssText="",i&&i.getAttribute("data-tweet-id")==n&&t.removeChild(i);if(t.childNodes.length>0){e.appendTweets(t);return}y.add(e.element,"no-more"),r.focus()})},forceLoad:function(){var e=this,t=!!b.all(k,this.element,"OL").length;this.requestTweets(1,!0,function(n){n.childNodes.length&&(e[t?"insertNewTweets":"appendTweets"](n),y.add(e.element,"has-tweets"))})},schedulePolling:function(e){var t=this;if(this.pollInterval===null)return;e=twttr.widgets.poll||e||this.pollInterval||1e4,e>-1&&window.setTimeout(function(){this.isUpdating||t.update(),t.schedulePolling()},e)},updateCursors:function(e,t){(t||{}).initial?(this.cursors.maxPosition=e.maxPosition,this.cursors.minPosition=e.minPosition):(t||{}).newer?this.cursors.maxPosition=e.maxPosition||this.cursors.maxPosition:this.cursors.minPosition=e.minPosition||this.cursors.minPosition},requestTweets:function(e,t,r){var i=this,s={id:this.widgetId,instanceId:this.instanceId,screenName:this.widgetScreenName,userId:this.widgetUserId,withReplies:this.widgetShowReplies,dnt:this.dnt,lang:this.lang};t&&this.cursors.maxPosition?s.minPosition=this.cursors.maxPosition:!t&&this.cursors.minPosition?s.maxPosition=this.cursors.minPosition:t?s.sinceId=e:s.maxId=e,s.complete=function(){this.isUpdating=!1},s.error=function(e){if(e&&e.headers){if(e.headers.status=="404"){i.pollInterval=null;return}if(e.headers.status=="503"){i.pollInterval*=1.5;return}}},s.success=function(e){var s=i.sandbox.createDocumentFragment(),o=i.sandbox.createElement("div"),u,f=[],l,c;i.updateCursors(e.headers,{newer:t}),e&&e.headers&&e.headers.xPolling&&/\d+/.test(e.headers.xPolling)&&(i.pollInterval=e.headers.xPolling*1e3);if(e&&e.body!==undefined){o.innerHTML=e.body;if(o.children[0]&&o.children[0].tagName!="LI")return;l=i.getTweetDetails(o);for(c in l)l.hasOwnProperty(c)&&f.push(c);f.length&&(u=i.baseScribeData(),u.item_ids=f,u.item_details=l,u.event_initiator=t?E.CLIENT_SIDE_APP:E.CLIENT_SIDE_USER,this.timelineType&&a.enqueue({page:this.timelineType+"_timeline",component:"timeline",element:"initial",action:f.length?"results":"no_results"},u,!0,this.dnt),a.enqueue({page:"timeline",component:"timeline",element:t?"newer":"older",action:"results"},u,!0,i.dnt),a.flush()),n.retinize(o),i.constrainMedia(o);while(o.children[0])s.appendChild(o.children[0]);r(s)}},u.timelinePoll(m.aug(s,this.override))},insertNewTweets:function(e){var t=this,n=b.one(C,this.element,"DIV"),r=b.one(k,n,"OL"),i=r.offsetHeight,o;r.insertBefore(e,r.firstChild),o=r.offsetHeight-i;if(n.scrollTop>40||this.mouseIsOver()){n.scrollTop=n.scrollTop+o,this.updateTimeStamps(),this.showNewTweetNotifier();return}y.remove(this.element,H),r.style.cssText="margin-top: -"+o+"px",window.setTimeout(function(){n.scrollTop=0,y.add(t.element,H),c.cssTransitions()?r.style.cssText="":s.animate(function(e){e<o?r.style.cssText="margin-top: -"+(o-e)+"px":r.style.cssText=""},o,500,s.easeOut)},500),this.updateTimeStamps(),this.timelineType!="custom"&&this.gcTweets(50)},appendTweets:function(e){var t=b.one(C,this.element,"DIV"),n=b.one(k,t,"OL");n.appendChild(e),this.updateTimeStamps()},gcTweets:function(e){var t=b.one(k,this.element,"OL"),n=t.children.length,r;e=e||50;for(;n>e&&(r=t.children[n-1]);n--)t.removeChild(r)},showNewTweetNotifier:function(){var e=this,t=b.one(x,this.element,"DIV"),n=t.children[0];t.style.cssText="",t.removeChild(n),t.appendChild(n),y.add(this.element,j),window.setTimeout(function(){y.add(e.element,B)},10),this.newNoticeDisplayTime=+(new Date),window.setTimeout(function(){e.hideNewTweetNotifier()},5e3)},hideNewTweetNotifier:function(e){var t=this;if(!e&&this.mouseOverNotifier)return;y.remove(this.element,B),window.setTimeout(function(){y.remove(t.element,j)},500)},augmentWidgets:function(e){var t=b.one(D,e,"A");if(!t)return;t.setAttribute("data-related",this.related),t.setAttribute("data-partner",this.partner),t.setAttribute("data-dnt",this.dnt),t.setAttribute("data-search-query",this.searchQuery),t.setAttribute("data-profile-id",this.profileId),this.width<250&&t.setAttribute("data-show-screen-name","false"),twttr.widgets.load(t.parentNode)},discardStaticOverflow:function(e){var t=b.one(k,e,"OL"),n;if(this.staticTimeline){this.height=0;while(n=t.children[this.tweetLimit])t.removeChild(n)}},hideStreamScrollBar:function(){var e=b.one(C,this.element,"DIV"),t=b.one(k,this.element,"OL"),n;e.style.width="",n=this.element.offsetWidth-t.offsetWidth,n>0&&(e.style.width=this.element.offsetWidth+n+"px")},readTranslations:function(){var e=this.element,t="data-dt-";this.datetime=new r(m.compact({phrases:{now:e.getAttribute(t+"now"),s:e.getAttribute(t+"s"),m:e.getAttribute(t+"m"),h:e.getAttribute(t+"h"),second:e.getAttribute(t+"second"),seconds:e.getAttribute(t+"seconds"),minute:e.getAttribute(t+"minute"),minutes:e.getAttribute(t+"minutes"),hour:e.getAttribute(t+"hour"),hours:e.getAttribute(t+"hours")},months:e.getAttribute(t+"months").split("|"),formats:{abbr:e.getAttribute(t+"abbr"),shortdate:e.getAttribute(t+"short"),longdate:e.getAttribute(t+"long")}}))},updateTimeStamps:function(){var e=b.all(_,this.element,"A"),t,n,r=0,i,s;for(;t=e[r];r++){i=t.getAttribute("data-datetime"),s=i&&this.datetime.timeAgo(i,this.i18n),n=t.getElementsByTagName("TIME")[0];if(!s)continue;if(n&&n.innerHTML){n.innerHTML=s;continue}t.innerHTML=s}},mouseIsOver:function(){return this.mouseOver},addUrlParams:function(e){var t=this,n={tw_w:this.widgetId,related:this.related,partner:this.partner,query:this.searchQuery,profile_id:this.profileId,original_referer:o.url(),tw_p:"embeddedtimeline"};return this.addUrlParams=f(n,function(e){var n=b.ancestor("."+L,e,t.element);return n&&{tw_i:n.getAttribute("data-tweet-id")}}),this.addUrlParams(e)},showNSFW:function(e){var t=b.one("nsfw",e,"DIV"),r,i,s=0,o,u,a,f;if(!t)return;i=n.scaleDimensions(t.getAttribute("data-width"),t.getAttribute("data-height"),this.contentWidth(),t.getAttribute("data-height")),r=!!(u=t.getAttribute("data-player")),r?a=this.sandbox.createElement("iframe"):(a=this.sandbox.createElement("img"),u=t.getAttribute(c.retina()?"data-image-2x":"data-image"),a.alt=t.getAttribute("data-alt"),f=this.sandbox.createElement("a"),f.href=t.getAttribute("data-href"),f.appendChild(a)),a.title=t.getAttribute("data-title"),a.src=u,a.width=i.width,a.height=i.height,o=b.ancestor("."+O,t,e),s=i.height-t.offsetHeight,t.parentNode.replaceChild(r?a:f,t),o.style.cssText="height:"+(o.offsetHeight+s)+"px"},toggleExpando:function(e){var r=b.one(O,e,"DIV"),i=r&&r.children[0],s=i&&i.getAttribute("data-expanded-media"),o,u=0,a=b.one(M,e,"A"),f=a&&a.getElementsByTagName("B")[0],l=f&&(f.innerText||f.textContent),c;if(!f)return;this.layout(function(){f.innerHTML=a.getAttribute("data-toggled-text"),a.setAttribute("data-toggled-text",l)});if(y.present(e,A)){this.layout(function(){y.remove(e,A)});if(!r){t.doLayout();return}this.layout(function(){r.style.cssText="",i.innerHTML=""}),t.doLayout();return}s&&(o=this.sandbox.createElement("DIV"),o.innerHTML=s,n.retinize(o),u=this.constrainMedia(o),this.layout(function(){i.appendChild(o)})),r&&this.layout(function(){c=Math.max(i.offsetHeight,u),r.style.cssText="height:"+c+"px"}),this.layout(function(){y.add(e,A)}),t.doLayout()},recalculateStreamHeight:function(e){var t=b.one(T,this.element,"DIV"),n=b.one(N,this.element,"DIV"),r=b.one(C,this.element,"DIV");this.layout(m.bind(function(){var i=t.offsetHeight+(n?n.offsetHeight:0),s=e||this.sandbox.height();r.style.cssText="height:"+(s-i-2)+"px",this.noscrollbar&&this.hideStreamScrollBar()},this))},handleResize:function(e,n){var r=Math.min(this.dimensions.DEFAULT_WIDTH,Math.max(this.dimensions.MIN_WIDTH,Math.min(this.predefinedWidth||this.dimensions.DEFAULT_WIDTH,e)));if(r==this.width&&n==this.height)return;this.width=r,this.height=n,this.setNarrow(),this.constrainMedia(this.element,this.contentWidth(r)),this.staticTimeline?this.layout(m.bind(function(){this.height=this.element.offsetHeight,this.sandbox.height(this.height)},this)):this.recalculateStreamHeight(n),t.doLayoutAsync()}}),e(I)})});
    -provide("tfw/widget/embed",function(e){using("tfw/widget/base","tfw/widget/syndicatedbase","util/datetime","tfw/util/params","dom/classname","dom/get","util/env","util/promise","util/util","util/throttle","util/twitter","tfw/util/article","tfw/util/data","tfw/util/tracking",function(t,n,r,i,s,o,u,a,f,l,c,h,p,d){function w(e,t,n,r){var i=o.one("subject",e,"BLOCKQUOTE"),s=o.one("reply",e,"BLOCKQUOTE"),u=i&&i.getAttribute("data-tweet-id"),a=s&&s.getAttribute("data-tweet-id"),l={},c={};if(!u)return;l[u]={item_type:0},d.enqueue({page:"tweet",section:"subject",component:"tweet",action:"results"},f.aug({},t,{item_ids:[u],item_details:l}),!0,r);if(!a)return;c[a]={item_type:0},d.enqueue({page:"tweet",section:"conversation",component:"tweet",action:"results"},f.aug({},t,{item_ids:[a],item_details:c,associations:{4:{association_id:u,association_type:4}}}),!0,r)}function E(e,t,n){var r={};if(!e)return;r[e]={item_type:0},d.enqueue({page:"tweet",section:"subject",component:"rawembedcode",action:"no_results"},{client_version:v,widget_origin:h.url(),widget_frame:h.frameUrl(),message:t,item_ids:[e],item_details:r},!0,n)}function S(e,t,n,r){g[e]=g[e]||[],g[e].push({s:n,f:r,lang:t})}function x(){b.length&&twttr.widgets.load(b)}function T(e){if(!e)return;var t,r,i;n.apply(this,[e]),t=this.params(),r=this.srcEl&&this.srcEl.getElementsByTagName("A"),i=r&&r[r.length-1],this.hideThread=(t.conversation||this.dataAttr("conversation"))=="none"||~f.indexOf(this.classAttr,"tw-hide-thread"),this.hideCard=(t.cards||this.dataAttr("cards"))=="hidden"||~f.indexOf(this.classAttr,"tw-hide-media");if((t.align||this.attr("align"))=="left"||~f.indexOf(this.classAttr,"tw-align-left"))this.align="left";else if((t.align||this.attr("align"))=="right"||~f.indexOf(this.classAttr,"tw-align-right"))this.align="right";else if((t.align||this.attr("align"))=="center"||~f.indexOf(this.classAttr,"tw-align-center"))this.align="center",this.containerWidth>this.dimensions.MIN_WIDTH*(1/.7)&&this.width>this.containerWidth*.7&&(this.width=this.containerWidth*.7);this.narrow=t.narrow||this.width<=this.dimensions.NARROW_WIDTH,this.narrow&&this.classAttr.push("var-narrow"),this.tweetId=t.tweetId||i&&c.status(i.href)}var v="2.0",m="tweetembed",g={},y=[],b=[];T.prototype=new n,f.aug(T.prototype,{renderedClassNames:"twitter-tweet twitter-tweet-rendered",dimensions:{DEFAULT_HEIGHT:"0",DEFAULT_WIDTH:"500",NARROW_WIDTH:"350",MIN_WIDTH:"220",MIN_HEIGHT:"0",WIDE_MEDIA_PADDING:32,NARROW_MEDIA_PADDING:32},create:function(e){var t=this.sandbox.createElement("div"),r;t.innerHTML=e,r=t.children[0]||!1;if(!r)return;return this.theme=="dark"&&this.classAttr.push("thm-dark"),this.linkColor&&this.addSiteStyles(),s.present(r,"media-forward")&&(this.fullBleedPhoto=!0),this.augmentWidgets(r),n.retinize(r),r.id=this.id,r.className+=" "+this.classAttr.join(" "),r.lang=this.lang,this.sandbox.setTitle(r.getAttribute("data-iframe-title")||"Tweet"),this.sandbox.appendChild(r).then(f.bind(function(){this.renderResolver.fulfill(this.sandbox)},this)),this.sandbox.style({cssText:"",display:"block",maxWidth:"99%",minWidth:this.dimensions.MIN_WIDTH+"px",padding:"0",borderRadius:"5px",margin:"10px 0",border:"#ddd 1px solid",borderTopColor:"#eee",borderBottomColor:"#bbb",boxShadow:"0 1px 3px rgba(0,0,0,0.15)",position:"absolute",visibility:"hidden"}),this.layout(f.bind(function(){this.predefinedWidth=this.width,this.width=this.sandbox.width(this.width)},this),"Insert Sandbox"),this.setNarrow().then(f.bind(function(){this.constrainMedia(r,this.contentWidth(this.width))},this)),w(r,this.baseScribeData(),this.partner,this.dnt),r},render:function(e,n){var r="",i=this.tweetId,s,o;return i?(o=new a(function(e){s=e}),this.hideCard&&(r+="c"),this.hideThread&&(r+="t"),r&&(i+="-"+r),this.rendered().then(f.bind(function(e){this.srcEl&&this.srcEl.parentNode&&this.layout(f.bind(function(){this.srcEl&&this.srcEl.parentNode&&this.srcEl.parentNode.removeChild(this.srcEl)},this),"Remove Embed Code"),this.align=="center"?e.style({margin:"7px auto",cssFloat:"none"}):this.align&&(this.width==this.dimensions.DEFAULT_WIDTH&&(this.predefinedWidth=this.width=this.dimensions.NARROW_WIDTH),e.style({cssFloat:this.align})),this.layout(f.bind(function(){this.height=this.sandbox.height(this.element.offsetHeight)},this)).then(f.bind(function(){return t.doLayoutAsync(),this.layout(f.bind(function(){this.height=this.sandbox.height(this.element.offsetHeight)},this))},this)).then(f.bind(function(){e.onresize(f.bind(this.handleResize,this))},this)),e.style({position:"static",visibility:"visible"}),t.doLayoutAsync()},this)),S(i,this.lang,f.bind(function(n){this.ready().then(f.bind(function(){this.element=this.create(n),this.readTimestampTranslations(),this.updateTimeStamps(),this.bindIntentHandlers(),t.doLayoutAsync(),s.fulfill(this.sandbox.element())},this))},this),f.bind(function(){E(this.tweetId,this.partner,this.dnt),s.fulfill(this.srcEl)},this)),y.push(o),n&&o.then(n),o):a.fulfill(this.srcEl)},augmentWidgets:function(e){var t=o.one("twitter-follow-button",e,"A");if(!t)return;t.setAttribute("data-related",this.related),t.setAttribute("data-partner",this.partner),t.setAttribute("data-dnt",this.dnt),t.setAttribute("data-show-screen-name","false"),b.push(t.parentNode)},addUrlParams:function(e){var t=this,n={related:this.related,partner:this.partner,original_referer:h.url(),tw_p:m};return this.addUrlParams=i(n,function(e){var n=o.ancestor(".tweet",e,t.element);return{tw_i:n.getAttribute("data-tweet-id")}}),this.addUrlParams(e)},baseScribeData:function(){return{client_version:v,widget_origin:h.url(),widget_frame:h.frameUrl(),message:this.partner}},handleResize:function(e){var n=Math.min(this.dimensions.DEFAULT_WIDTH,Math.max(this.dimensions.MIN_WIDTH,Math.min(this.predefinedWidth||this.dimensions.DEFAULT_WIDTH,e)));if(n==this.width)return;this.width=n,this.setNarrow(),this.constrainMedia(this.element,this.contentWidth(n)),this.layout(f.bind(function(){this.height=this.element.offsetHeight,this.sandbox.height(this.height)},this),"Embed Resize"),t.doLayoutAsync()},readTimestampTranslations:function(){var e=this.element,t="data-dt-",n=e.getAttribute(t+"months")||"";this.datetime=new r(f.compact({phrases:{AM:e.getAttribute(t+"am"),PM:e.getAttribute(t+"pm")},months:n.split("|"),formats:{full:e.getAttribute(t+"full")}}))},updateTimeStamps:function(){var e=o.one("long-permalink",this.element,"A"),n=e.getAttribute("data-datetime"),r=n&&this.datetime.localTimeStamp(n),i=e.getElementsByTagName("TIME")[0];if(!r)return;this.layout(function(){if(i&&i.innerHTML){i.innerHTML=r;return}e.innerHTML=r},"Update Timestamp"),t.doLayoutAsync()}}),T.fetchAndRender=function(){var e=g,n=[],r,i;g={};if(e.keys)n=e.keys();else for(r in e)e.hasOwnProperty(r)&&n.push(r);if(!n.length)return;d.initPostLogging(),i=e[n[0]][0].lang,p.tweets({ids:n.sort(),lang:i,complete:function(n){f.forIn(n,function(t,n){var r=e[t];f.forEach(r,function(e){e.s&&e.s.call(this,n)}),delete e[t]}),t.doLayout(),f.forIn(e,function(e,t){f.forEach(t,function(t){t.f&&t.f.call(this,e)})}),t.doLayout()}}),a.every.apply(null,y).then(function(){x(),d.flush()})},t.afterLoad(T.fetchAndRender),e(T)})});
    -provide("dom/textsize",function(e){function n(e,t,n){var r=[],i=0,s;for(;s=n[i];i++)r.push(s[0]),r.push(s[1]);return e+t+r.join(":")}function r(e){var t=e||"";return t.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})}var t={};e(function(e,i,s){var o=document.createElement("span"),u={},a="",f,l=0,c=0,h=[];s=s||[],i=i||"",a=n(e,i,s);if(t[a])return t[a];o.className=i+" twitter-measurement";try{for(;f=s[l];l++)o.style[f[0]]=f[1]}catch(p){for(;f=s[c];c++)h.push(r(f[0])+":"+f[1]);o.setAttribute("style",h.join(";")+";")}return o.innerHTML=e,document.body.appendChild(o),u.width=o.clientWidth||o.offsetWidth,u.height=o.clientHeight||o.offsetHeight,document.body.removeChild(o),delete o,t[a]=u})});
    -provide("tfw/widget/tweetbase",function(e){using("util/util","tfw/widget/base","util/querystring","util/twitter",function(t,n,r,i){function s(e){if(!e)return;var t;n.apply(this,[e]),t=this.params(),this.text=t.text||this.dataAttr("text"),this.text&&/\+/.test(this.text)&&!/ /.test(this.text)&&(this.text=this.text.replace(/\+/g," ")),this.align=t.align||this.dataAttr("align")||"",this.via=t.via||this.dataAttr("via"),this.placeid=t.placeid||this.dataAttr("placeid"),this.hashtags=t.hashtags||this.dataAttr("hashtags"),this.screen_name=i.screenName(t.screen_name||t.screenName||this.dataAttr("button-screen-name")),this.url=t.url||this.dataAttr("url")}s.prototype=new n,t.aug(s.prototype,{parameters:function(){var e={text:this.text,url:this.url,related:this.related,lang:this.lang,placeid:this.placeid,original_referer:location.href,id:this.id,screen_name:this.screen_name,hashtags:this.hashtags,partner:this.partner,dnt:this.dnt,_:+(new Date)};return t.compact(e),r.encode(e)}}),e(s)})});
    -provide("tfw/widget/tweetbutton",function(e){using("tfw/widget/tweetbase","util/util","util/querystring","util/uri","util/twitter","dom/textsize",function(t,n,r,i,s,o){function l(e){t.apply(this,[e]);var r=this.params(),o=r.count||this.dataAttr("count"),l=r.size||this.dataAttr("size"),c=i.getScreenNameFromPage();this.classAttr.push("twitter-tweet-button");if(r.type=="hashtag"||~n.indexOf(this.classAttr,"twitter-hashtag-button"))this.type="hashtag",this.classAttr.push("twitter-hashtag-button");else if(r.type=="mention"||~n.indexOf(this.classAttr,"twitter-mention-button"))this.type="mention",this.classAttr.push("twitter-mention-button");this.counturl=r.counturl||this.dataAttr("counturl"),this.searchlink=r.searchlink||this.dataAttr("searchlink"),this.button_hashtag=s.hashTag(r.button_hashtag||r.hashtag||this.dataAttr("button-hashtag"),!1),this.size=l=="large"?"l":"m",this.type?(this.count="none",c&&(this.related=this.related?c+","+this.related:c)):(this.text=this.text||u,this.url=this.url||i.getCanonicalURL()||a,this.count=~n.indexOf(f,o)?o:"horizontal",this.count=this.count=="vertical"&&this.size=="l"?"none":this.count,this.via=this.via||c)}var u=document.title,a=encodeURI(location.href),f=["vertical","horizontal","none"];l.prototype=new t,n.aug(l.prototype,{parameters:function(){var e={text:this.text,url:this.url,via:this.via,related:this.related,count:this.count,lang:this.lang,counturl:this.counturl,searchlink:this.searchlink,placeid:this.placeid,original_referer:location.href,id:this.id,size:this.size,type:this.type,screen_name:this.screen_name,button_hashtag:this.button_hashtag,hashtags:this.hashtags,align:this.align,partner:this.partner,dnt:this.dnt,_:+(new Date)};return n.compact(e),r.encode(e)},height:function(){return this.count=="vertical"?62:this.size=="m"?20:28},width:function(){var e={ver:8,cnt:14,btn:24,xlcnt:18,xlbtn:38},t=this.count=="vertical",r=this.type=="hashtag"&&this.button_hashtag?"Tweet %{hashtag}":this.type=="mention"&&this.screen_name?"Tweet to %{name}":"Tweet",i=this._(r,{name:"@"+this.screen_name,hashtag:"#"+this.button_hashtag}),s=this._("K"),u=this._("100K+"),a=(t?"8888":"88888")+s,f=0,l=0,c=0,h=0,p=this.styles.base,d=p;return~n.indexOf(["ja","ko"],this.lang)?a+=this._("10k unit"):a=a.length>u.length?a:u,t?(d=p.concat(this.styles.vbubble),h=e.ver,c=e.btn):this.size=="l"?(p=d=p.concat(this.styles.large),c=e.xlbtn,h=e.xlcnt):(c=e.btn,h=e.cnt),this.count!="none"&&(l=o(a,"",d).width+h),f=o(i,"",p.concat(this.styles.button)).width+c,t?f>l?f:l:this.calculatedWidth=f+l},render:function(e,t){var r=twttr.widgets.config.assetUrl()+"/widgets/tweet_button.1387492107.html#"+this.parameters(),i;return this.count&&this.classAttr.push("twitter-count-"+this.count),i=this.create(r,this.dimensions(),{title:this._("Twitter Tweet Button")}).then(n.bind(function(e){return this.element=e},this)),t&&i.then(t),i}}),e(l)})});
    -provide("tfw/widget/follow",function(e){using("util/util","tfw/widget/base","util/querystring","util/uri","util/twitter","util/promise","dom/textsize",function(t,n,r,i,s,o,u){function a(e){if(!e)return;var t,r,i,o;n.apply(this,[e]),t=this.params(),r=t.size||this.dataAttr("size"),i=t.showScreenName||this.dataAttr("show-screen-name"),o=t.count||this.dataAttr("count"),this.classAttr.push("twitter-follow-button"),this.showScreenName=i!="false",this.showCount=t.showCount!==!1&&this.dataAttr("show-count")!="false",o=="none"&&(this.showCount=!1),this.explicitWidth=t.width||this.dataAttr("width")||"",this.screenName=t.screen_name||t.screenName||s.screenName(this.attr("href")),this.preview=t.preview||this.dataAttr("preview")||"",this.align=t.align||this.dataAttr("align")||"",this.size=r=="large"?"l":"m"}a.prototype=new n,t.aug(a.prototype,{parameters:function(){var e={screen_name:this.screenName,lang:this.lang,show_count:this.showCount,show_screen_name:this.showScreenName,align:this.align,id:this.id,preview:this.preview,size:this.size,partner:this.partner,dnt:this.dnt,_:+(new Date)};return t.compact(e),r.encode(e)},width:function(){if(this.calculatedWidth)return this.calculatedWidth;if(this.explicitWidth)return this.explicitWidth;var e={cnt:13,btn:24,xlcnt:22,xlbtn:38},n=this.showScreenName?"Follow %{screen_name}":"Follow",r=this._(n,{screen_name:"@"+this.screenName}),i=~t.indexOf(["ja","ko"],this.lang)?this._("10k unit"):this._("M"),s=this._("%{followers_count} followers",{followers_count:"88888"+i}),o=0,a=0,f,l,c=this.styles.base;return this.size=="l"?(c=c.concat(this.styles.large),f=e.xlbtn,l=e.xlcnt):(f=e.btn,l=e.cnt),this.showCount&&(a=u(s,"",c).width+l),o=u(r,"",c.concat(this.styles.button)).width+f,this.calculatedWidth=o+a},render:function(e,n){if(!this.screenName)return o.reject("Missing Screen Name").then(n);var r=twttr.widgets.config.assetUrl()+"/widgets/follow_button.1387492107.html#"+this.parameters(),i=this.create(r,this.dimensions(),{title:this._("Twitter Follow Button")}).then(t.bind(function(e){return this.element=e},this));return n&&i.then(n),i}}),e(a)})});
    -!function(){window.twttr=window.twttr||{},twttr.host=twttr.host||"platform.twitter.com",using("util/domready","util/env",function(e,t){function n(e){return(e||!/^http\:$/.test(window.location.protocol))&&!twttr.ignoreSSL?"https":"http"}if(t.ie6())return;if(twttr.widgets&&twttr.widgets.loaded)return twttr.widgets.load(),!1;if(twttr.init)return!1;twttr.init=!0,twttr._e=twttr._e||[],twttr.ready=twttr.ready||function(e){twttr.widgets&&twttr.widgets.loaded?e(twttr):twttr._e.push(e)},using.path.length||(using.path=n()+"://"+twttr.host+"/js"),twttr.ignoreSSL=twttr.ignoreSSL||!1;var r=[];twttr.events={bind:function(e,t){return r.push([e,t])}},e(function(){using("tfw/widget/base","tfw/widget/follow","tfw/widget/tweetbutton","tfw/widget/embed","tfw/widget/timeline","tfw/widget/intent","tfw/util/article","util/events","util/util",function(e,t,i,s,o,u,a,f,l){function m(e){var t=twttr.host;return n(e)=="https"&&twttr.secureHost&&(t=twttr.secureHost),n(e)+"://"+t}function g(){using("tfw/hub/client",function(e){twttr.events.hub=e.init(p),e.init(p,!0)})}var c,h,p={widgets:{"a.twitter-share-button":i,"a.twitter-mention-button":i,"a.twitter-hashtag-button":i,"a.twitter-follow-button":t,"blockquote.twitter-tweet":s,"a.twitter-timeline":o,"div.twitter-timeline":o,body:u}},d=twttr.events&&twttr.events.hub?twttr.events:{},v;p.assetUrl=m,twttr.widgets=twttr.widgets||{},l.aug(twttr.widgets,{config:{assetUrl:m},load:function(t){e.init(p),e.embed(t),twttr.widgets.loaded=!0},createShareButton:function(t,n,r,s){if(!t||!n)return r&&r(!1);s=l.aug({},s||{},{url:t,targetEl:n});var o=new i(s);e.doLayout(),o.render(p,r)},createHashtagButton:function(t,n,r,s){if(!t||!n)return r&&r(!1);s=l.aug({},s||{},{hashtag:t,targetEl:n,type:"hashtag"});var o=new i(s);e.doLayout(),o.render(p,r)},createMentionButton:function(t,n,r,s){if(!t||!n)return r&&r(!1);s=l.aug({},s||{},{screenName:t,targetEl:n,type:"mention"});var o=new i(s);e.doLayout(),o.render(p,r)},createFollowButton:function(n,r,i,s){if(!n||!r)return i&&i(!1);s=l.aug({},s||{},{screenName:n,targetEl:r});var o=new t(s);e.doLayout(),o.render(p,i)},createTweet:function(t,n,r,i){if(!t||!n)return r&&r(!1);i=l.aug({},i||{},{tweetId:t,targetEl:n});var o=new s(i);e.doLayout(),o.render(p,r),s.fetchAndRender()},createTimeline:function(t,n,r,i){if(!t||!n)return r&&r(!1);i=l.aug({},i||{},{widgetId:t,targetEl:n});var s=new o(i);e.doLayout(),s.render(p,r)}}),l.aug(twttr.events,d,f.Emitter),v=twttr.events.bind,twttr.events.bind=function(e,t){g(),this.bind=v,this.bind(e,t)};for(c=0;h=r[c];c++)twttr.events.bind(h[0],h[1]);for(c=0;h=twttr._e[c];c++)h(twttr);twttr.ready=function(e){e(twttr)},/twitter\.com(\:\d+)?$/.test(document.location.host)&&(twttr.widgets.createTimelinePreview=function(t,n,r){if(!p||!n)return r&&r(!1);var i=new o({previewParams:t,targetEl:n,linkColor:t.link_color,theme:t.theme,height:t.height});e.doLayout(),i.render(p,r)}),twttr.widgets.createTweetEmbed=twttr.widgets.createTweet,twttr.widgets.load()})})})}()});
    \ No newline at end of file
    diff --git a/license.html b/license.html
    new file mode 100644
    index 0000000..529b3e6
    --- /dev/null
    +++ b/license.html
    @@ -0,0 +1,466 @@
    +<!DOCTYPE html>
    +<html lang="en">
    +  <head>
    +    <meta charset="utf-8"/>
    +    <title>Scribble - License</title>
    +    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    +    <meta name="description" content="">
    +    <meta name="author" content="">
    +    <meta name="keywords" content="">
    +    <meta name="generator" content="JBake">
    +
    +    <!-- css -->
    +    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
    +    <link href="css/bootstrap.min.css" rel="stylesheet">
    +    <link href="css/asciidoctor.css" rel="stylesheet">
    +    <link href="css/base.css" rel="stylesheet">
    +    <link href="css/styles.css" rel="stylesheet">
    +    <link href="css/prettify.css" rel="stylesheet">
    +
    +    <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
    +    <!--[if lt IE 9]>
    +      <script src="js/html5shiv.min.js"></script>
    +    <![endif]-->
    +
    +    <!-- Fav and touch icons -->
    +    <!--<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">
    +    <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">-->
    +    <link rel="shortcut icon" href="favicon.ico">
    +  </head>
    +  <body onload="prettyPrint()" data-spy="scroll" data-offset="80" data-target="#toc">
    +    <div id="wrap">
    +      <div class="dropup">
    +        <script>
    +            window.addEventListener('load', function() {
    +                 renderTabzilla("Scribble", "https://scribble.github.io", true );
    +            }, false);
    +        </script>
    +      </div>
    +
    +  <!-- Fixed navbar -->
    +    <nav class="navbar navbar-fixed-top" role="navigation">
    +      <div class="container">
    +        <!-- Brand and toggle get grouped for better mobile display -->
    +<!--
    +-->
    +        <div class="navbar-header">
    +          <button class="navbar-toggle collapsed" data-target="#bs-example-navbar-collapse-1" data-toggle="collapse" type="button">
    +            <span class="sr-only">Toggle navigation</span>
    +            <span class="icon-bar"></span>
    +            <span class="icon-bar"></span>
    +            <span class="icon-bar"></span>
    +          </button>
    +        </div>
    +        <!-- Collect the nav links, forms, and other content for toggling -->
    +        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
    +          <ul class="nav navbar-nav">
    +            <li><a href="index.html">Home</a></li>
    +            <li>
    +              <a href="docs/overview/getting-started.html">Getting
    +                  Started</a>
    +            </li>
    +                <li class="dropdown">
    +                  <a aria-expanded="false" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
    +                    Documentation<span class="caret"></span>
    +                  </a>
    +                  <ul class="dropdown-menu" role="menu">
    +                    <!--<li>
    +                      <a href="docs/user/user-guide.html">User Documentation</a>
    +                    </li>-->
    +                    <li>
    +                      <a href="docs/scribble-java.html#QUICK">Quick Start (Scribble-Java)</a>
    +                    </li>
    +                    <li>
    +                      <a href="docs/scribble-java.html#SCRIBCORE">Language Reference</a>
    +                    </li>
    +                    <li class="menu-item dropdown dropdown-submenu">
    +                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Java Tooling</a>
    +                      <ul class="dropdown-menu">
    +                        <li class="menu-item ">
    +                          <a href="docs/scribble-java.html">API Generation Tutorial</a>
    +                        </li>
    +                      </ul>
    +                    </li>
    +                    <li class="menu-item dropdown dropdown-submenu">
    +                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Scala Tooling</a>
    +                      <ul class="dropdown-menu">
    +                        <li class="menu-item ">
    +                          <a href="docs/scribble-scala.html">API Generation Tutorial and Demo Artifact</a>
    +                        </li>
    +                      </ul>
    +                    </li>
    +                  </ul>
    +                </li>
    +
    +            <li class=""><a href="downloads.html">Downloads</a></li>
    +            <li class="dropdown"><a aria-expanded="false" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">
    +              Community
    +              <span class="caret"></span>
    +            </a>
    +            <ul class="dropdown-menu" role="menu">
    +
    +              <li>
    +                <a href="https://groups.google.com/forum/#!forum/scribble-user">User Forum</a>
    +              </li>
    +              <li>
    +                <a href="https://groups.google.com/forum/#!forum/scribble-lang">Scribble Language Forum</a>
    +              </li>
    +              <li>
    +                <a href="community/issues.html">Reporting Issues</a>
    +              </li>
    +              <li>
    +                <a href="blog.html">Blog</a>
    +              </li>
    +              <li>
    +                <a href="community/collaborators.html">Collaborators</a>
    +              </li>
    +              <li>
    +                <a href="license.html">License</a>
    +              </li>
    +              <li>
    +                <a href="https://travis-ci.org/scribble">CI Builds</a>
    +              </li>
    +            </ul></li>
    +          </ul>
    +        </div>
    +      </div>
    +    </nav>
    +
    +      <section class="main-banner">
    +        <div class="container">
    +          <h1>License</h1>
    +          <p>Scribble is released under Apache License v 2.0</p>
    +        </div>
    +      </section>
    +
    +	<!--<p><em>23 January 2015</em></p>-->
    +
    +	<section>
    +      <div class="container">
    +        <div class="sect1">
    +<h2 id="_apache_license">Apache License</h2>
    +<div class="sectionbody">
    +<div class="paragraph">
    +<p><br></p>
    +</div>
    +<div class="sect2">
    +<h3 id="_version_2_0_january_2004">Version 2.0, January 2004</h3>
    +
    +</div>
    +<div class="sect2">
    +<h3 id="__a_href_http_www_apache_org_licenses_class_bare_http_www_apache_org_licenses_a"><a href="http://www.apache.org/licenses/" class="bare">http://www.apache.org/licenses/</a></h3>
    +<div class="paragraph">
    +<p><br>
    +<br></p>
    +</div>
    +<div class="sect3">
    +<h4 id="_terms_and_conditions_for_use_reproduction_and_distribution">TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</h4>
    +<div class="olist glossary">
    +<ol class="glossary">
    +<li>
    +<p>Definitions.</p>
    +<div class="dlist">
    +<dl>
    +<dt class="hdlist1">"License"</dt>
    +<dd>
    +<p> shall mean the terms and conditions for use, reproduction,
    +and distribution as defined by Sections 1 through 9 of this document.</p>
    +</dd>
    +<dt class="hdlist1">"Licensor"</dt>
    +<dd>
    +<p> shall mean the copyright owner or entity authorized by
    +the copyright owner that is granting the License.</p>
    +</dd>
    +<dt class="hdlist1">"Legal Entity"</dt>
    +<dd>
    +<p> shall mean the union of the acting entity and all
    +other entities that control, are controlled by, or are under common
    +control with that entity. For the purposes of this definition,
    +"control" means (i) the power, direct or indirect, to cause the
    +direction or management of such entity, whether by contract or
    +otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +outstanding shares, or (iii) beneficial ownership of such entity.</p>
    +</dd>
    +<dt class="hdlist1">"You"</dt>
    +<dd>
    +<p> (or "Your") shall mean an individual or Legal Entity
    +exercising permissions granted by this License.</p>
    +</dd>
    +<dt class="hdlist1">"Source"</dt>
    +<dd>
    +<p> form shall mean the preferred form for making modifications,
    +including but not limited to software source code, documentation
    +source, and configuration files.</p>
    +</dd>
    +<dt class="hdlist1">"Object"</dt>
    +<dd>
    +<p> form shall mean any form resulting from mechanical
    +transformation or translation of a Source form, including but
    +not limited to compiled object code, generated documentation,
    +and conversions to other media types.</p>
    +</dd>
    +<dt class="hdlist1">"Work"</dt>
    +<dd>
    +<p> shall mean the work of authorship, whether in Source or
    +Object form, made available under the License, as indicated by a
    +copyright notice that is included in or attached to the work
    +(an example is provided in the Appendix below).</p>
    +</dd>
    +<dt class="hdlist1">"Derivative Works"</dt>
    +<dd>
    +<p> shall mean any work, whether in Source or Object
    +form, that is based on (or derived from) the Work and for which the
    +editorial revisions, annotations, elaborations, or other modifications
    +represent, as a whole, an original work of authorship. For the purposes
    +of this License, Derivative Works shall not include works that remain
    +separable from, or merely link (or bind by name) to the interfaces of,
    +the Work and Derivative Works thereof.</p>
    +</dd>
    +<dt class="hdlist1">"Contribution"</dt>
    +<dd>
    +<p> shall mean any work of authorship, including
    +the original version of the Work and any modifications or additions
    +to that Work or Derivative Works thereof, that is intentionally
    +submitted to Licensor for inclusion in the Work by the copyright owner
    +or by an individual or Legal Entity authorized to submit on behalf of
    +the copyright owner. For the purposes of this definition, "submitted"
    +means any form of electronic, verbal, or written communication sent
    +to the Licensor or its representatives, including but not limited to
    +communication on electronic mailing lists, source code control systems,
    +and issue tracking systems that are managed by, or on behalf of, the
    +Licensor for the purpose of discussing and improving the Work, but
    +excluding communication that is conspicuously marked or otherwise
    +designated in writing by the copyright owner as "Not a Contribution."</p>
    +</dd>
    +<dt class="hdlist1">"Contributor"</dt>
    +<dd>
    +<p> shall mean Licensor and any individual or Legal Entity
    +on behalf of whom a Contribution has been received by Licensor and
    +subsequently incorporated within the Work.</p>
    +</dd>
    +</dl>
    +</div>
    +</li>
    +<li>
    +<p>Grant of Copyright License. Subject to the terms and conditions of
    +this License, each Contributor hereby grants to You a perpetual,
    +worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +copyright license to reproduce, prepare Derivative Works of,
    +publicly display, publicly perform, sublicense, and distribute the
    +Work and such Derivative Works in Source or Object form.</p>
    +</li>
    +<li>
    +<p>Grant of Patent License. Subject to the terms and conditions of
    +this License, each Contributor hereby grants to You a perpetual,
    +worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +(except as stated in this section) patent license to make, have made,
    +use, offer to sell, sell, import, and otherwise transfer the Work,
    +where such license applies only to those patent claims licensable
    +by such Contributor that are necessarily infringed by their
    +Contribution(s) alone or by combination of their Contribution(s)
    +with the Work to which such Contribution(s) was submitted. If You
    +institute patent litigation against any entity (including a
    +cross-claim or counterclaim in a lawsuit) alleging that the Work
    +or a Contribution incorporated within the Work constitutes direct
    +or contributory patent infringement, then any patent licenses
    +granted to You under this License for that Work shall terminate
    +as of the date such litigation is filed.</p>
    +</li>
    +<li>
    +<p>Redistribution. You may reproduce and distribute copies of the
    +Work or Derivative Works thereof in any medium, with or without
    +modifications, and in Source or Object form, provided that You
    +meet the following conditions:</p>
    +<div class="olist loweralpha">
    +<ol class="loweralpha" type="a">
    +<li>
    +<p>You must give any other recipients of the Work or
    +Derivative Works a copy of this License; and</p>
    +</li>
    +<li>
    +<p>You must cause any modified files to carry prominent notices
    +stating that You changed the files; and</p>
    +</li>
    +<li>
    +<p>You must retain, in the Source form of any Derivative Works
    +that You distribute, all copyright, patent, trademark, and
    +attribution notices from the Source form of the Work,
    +excluding those notices that do not pertain to any part of
    +the Derivative Works; and</p>
    +</li>
    +<li>
    +<p>If the Work includes a "NOTICE" text file as part of its
    +distribution, then any Derivative Works that You distribute must
    +include a readable copy of the attribution notices contained
    +within such NOTICE file, excluding those notices that do not
    +pertain to any part of the Derivative Works, in at least one
    +of the following places: within a NOTICE text file distributed
    +as part of the Derivative Works; within the Source form or
    +documentation, if provided along with the Derivative Works; or,
    +within a display generated by the Derivative Works, if and
    +wherever such third-party notices normally appear. The contents
    +of the NOTICE file are for informational purposes only and
    +do not modify the License. You may add Your own attribution
    +notices within Derivative Works that You distribute, alongside
    +or as an addendum to the NOTICE text from the Work, provided
    +that such additional attribution notices cannot be construed
    +as modifying the License.</p>
    +<div class="admonitionblock note">
    +<table>
    +<tr>
    +<td class="icon">
    +<div class="title">Note</div>
    +</td>
    +<td class="content">
    +You may add Your own copyright statement to Your modifications and
    +may provide additional or different license terms and conditions
    +for use, reproduction, or distribution of Your modifications, or
    +for any such Derivative Works as a whole, provided Your use,
    +reproduction, and distribution of the Work otherwise complies with
    +the conditions stated in this License.
    +</td>
    +</tr>
    +</table>
    +</div>
    +</li>
    +</ol>
    +</div>
    +</li>
    +<li>
    +<p>Submission of Contributions. Unless You explicitly state otherwise,
    +any Contribution intentionally submitted for inclusion in the Work
    +by You to the Licensor shall be under the terms and conditions of
    +this License, without any additional terms or conditions.
    +Notwithstanding the above, nothing herein shall supersede or modify
    +the terms of any separate license agreement you may have executed
    +with Licensor regarding such Contributions.</p>
    +</li>
    +<li>
    +<p>Trademarks. This License does not grant permission to use the trade
    +names, trademarks, service marks, or product names of the Licensor,
    +except as required for reasonable and customary use in describing the
    +origin of the Work and reproducing the content of the NOTICE file.</p>
    +</li>
    +<li>
    +<p>Disclaimer of Warranty. Unless required by applicable law or
    +agreed to in writing, Licensor provides the Work (and each
    +Contributor provides its Contributions) on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +implied, including, without limitation, any warranties or conditions
    +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +PARTICULAR PURPOSE. You are solely responsible for determining the
    +appropriateness of using or redistributing the Work and assume any
    +risks associated with Your exercise of permissions under this License.</p>
    +</li>
    +<li>
    +<p>Limitation of Liability. In no event and under no legal theory,
    +whether in tort (including negligence), contract, or otherwise,
    +unless required by applicable law (such as deliberate and grossly
    +negligent acts) or agreed to in writing, shall any Contributor be
    +liable to You for damages, including any direct, indirect, special,
    +incidental, or consequential damages of any character arising as a
    +result of this License or out of the use or inability to use the
    +Work (including but not limited to damages for loss of goodwill,
    +work stoppage, computer failure or malfunction, or any and all
    +other commercial damages or losses), even if such Contributor
    +has been advised of the possibility of such damages.</p>
    +</li>
    +<li>
    +<p>Accepting Warranty or Additional Liability. While redistributing
    +the Work or Derivative Works thereof, You may choose to offer,
    +and charge a fee for, acceptance of support, warranty, indemnity,
    +or other liability obligations and/or rights consistent with this
    +License. However, in accepting such obligations, You may act only
    +on Your own behalf and on Your sole responsibility, not on behalf
    +of any other Contributor, and only if You agree to indemnify,
    +defend, and hold each Contributor harmless for any liability
    +incurred by, or claims asserted against, such Contributor by reason
    +of your accepting any such warranty or additional liability.
    +<br>
    +<br></p>
    +</li>
    +</ol>
    +</div>
    +</div>
    +<div class="sect3">
    +<h4 id="_end_of_terms_and_conditions">END OF TERMS AND CONDITIONS</h4>
    +<div class="paragraph">
    +<p><strong>APPENDIX:</strong> How to apply the Apache License to your work.</p>
    +</div>
    +<div class="paragraph">
    +<p>To apply the Apache License to your work, attach the following
    +boilerplate notice, with the fields enclosed by brackets "{}"
    +replaced with your own identifying information. (Don&#8217;t include
    +the brackets!)  The text should be enclosed in the appropriate
    +comment syntax for the file format. We also recommend that a
    +file or class name and description of purpose be included on the
    +same "printed page" as the copyright notice for easier
    +identification within third-party archives.</p>
    +</div>
    +<div class="paragraph">
    +<p><em>Copyright {yyyy} {name of copyright owner}</em></p>
    +</div>
    +<div class="paragraph">
    +<p>Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at</p>
    +</div>
    +<div class="paragraph">
    +<p><a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a></p>
    +</div>
    +<div class="literalblock">
    +<div class="content">
    +<pre> Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.</pre>
    +</div>
    +</div>
    +</div>
    +</div>
    +</div>
    +</div>
    +      </div>
    +    </section>
    +
    +		</div>
    +    </div>
    +    
    +    <section>
    +      <div class="container">
    +        <p class="muted credit">&copy; Scribble.org, 2009-2015 | Baked with <a href="http://jbake.org">JBake v2.3.2</a></p>
    +    <p id="forkongithubp"><span id="forkongithub">
    +      <a href="https://github.com/scribble" class="bg-grey">
    +        Fork me on GitHub
    +      </a>
    +    </span></p>
    +      </div>
    +    </section>
    +    
    +    <!-- javascript -->
    +    <!-- Placed at the end of the document so the pages load faster -->
    +    <!-- js -->
    +    <script src="js/jquery-1.11.2.min.js"></script>
    +    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
    +    <script src="js/behavior.js"></script>
    +    <script src="js/prettify.js"></script>
    +    
    +<script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-xxxyyyxy-z']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +
    +  </body>
    +</html>
    diff --git a/params.json b/params.json
    deleted file mode 100644
    index e7e1a7e..0000000
    --- a/params.json
    +++ /dev/null
    @@ -1 +0,0 @@
    -{"tagline":"Protocol Language","body":"### What is Scribble?\r\nScribble is a language to describe application-level protocols among communicating systems. A protocol represents an agreement on how participating systems interact with each other. Without a protocol, it is hard to do a meaningful interaction: participants simply cannot communicate effectively, since they do not know when to expect the other parties to send their data, or whether the other party is ready to receive a datum it is sending. In fact it is not clear what kinds of data is to be used for each interaction. It is too costly to carry out communications based on guess works and with inevitable communication mismatch (synchronisation bugs). Simply, it is not feasible as an engineering practice.\r\n\r\nScribble presents a stratified description language:\r\n\r\n* The bottom layer is the type layer, in which we describe the bare skeleton of conversations structures as types for interactions (known in the literature as session type).\r\n* The assertion layer allows elaboration of a type-layer description using assertions.\r\n* Finally the third layer, protocol document layer, allows description of multiple protocols and constraints over them.\r\n\r\nThe latest version of the language specification can be found [here](langref.html)\r\n\r\n### A Simple Example\r\n\r\n```\r\nprotocol HelloWorld (role Me) {\r\n    Me introduces World;\r\n\r\n    Hello from Me to World;\r\n}\r\n```\r\n\r\n### How can it be used?\r\nThe development and validation of programs against protocol descriptions could proceed as follows:\r\n\r\n* A programmer specifies a set of protocols to be used in her application.\r\n* She can verify that those protocols are valid, free from livelocks and deadlocks.\r\n* She develops her application referring to those protocols, potentially using communication constructs available in the chosen programming language.\r\n* She validates her programs against protocols using a protocol checker, which detects lack of conformance.\r\n* At the execution time, a local monitor can validate messages with respect to given protocols, optionally blocking invalid messages from being delivered.\r\n\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration.","name":"Scribble"}
    \ No newline at end of file
    diff --git a/scribble-java.html b/scribble-java.html
    deleted file mode 100644
    index afcab8d..0000000
    --- a/scribble-java.html
    +++ /dev/null
    @@ -1,145 +0,0 @@
    -<!DOCTYPE html>
    -<html lang="en"><head>
    -<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    -    <meta charset="utf-8">
    -    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    -    <meta name="description" content="">
    -    <meta name="author" content="">
    -    <link rel="shortcut icon" href="imgs/pi-32x32x32.png">
    -
    -    <title>Scribble Java</title>
    -
    -    <link href="css/bootstrap.css" rel="stylesheet">
    -    <link href="css/scribble.css" rel="stylesheet">
    -
    -    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    -    <!--[if lt IE 9]>
    -      <script src="js/html5shiv.js"></script>
    -      <script src="js/respond.min.js"></script>
    -    <![endif]-->
    -  </head>
    -
    -  <body data-twttr-rendered="true">
    -
    -    <div class="container">
    -      <div class="jumbotron" style="position:relative">
    -        <a href="https://github.com/Scribble/scribble-java"><img style="position: absolute; top: 0; right: 0; border: 0;" src="imgs/forkme_right_red_aa0000.png" alt=""></a>
    -      </div>
    -      
    -      <div class="inner">        
    -
    -        <h2><i>Java Implementation</i></h2>
    -
    -          <div class="community row">
    -            <!-- Left side -->
    -            <div class="col-lg-9">
    -		<p>
    -		The features of the Java tooling are:
    -		</p>
    -	      <ul>
    -		<li>Eclipse based text editor with language support (keyword highlighting and content assist when using &lt;ctrl&gt;-space keys)</li>
    -		<li>Protocol validation rules, with errors displayed in Eclipse <i>Problems</i> view, or console (cli)</li>
    -		<li>Projection of <b>global</b> protocols to a <b>local</b> protocol per role</li>
    -		<li>Protocol monitor for verifying runtime behaviour against a protocol description</li>
    -		<li>Simulation of a message trace against protocol description(s)</li>
    -	      </ul>
    -	      <p>
    -	      The Java tools are provided as a set of plugins within the Eclipse IDE (Integrated Development Environment), or a command line distribution. To install the tools into Eclipse:
    -	      </p>
    -	      <ul>
    -		<li>Download Eclipse (see button on the right)</li>
    -		<li>When Eclipse has been launched, go to the <i>Help-> Install New Software...</i> menu item.
    -		This will show a dialog window.</li>
    -		<li>Enter the URL <a>http://download.jboss.org/scribble/tools/latest</a> into the <i>Work With</i> field and 
    -		press the <i>return</i> key.</li>
    -		<li>Select the <b>Scribble</b> top level node and press the <i>Next</i> button.</li>
    -		<li>Follow the instructions and restart the Eclipse tooling when requested.</li>
    -	      </ul>
    -	      <p>
    -		See the <i>Java User Guide</i> for information on how to use the tools within Eclipse or via the command line.
    -              </p>
    -	    </div>
    -
    -            <div class="col-lg-3">
    -	      <p>
    -		<div class="btn-group">
    -        	  <button type="button" class="btn btn-lg btn-success dropdown-toggle" data-toggle="dropdown">Documentation <span class="caret"></span></button>
    -        	  <ul class="dropdown-menu" role="menu">
    -          	    <li><a href="http://docs.jboss.org/scribble/latest/userguide/html/">User Guide (HTML)</a></li>
    -          	    <li><a href="http://docs.jboss.org/scribble/latest/userguide/pdf/Scribble_Java_User_Guide.pdf">User Guide (PDF)</a></li>
    -          	    <li><a href="http://docs.jboss.org/scribble/latest/developerguide/html/">Developer Guide (HTML)</a></li>
    -          	    <li><a href="http://docs.jboss.org/scribble/latest/developerguide/pdf/Scribble_Java_Developer_Guide.pdf">Developer Guide (PDF)</a></li>
    -          	    <li><a href="http://docs.jboss.org/scribble/latest/javadoc/">Javadoc</a></li>
    -        	  </ul>
    -      		</div>
    -	      </p>
    -       	      <p><a class="btn btn-lg btn-warning" href="https://community.jboss.org/en/scribble">User Forum</a></p>
    -       	      <p><a class="btn btn-lg btn-danger" href="https://issues.jboss.org/browse/SCRIBBLE">Report an Issue</a></p>
    -       	      <p><a class="btn btn-lg btn-info" href="http://www.eclipse.org/downloads/">Get Eclipse</a></p>
    -	    </div>
    - 
    -	  </div>
    -
    -          <!-- *** Community *** -->
    -          <div class="community row">
    -            <!-- Left side -->
    -            <div class="col-lg-6">
    -              <div class="citem">
    -                <h3>Latest Version <span class="version pull-right hide-480">0.3.0.Final</span></h3>
    -                <p>Released on 31st October, 2014.</p>
    -		<p>The release also contains a protocol editor (with content assist), protocol parser, validator, projection, monitor and trace simulator. This release introduces a command line distribution.</p>
    -                <div class="links">
    -                  <a href="http://downloads.jboss.org/scribble/tools/latest">Eclipse Update Site</a> |
    -                  <a href="http://downloads.jboss.org/scribble/tools/cli/scribble-0.3.0.Final.zip">Command Line</a> |
    -                  <a href="http://docs.jboss.org/scribble/latest/userguide/html">Docs (html)</a> |
    -                  <a href="http://docs.jboss.org/scribble/latest/userguide/pdf/Scribble_Java_User_Guide.pdf">Docs (pdf)</a> |
    -                  <a href="https://github.com/scribble/scribble-java/archive/0.3.0.Final.zip">Source</a>
    -                </div>
    -              </div>
    -              <div class="citem minor">
    -                <h3>Next Version (in dev) <span class="version pull-right hide-480">0.4.0-SNAPSHOT</span></h3>
    -                <p>This is what we're currently working on.  Now's a great time to take a look and offer suggestions!</p>
    -                <div class="links">
    -                  <a href="https://github.com/scribble/scribble-java/">Source on GitHub</a> |
    -                  <a href="https://github.com/scribble/scribble-java/tree/master/docs">Docs</a> |
    -                  <a href="http://community.jboss.org/en/scribble">Forum</a>
    -                </div>
    -              </div>
    -            </div>
    -            <!-- Right side -->
    -            <div class="col-lg-6">
    -              <div class="citem">
    -                <h3>Join the community</h3>
    -                <p>
    -                  We're always looking for collaboration!  If you'd like to get involved in the project by 
    -                  offering feedback or suggesting features, or developing code, here some some places you can find us:
    -                </p>
    -                <div class="links">
    -                  <a href="https://community.jboss.org/en/scribble/dev">Developer Forum</a> |
    -                  <a href="https://issues.jboss.org/browse/SCRIBBLE">Report a Bug or Feature Request</a>
    -                </div>
    -              </div>
    -            </div>
    -          </div>
    -      </div>
    -
    -      <!-- Site footer -->
    -      <div class="footer">
    -        scribble.org 2009-14
    -      </div>
    -
    -    </div> <!-- /container -->
    -
    -
    -    <!-- Bootstrap core JavaScript
    -    ================================================== -->
    -    <!-- Placed at the end of the document so the pages load faster -->
    -  
    -
    -<!--
    -<iframe style="display: none;" allowtransparency="true" id="rufous-sandbox" frameborder="0" scrolling="no"></iframe>
    --->
    -    <script src="js/jquery.js"></script>
    -    <script src="js/bootstrap.js"></script>
    -
    -</body></html>
    diff --git a/scribble-python.html b/scribble-python.html
    deleted file mode 100644
    index 62d34a1..0000000
    --- a/scribble-python.html
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -<!DOCTYPE html>
    -<html lang="en"><head>
    -<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    -    <meta charset="utf-8">
    -    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    -    <meta name="description" content="">
    -    <meta name="author" content="">
    -    <link rel="shortcut icon" href="imgs/pi-32x32x32.png">
    -
    -    <title>Scribble Python</title>
    -
    -    <link href="css/bootstrap.css" rel="stylesheet">
    -    <link href="css/scribble.css" rel="stylesheet">
    -
    -    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    -    <!--[if lt IE 9]>
    -      <script src="js/html5shiv.js"></script>
    -      <script src="js/respond.min.js"></script>
    -    <![endif]-->
    -  </head>
    -
    -  <body>
    -
    -    <div class="container">
    -      <div class="jumbotron" style="position:relative">
    -        <a href="https://github.com/Scribble/scribble-python"><img style="position: absolute; top: 0; right: 0; border: 0;" src="imgs/forkme_right_red_aa0000.png" alt=""></a>
    -      </div>
    -      
    -      <div class="inner">        
    -
    -        <h2><i>Python Implementation</i></h2>
    -
    -      </div>
    -
    -      <!-- Site footer -->
    -      <div class="footer">
    -        scribble.org 2009-14
    -      </div>
    -
    -    </div> <!-- /container -->
    -
    -
    -    <!-- Bootstrap core JavaScript
    -    ================================================== -->
    -    <!-- Placed at the end of the document so the pages load faster -->
    -  
    -
    -<iframe style="display: none;" allowtransparency="true" id="rufous-sandbox" frameborder="0" scrolling="no"></iframe></body></html>
    diff --git a/sitemap.xml b/sitemap.xml
    new file mode 100644
    index 0000000..af905f7
    --- /dev/null
    +++ b/sitemap.xml
    @@ -0,0 +1,43 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    +    <url>
    +        <loc>http://www.scribble.orgcommunity/collaborators.html</loc>
    +        <lastmod>2015-05-30</lastmod>
    +    </url>
    +    <url>
    +        <loc>http://www.scribble.orgcommunity/discussions.html</loc>
    +        <lastmod>2015-04-21</lastmod>
    +    </url>
    +    <url>
    +        <loc>http://www.scribble.orgcommunity/issues.html</loc>
    +        <lastmod>2015-04-21</lastmod>
    +    </url>
    +    <url>
    +        <loc>http://www.scribble.orgdocs/dev/developer-guide.html</loc>
    +        <lastmod>2015-04-21</lastmod>
    +    </url>
    +    <url>
    +        <loc>http://www.scribble.orgdocs/index.html</loc>
    +        <lastmod>2015-04-21</lastmod>
    +    </url>
    +    <url>
    +        <loc>http://www.scribble.orgdocs/overview/getting-started.html</loc>
    +        <lastmod>2015-04-21</lastmod>
    +    </url>
    +    <url>
    +        <loc>http://www.scribble.orgdocs/user/user-guide.html</loc>
    +        <lastmod>2015-04-21</lastmod>
    +    </url>
    +    <url>
    +        <loc>http://www.scribble.orgdownloads.html</loc>
    +        <lastmod>2015-02-27</lastmod>
    +    </url>
    +    <url>
    +        <loc>http://www.scribble.orglicense.html</loc>
    +        <lastmod>2015-01-23</lastmod>
    +    </url>
    +    <url>
    +        <loc>http://www.scribble.orgblog/2015/2015-03-03-1.html</loc>
    +        <lastmod>2015-03-03</lastmod>
    +    </url>
    +</urlset>
    \ No newline at end of file
    diff --git a/stylesheets/print.css b/stylesheets/print.css
    deleted file mode 100644
    index 541695b..0000000
    --- a/stylesheets/print.css
    +++ /dev/null
    @@ -1,226 +0,0 @@
    -html, body, div, span, applet, object, iframe,
    -h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    -a, abbr, acronym, address, big, cite, code,
    -del, dfn, em, img, ins, kbd, q, s, samp,
    -small, strike, strong, sub, sup, tt, var,
    -b, u, i, center,
    -dl, dt, dd, ol, ul, li,
    -fieldset, form, label, legend,
    -table, caption, tbody, tfoot, thead, tr, th, td,
    -article, aside, canvas, details, embed, 
    -figure, figcaption, footer, header, hgroup, 
    -menu, nav, output, ruby, section, summary,
    -time, mark, audio, video {
    -  margin: 0;
    -  padding: 0;
    -  border: 0;
    -  font-size: 100%;
    -  font: inherit;
    -  vertical-align: baseline;
    -}
    -/* HTML5 display-role reset for older browsers */
    -article, aside, details, figcaption, figure, 
    -footer, header, hgroup, menu, nav, section {
    -  display: block;
    -}
    -body {
    -  line-height: 1;
    -}
    -ol, ul {
    -  list-style: none;
    -}
    -blockquote, q {
    -  quotes: none;
    -}
    -blockquote:before, blockquote:after,
    -q:before, q:after {
    -  content: '';
    -  content: none;
    -}
    -table {
    -  border-collapse: collapse;
    -  border-spacing: 0;
    -}
    -body {
    -  font-size: 13px;
    -  line-height: 1.5; 
    -  font-family: 'Helvetica Neue', Helvetica, Arial, serif;
    -  color: #000;
    -}
    -
    -a {
    -  color: #d5000d;
    -  font-weight: bold;
    -}
    -
    -header {
    -  padding-top: 35px;
    -  padding-bottom: 10px;
    -}
    -
    -header h1 {
    -  font-weight: bold;
    -  letter-spacing: -1px;
    -  font-size: 48px;
    -  color: #303030;
    -  line-height: 1.2;
    -}
    -
    -header h2 {
    -  letter-spacing: -1px;
    -  font-size: 24px;
    -  color: #aaa;
    -  font-weight: normal;
    -  line-height: 1.3;
    -}
    -#downloads {
    -  display: none;
    -}
    -#main_content {
    -  padding-top: 20px;
    -}
    -
    -code, pre {
    -  font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;
    -  color: #222;
    -  margin-bottom: 30px;
    -  font-size: 12px;
    -}
    -
    -code {
    -  padding: 0 3px;
    -}
    -
    -pre {
    -  border: solid 1px #ddd;
    -  padding: 20px;
    -  overflow: auto;
    -}
    -pre code {
    -  padding: 0;
    -}
    -
    -ul, ol, dl {
    -  margin-bottom: 20px;
    -}
    -
    -
    -/* COMMON STYLES */
    -
    -table {
    -  width: 100%;
    -  border: 1px solid #ebebeb;
    -}
    -
    -th {
    -  font-weight: 500;
    -}
    -
    -td {
    -  border: 1px solid #ebebeb;
    -  text-align: center; 
    -  font-weight: 300;
    -}
    -
    -form {
    -  background: #f2f2f2;
    -  padding: 20px;
    -  
    -}
    -
    -
    -/* GENERAL ELEMENT TYPE STYLES */
    -
    -h1 {
    -  font-size: 2.8em;
    -} 
    -
    -h2 {
    -  font-size: 22px;
    -  font-weight: bold;
    -  color: #303030;
    -  margin-bottom: 8px;
    -} 
    -
    -h3 {
    -  color: #d5000d;
    -  font-size: 18px;
    -  font-weight: bold;
    -  margin-bottom: 8px;
    -} 
    - 
    -h4 {
    -  font-size: 16px;
    -  color: #303030;
    -  font-weight: bold;
    -} 
    -
    -h5 {
    -  font-size: 1em;
    -  color: #303030;
    -} 
    -
    -h6 {
    -  font-size: .8em;
    -  color: #303030;
    -} 
    -
    -p {
    -  font-weight: 300;
    -  margin-bottom: 20px;
    -}
    - 
    -a {
    -  text-decoration: none;
    -}
    -
    -p a {
    -  font-weight: 400;
    -}
    -
    -blockquote {
    -  font-size: 1.6em;
    -  border-left: 10px solid #e9e9e9;
    -  margin-bottom: 20px;
    -  padding: 0 0 0 30px;
    -}
    -
    -ul li {
    -  list-style: disc inside;
    -  padding-left: 20px;
    -}
    -
    -ol li {
    -  list-style: decimal inside;
    -  padding-left: 3px;
    -}
    -
    -dl dd {
    -  font-style: italic;
    -  font-weight: 100;
    -}
    -
    -footer {
    -  margin-top: 40px;
    -  padding-top: 20px;
    -  padding-bottom: 30px;
    -  font-size: 13px;
    -  color: #aaa;
    -}
    -
    -footer a {
    -  color: #666;
    -}
    -
    -/* MISC */
    -.clearfix:after {
    -  clear: both;
    -  content: '.';
    -  display: block;
    -  visibility: hidden;
    -  height: 0;
    -}
    -
    -.clearfix {display: inline-block;}
    -* html .clearfix {height: 1%;}
    -.clearfix {display: block;}
    \ No newline at end of file
    diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css
    deleted file mode 100644
    index c6a6452..0000000
    --- a/stylesheets/pygment_trac.css
    +++ /dev/null
    @@ -1,69 +0,0 @@
    -.highlight  { background: #ffffff; }
    -.highlight .c { color: #999988; font-style: italic } /* Comment */
    -.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
    -.highlight .k { font-weight: bold } /* Keyword */
    -.highlight .o { font-weight: bold } /* Operator */
    -.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
    -.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
    -.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
    -.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
    -.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
    -.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
    -.highlight .ge { font-style: italic } /* Generic.Emph */
    -.highlight .gr { color: #aa0000 } /* Generic.Error */
    -.highlight .gh { color: #999999 } /* Generic.Heading */
    -.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
    -.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
    -.highlight .go { color: #888888 } /* Generic.Output */
    -.highlight .gp { color: #555555 } /* Generic.Prompt */
    -.highlight .gs { font-weight: bold } /* Generic.Strong */
    -.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */
    -.highlight .gt { color: #aa0000 } /* Generic.Traceback */
    -.highlight .kc { font-weight: bold } /* Keyword.Constant */
    -.highlight .kd { font-weight: bold } /* Keyword.Declaration */
    -.highlight .kn { font-weight: bold } /* Keyword.Namespace */
    -.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
    -.highlight .kr { font-weight: bold } /* Keyword.Reserved */
    -.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
    -.highlight .m { color: #009999 } /* Literal.Number */
    -.highlight .s { color: #d14 } /* Literal.String */
    -.highlight .na { color: #008080 } /* Name.Attribute */
    -.highlight .nb { color: #0086B3 } /* Name.Builtin */
    -.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
    -.highlight .no { color: #008080 } /* Name.Constant */
    -.highlight .ni { color: #800080 } /* Name.Entity */
    -.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
    -.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
    -.highlight .nn { color: #555555 } /* Name.Namespace */
    -.highlight .nt { color: #000080 } /* Name.Tag */
    -.highlight .nv { color: #008080 } /* Name.Variable */
    -.highlight .ow { font-weight: bold } /* Operator.Word */
    -.highlight .w { color: #bbbbbb } /* Text.Whitespace */
    -.highlight .mf { color: #009999 } /* Literal.Number.Float */
    -.highlight .mh { color: #009999 } /* Literal.Number.Hex */
    -.highlight .mi { color: #009999 } /* Literal.Number.Integer */
    -.highlight .mo { color: #009999 } /* Literal.Number.Oct */
    -.highlight .sb { color: #d14 } /* Literal.String.Backtick */
    -.highlight .sc { color: #d14 } /* Literal.String.Char */
    -.highlight .sd { color: #d14 } /* Literal.String.Doc */
    -.highlight .s2 { color: #d14 } /* Literal.String.Double */
    -.highlight .se { color: #d14 } /* Literal.String.Escape */
    -.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
    -.highlight .si { color: #d14 } /* Literal.String.Interpol */
    -.highlight .sx { color: #d14 } /* Literal.String.Other */
    -.highlight .sr { color: #009926 } /* Literal.String.Regex */
    -.highlight .s1 { color: #d14 } /* Literal.String.Single */
    -.highlight .ss { color: #990073 } /* Literal.String.Symbol */
    -.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
    -.highlight .vc { color: #008080 } /* Name.Variable.Class */
    -.highlight .vg { color: #008080 } /* Name.Variable.Global */
    -.highlight .vi { color: #008080 } /* Name.Variable.Instance */
    -.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
    -
    -.type-csharp .highlight .k { color: #0000FF }
    -.type-csharp .highlight .kt { color: #0000FF }
    -.type-csharp .highlight .nf { color: #000000; font-weight: normal }
    -.type-csharp .highlight .nc { color: #2B91AF }
    -.type-csharp .highlight .nn { color: #000000 }
    -.type-csharp .highlight .s { color: #A31515 }
    -.type-csharp .highlight .sc { color: #A31515 }
    diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css
    deleted file mode 100644
    index 1df6b70..0000000
    --- a/stylesheets/stylesheet.css
    +++ /dev/null
    @@ -1,521 +0,0 @@
    -/* http://meyerweb.com/eric/tools/css/reset/ 
    -   v2.0 | 20110126
    -   License: none (public domain)
    -*/
    -html, body, div, span, applet, object, iframe,
    -h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    -a, abbr, acronym, address, big, cite, code,
    -del, dfn, em, img, ins, kbd, q, s, samp,
    -small, strike, strong, sub, sup, tt, var,
    -b, u, i, center,
    -dl, dt, dd, ol, ul, li,
    -fieldset, form, label, legend,
    -table, caption, tbody, tfoot, thead, tr, th, td,
    -article, aside, canvas, details, embed, 
    -figure, figcaption, footer, header, hgroup, 
    -menu, nav, output, ruby, section, summary,
    -time, mark, audio, video {
    -	margin: 0;
    -	padding: 0;
    -	border: 0;
    -	font-size: 100%;
    -	font: inherit;
    -	vertical-align: baseline;
    -}
    -/* HTML5 display-role reset for older browsers */
    -article, aside, details, figcaption, figure, 
    -footer, header, hgroup, menu, nav, section {
    -	display: block;
    -}
    -body {
    -	line-height: 1;
    -}
    -ol, ul {
    -	list-style: none;
    -}
    -blockquote, q {
    -	quotes: none;
    -}
    -blockquote:before, blockquote:after,
    -q:before, q:after {
    -	content: '';
    -	content: none;
    -}
    -table {
    -	border-collapse: collapse;
    -	border-spacing: 0;
    -}
    -
    -/* LAYOUT STYLES */
    -body {
    -  font-size: 15px;
    -  line-height: 1.5; 
    -  background: #fafafa url(../images/body-bg.jpg) 0 0 repeat;
    -  font-family: 'Helvetica Neue', Helvetica, Arial, serif;
    -  font-weight: 400;
    -  color: #666;
    -}
    -
    -a {
    -  color: #2879d0;
    -}
    -a:hover {
    -  color: #2268b2;
    -}
    -
    -header {
    -  padding-top: 40px;
    -  padding-bottom: 40px;
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  background: #2e7bcf url(../images/header-bg.jpg) 0 0 repeat-x;
    -  border-bottom: solid 1px #275da1;
    -}
    -
    -header h1 {
    -  letter-spacing: -1px;
    -  font-size: 72px;
    -  color: #fff;
    -  line-height: 1;
    -  margin-bottom: 0.2em;
    -  width: 540px;
    -}
    -
    -header h2 {
    -  font-size: 26px;
    -  color: #9ddcff;
    -  font-weight: normal;
    -  line-height: 1.3;
    -  width: 540px;
    -  letter-spacing: 0;
    -}
    -
    -.inner {
    -  position: relative;
    -  width: 940px;
    -  margin: 0 auto;
    -}
    -
    -#content-wrapper {
    -  border-top: solid 1px #fff;
    -  padding-top: 30px;
    -}
    -
    -#main-content {
    -  width: 640px;
    -  float: left;
    -}
    -
    -#main-content img {
    -  max-width: 100%;
    -}
    -
    -aside#sidebar {
    -  width: 250px;
    -  padding-left: 20px;
    -  min-height: 504px;
    -  float: right;
    -  background: transparent url(../images/sidebar-bg.jpg) 0 0 no-repeat;
    -  font-size: 12px;
    -  line-height: 1.3;
    -}
    -
    -aside#sidebar p.repo-owner,
    -aside#sidebar p.repo-owner a {
    -  font-weight: bold;
    -}
    -
    -#downloads {
    -  margin-bottom: 40px;
    -}
    -
    -a.button {
    -  width: 134px;
    -  height: 58px;
    -  line-height: 1.2;
    -  font-size: 23px;
    -  color: #fff;
    -  padding-left: 68px;
    -  padding-top: 22px;
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -}
    -a.button small {
    -  display: block;
    -  font-size: 11px;
    -}
    -header a.button {
    -  position: absolute;
    -  right: 0;
    -  top: 0;
    -  background: transparent url(../images/github-button.png) 0 0 no-repeat;
    -}
    -aside a.button {
    -  width: 138px;
    -  padding-left: 64px;
    -  display: block;
    -  background: transparent url(../images/download-button.png) 0 0 no-repeat;
    -  margin-bottom: 20px;
    -  font-size: 21px;
    -}
    -
    -code, pre {
    -  font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
    -  color: #222;
    -  margin-bottom: 30px;
    -  font-size: 13px;
    -}
    -
    -code {
    -  background-color: #f2f8fc;
    -  border: solid 1px #dbe7f3;
    -  padding: 0 3px;
    -}
    -
    -pre {
    -  padding: 20px;
    -  background: #fff;
    -  text-shadow: none;
    -  overflow: auto;
    -  border: solid 1px #f2f2f2;
    -}
    -pre code {
    -  color: #2879d0;
    -  background-color: #fff;
    -  border: none;
    -  padding: 0;
    -}
    -
    -ul, ol, dl {
    -  margin-bottom: 20px;
    -}
    -
    -
    -/* COMMON STYLES */
    -
    -hr {
    -  height: 1px;
    -  line-height: 1px;
    -  margin-top: 1em;
    -  padding-bottom: 1em;
    -  border: none;
    -  background: transparent url('../images/hr.png') 0 0 no-repeat;
    -}
    -
    -table {
    -  width: 100%;
    -  border: 1px solid #ebebeb;
    -}
    -
    -th {
    -  font-weight: 500;
    -}
    -
    -td {
    -  border: 1px solid #ebebeb;
    -  text-align: center; 
    -  font-weight: 300;
    -}
    -
    -form {
    -  background: #f2f2f2;
    -  padding: 20px;
    -  
    -}
    -
    -
    -/* GENERAL ELEMENT TYPE STYLES */
    -
    -#main-content h1 {
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  font-size: 2.8em;
    -  letter-spacing: -1px;
    -  color: #474747;
    -} 
    -
    -#main-content h1:before {
    -  content: "/";
    -  color: #9ddcff;
    -  padding-right: 0.3em;
    -  margin-left: -0.9em;
    -}
    -
    -#main-content h2 {
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  font-size: 22px;
    -  font-weight: bold;
    -  margin-bottom: 8px;
    -  color: #474747;
    -} 
    -#main-content h2:before {
    -  content: "//";
    -  color: #9ddcff;
    -  padding-right: 0.3em;
    -  margin-left: -1.5em;
    -}
    -
    -#main-content h3 {
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  font-size: 18px;
    -  font-weight: bold;
    -  margin-top: 24px;
    -  margin-bottom: 8px;
    -  color: #474747;
    -} 
    -
    -aside#sidebar h3 {
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  font-size: 18px;
    -  font-weight: bold;
    -  margin-top: 24px;
    -  margin-bottom: 8px;
    -  color: #474747;
    -}
    -
    -#main-content h3:before {
    -  content: "///";
    -  color: #9ddcff;
    -  padding-right: 0.3em;
    -  margin-left: -2em;
    -}
    -
    -#main-content h4 {
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  font-size: 15px;
    -  font-weight: bold;
    -  color: #474747;
    -} 
    -
    -aside#sidebar h4 {
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  font-size: 15px;
    -  font-weight: bold;
    -  color: #474747;
    -} 
    -
    -aside#sidebar h4:before {
    -  content: ">";
    -  color: #9ddcff;
    -  padding-right: 0.3em;
    -  margin-left: 1.0em;
    -}
    -
    -h4:before {
    -  content: "////";
    -  color: #9ddcff;
    -  padding-right: 0.3em;
    -  margin-left: -2.8em;
    -}
    -
    -#main-content h5 {
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  font-size: 14px;
    -  color: #474747;
    -} 
    -h5:before {
    -  content: "/////";
    -  color: #9ddcff;
    -  padding-right: 0.3em;
    -  margin-left: -3.2em;
    -}
    -
    -aside#sidebar h5 {
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  font-size: 14px;
    -  color: #474747;
    -} 
    -aside#sidebar h5:before {
    -  content: "";
    -  color: #9ddcff;
    -  padding-right: 0.3em;
    -  margin-left: 3.0em;
    -}
    -
    -#main-content h6 {
    -  font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; 
    -  font-size: .8em;
    -  color: #474747;
    -} 
    -h6:before {
    -  content: "//////";
    -  color: #9ddcff;
    -  padding-right: 0.3em;
    -  margin-left: -3.7em;
    -}
    -
    -p {
    -  margin-bottom: 20px;
    -}
    - 
    -a {
    -  text-decoration: none;
    -}
    -
    -p a {
    -  font-weight: 400;
    -}
    -
    -blockquote {
    -  font-size: 1.6em;
    -  border-left: 10px solid #e9e9e9;
    -  margin-bottom: 20px;
    -  padding: 0 0 0 30px;
    -}
    -
    -quotation {
    -  font-size: 0.8em;
    -  margin-bottom: 30px;
    -  font-style: italic;
    -}
    -
    -ul li {
    -  list-style: disc inside;
    -  padding-left: 20px;
    -}
    -
    -ol li {
    -  list-style: decimal inside;
    -  padding-left: 3px;
    -}
    -
    -dl dd {
    -  font-style: italic;
    -  font-weight: 100;
    -}
    -
    -footer {
    -  background: transparent url('../images/hr.png') 0 0 no-repeat;
    -  margin-top: 40px;
    -  padding-top: 20px;
    -  padding-bottom: 30px;
    -  font-size: 13px;
    -  color: #aaa;
    -  text-align: center;
    -}
    -
    -footer a {
    -  color: #666;
    -}
    -footer a:hover {
    -  color: #444;
    -}
    -
    -/* MISC */
    -.clearfix:after {
    -  clear: both;
    -  content: '.';
    -  display: block;
    -  visibility: hidden;
    -  height: 0;
    -}
    -
    -.clearfix {display: inline-block;}
    -* html .clearfix {height: 1%;}
    -.clearfix {display: block;}
    -
    -/* #Media Queries
    -================================================== */
    -
    -/* Smaller than standard 960 (devices and browsers) */
    -@media only screen and (max-width: 959px) {}
    -
    -/* Tablet Portrait size to standard 960 (devices and browsers) */
    -@media only screen and (min-width: 768px) and (max-width: 959px) {
    -  .inner {
    -    width: 740px;
    -  }
    -  header h1, header h2 {
    -    width: 340px;
    -  }
    -  header h1 {
    -    font-size: 60px;
    -  }
    -  header h2 {
    -    font-size: 30px;
    -  }
    -  #main-content {
    -    width: 490px;
    -  }
    -  #main-content h1:before,
    -  #main-content h2:before,
    -  #main-content h3:before,
    -  #main-content h4:before,
    -  #main-content h5:before,
    -  #main-content h6:before {
    -    content: none;
    -    padding-right: 0;
    -    margin-left: 0;
    -  }
    -}
    -
    -/* All Mobile Sizes (devices and browser) */
    -@media only screen and (max-width: 767px) {
    -  .inner {
    -    width: 93%;
    -  }
    -  header {
    -    padding: 20px 0;
    -  }
    -  header .inner {
    -    position: relative;
    -  }
    -  header h1, header h2 {
    -    width: 100%;
    -  }
    -  header h1 {
    -    font-size: 48px;
    -  }
    -  header h2 {
    -    font-size: 24px;
    -  }
    -  header a.button {
    -    background-image: none;
    -    width: auto;
    -    height: auto;
    -    display: inline-block;
    -    margin-top: 15px;
    -    padding: 5px 10px;
    -    position: relative;
    -    text-align: center;
    -    font-size: 13px;
    -    line-height: 1;
    -    background-color: #9ddcff;
    -    color: #2879d0;
    -    -moz-border-radius: 5px;
    -    -webkit-border-radius: 5px;                     
    -    border-radius: 5px;    
    -  }
    -  header a.button small {
    -    font-size: 13px;
    -    display: inline;
    -  }
    -  #main-content,
    -  aside#sidebar {
    -    float: none;
    -    width: 100% ! important;
    -  }
    -  aside#sidebar {
    -    background-image: none;
    -    margin-top: 20px;
    -    border-top: solid 1px #ddd;
    -    padding: 20px 0;
    -    min-height: 0;
    -  }
    -  aside#sidebar a.button {
    -    display: none;
    -  }
    -  #main-content h1:before,
    -  #main-content h2:before,
    -  #main-content h3:before,
    -  #main-content h4:before,
    -  #main-content h5:before,
    -  #main-content h6:before {
    -    content: none;
    -    padding-right: 0;
    -    margin-left: 0;
    -  }
    -}
    -
    -/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
    -@media only screen and (min-width: 480px) and (max-width: 767px) {}
    -
    -/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
    -@media only screen and (max-width: 479px) {}