diff --git a/web/index.js b/web/index.js
new file mode 100644
index 0000000..5a50c47
--- /dev/null
+++ b/web/index.js
@@ -0,0 +1,38 @@
+var express = require('express'),
+ swig = require('swig'),
+ path = require('path'),
+ chalk = require('chalk'),
+ Monitor = require('../lib/mon'),
+ Debug = require('../lib/util/debug');
+
+module.exports = runServer;
+
+function runServer(port, debug){
+ var app = express();
+
+ // all environments
+ app.set('view engine', 'html');
+ app.set('views', path.join(__dirname, 'views'));
+ app.engine('html', swig.renderFile);
+ app.use(express.static(path.join(__dirname, 'public')));
+
+ var log = Debug(({namespace: 'pm2-gui', debug: !!debug}));
+ // router
+ require('../lib/util/router')(app, log);
+
+ if (!port || isNaN(port)) {
+ port = 8088;
+ }
+
+ var server = require('http').Server(app);
+ var io = require('socket.io')(server);
+ server.listen(port);
+ log.i('http', 'Web server of', chalk.bold.underline('Unitech/PM2'), 'is listening on port', chalk.bold(port));
+
+ var mon = Monitor({
+ sockio: io,
+ debug : !!debug
+ });
+
+ mon.run();
+}
\ No newline at end of file
diff --git a/web/public/css/animation.min.css b/web/public/css/animation.min.css
new file mode 100644
index 0000000..280671d
--- /dev/null
+++ b/web/public/css/animation.min.css
@@ -0,0 +1,2863 @@
+@charset "UTF-8";
+/*!
+Animate.css - http://daneden.me/animate
+Licensed under the MIT license - http://opensource.org/licenses/MIT
+
+Copyright (c) 2013 Daniel Eden
+*/
+.animated {
+ -webkit-animation-duration: 1s;
+ animation-duration: 1s;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both
+}
+
+.animated.infinite {
+ -webkit-animation-iteration-count: infinite;
+ animation-iteration-count: infinite
+}
+
+.animated.hinge {
+ -webkit-animation-duration: 2s;
+ animation-duration: 2s
+}
+
+@-webkit-keyframes bounce {
+ 0%, 100%, 20%, 53%, 80% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0)
+ }
+ 40%, 43% {
+ -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060);
+ transition-timing-function: cubic-bezier(0.755, .050, .855, .060);
+ -webkit-transform: translate3d(0, -30px, 0);
+ transform: translate3d(0, -30px, 0)
+ }
+ 70% {
+ -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060);
+ transition-timing-function: cubic-bezier(0.755, .050, .855, .060);
+ -webkit-transform: translate3d(0, -15px, 0);
+ transform: translate3d(0, -15px, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(0, -4px, 0);
+ transform: translate3d(0, -4px, 0)
+ }
+}
+
+@keyframes bounce {
+ 0%, 100%, 20%, 53%, 80% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ -webkit-transform: translate3d(0, 0, 0);
+ -ms-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0)
+ }
+ 40%, 43% {
+ -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060);
+ transition-timing-function: cubic-bezier(0.755, .050, .855, .060);
+ -webkit-transform: translate3d(0, -30px, 0);
+ -ms-transform: translate3d(0, -30px, 0);
+ transform: translate3d(0, -30px, 0)
+ }
+ 70% {
+ -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060);
+ transition-timing-function: cubic-bezier(0.755, .050, .855, .060);
+ -webkit-transform: translate3d(0, -15px, 0);
+ -ms-transform: translate3d(0, -15px, 0);
+ transform: translate3d(0, -15px, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(0, -4px, 0);
+ -ms-transform: translate3d(0, -4px, 0);
+ transform: translate3d(0, -4px, 0)
+ }
+}
+
+.bounce {
+ -webkit-animation-name: bounce;
+ animation-name: bounce;
+ -webkit-transform-origin: center bottom;
+ -ms-transform-origin: center bottom;
+ transform-origin: center bottom
+}
+
+@-webkit-keyframes flash {
+ 0%, 100%, 50% {
+ opacity: 1
+ }
+ 25%, 75% {
+ opacity: 0
+ }
+}
+
+@keyframes flash {
+ 0%, 100%, 50% {
+ opacity: 1
+ }
+ 25%, 75% {
+ opacity: 0
+ }
+}
+
+.flash {
+ -webkit-animation-name: flash;
+ animation-name: flash
+}
+
+@-webkit-keyframes pulse {
+ 0% {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05)
+ }
+ 100% {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+}
+
+@keyframes pulse {
+ 0% {
+ -webkit-transform: scale3d(1, 1, 1);
+ -ms-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ -ms-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05)
+ }
+ 100% {
+ -webkit-transform: scale3d(1, 1, 1);
+ -ms-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+}
+
+.pulse {
+ -webkit-animation-name: pulse;
+ animation-name: pulse
+}
+
+@-webkit-keyframes rubberBand {
+ 0% {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+ 30% {
+ -webkit-transform: scale3d(1.25, .75, 1);
+ transform: scale3d(1.25, .75, 1)
+ }
+ 40% {
+ -webkit-transform: scale3d(0.75, 1.25, 1);
+ transform: scale3d(0.75, 1.25, 1)
+ }
+ 50% {
+ -webkit-transform: scale3d(1.15, .85, 1);
+ transform: scale3d(1.15, .85, 1)
+ }
+ 65% {
+ -webkit-transform: scale3d(.95, 1.05, 1);
+ transform: scale3d(.95, 1.05, 1)
+ }
+ 75% {
+ -webkit-transform: scale3d(1.05, .95, 1);
+ transform: scale3d(1.05, .95, 1)
+ }
+ 100% {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+}
+
+@keyframes rubberBand {
+ 0% {
+ -webkit-transform: scale3d(1, 1, 1);
+ -ms-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+ 30% {
+ -webkit-transform: scale3d(1.25, .75, 1);
+ -ms-transform: scale3d(1.25, .75, 1);
+ transform: scale3d(1.25, .75, 1)
+ }
+ 40% {
+ -webkit-transform: scale3d(0.75, 1.25, 1);
+ -ms-transform: scale3d(0.75, 1.25, 1);
+ transform: scale3d(0.75, 1.25, 1)
+ }
+ 50% {
+ -webkit-transform: scale3d(1.15, .85, 1);
+ -ms-transform: scale3d(1.15, .85, 1);
+ transform: scale3d(1.15, .85, 1)
+ }
+ 65% {
+ -webkit-transform: scale3d(.95, 1.05, 1);
+ -ms-transform: scale3d(.95, 1.05, 1);
+ transform: scale3d(.95, 1.05, 1)
+ }
+ 75% {
+ -webkit-transform: scale3d(1.05, .95, 1);
+ -ms-transform: scale3d(1.05, .95, 1);
+ transform: scale3d(1.05, .95, 1)
+ }
+ 100% {
+ -webkit-transform: scale3d(1, 1, 1);
+ -ms-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+}
+
+.rubberBand {
+ -webkit-animation-name: rubberBand;
+ animation-name: rubberBand
+}
+
+@-webkit-keyframes shake {
+ 0%, 100% {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0)
+ }
+ 10%, 30%, 50%, 70%, 90% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0)
+ }
+ 20%, 40%, 60%, 80% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0)
+ }
+}
+
+@keyframes shake {
+ 0%, 100% {
+ -webkit-transform: translate3d(0, 0, 0);
+ -ms-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0)
+ }
+ 10%, 30%, 50%, 70%, 90% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ -ms-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0)
+ }
+ 20%, 40%, 60%, 80% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ -ms-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0)
+ }
+}
+
+.shake {
+ -webkit-animation-name: shake;
+ animation-name: shake
+}
+
+@-webkit-keyframes swing {
+ 20% {
+ -webkit-transform: rotate3d(0, 0, 1, 15deg);
+ transform: rotate3d(0, 0, 1, 15deg)
+ }
+ 40% {
+ -webkit-transform: rotate3d(0, 0, 1, -10deg);
+ transform: rotate3d(0, 0, 1, -10deg)
+ }
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 5deg);
+ transform: rotate3d(0, 0, 1, 5deg)
+ }
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, -5deg);
+ transform: rotate3d(0, 0, 1, -5deg)
+ }
+ 100% {
+ -webkit-transform: rotate3d(0, 0, 1, 0deg);
+ transform: rotate3d(0, 0, 1, 0deg)
+ }
+}
+
+@keyframes swing {
+ 20% {
+ -webkit-transform: rotate3d(0, 0, 1, 15deg);
+ -ms-transform: rotate3d(0, 0, 1, 15deg);
+ transform: rotate3d(0, 0, 1, 15deg)
+ }
+ 40% {
+ -webkit-transform: rotate3d(0, 0, 1, -10deg);
+ -ms-transform: rotate3d(0, 0, 1, -10deg);
+ transform: rotate3d(0, 0, 1, -10deg)
+ }
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 5deg);
+ -ms-transform: rotate3d(0, 0, 1, 5deg);
+ transform: rotate3d(0, 0, 1, 5deg)
+ }
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, -5deg);
+ -ms-transform: rotate3d(0, 0, 1, -5deg);
+ transform: rotate3d(0, 0, 1, -5deg)
+ }
+ 100% {
+ -webkit-transform: rotate3d(0, 0, 1, 0deg);
+ -ms-transform: rotate3d(0, 0, 1, 0deg);
+ transform: rotate3d(0, 0, 1, 0deg)
+ }
+}
+
+.swing {
+ -webkit-transform-origin: top center;
+ -ms-transform-origin: top center;
+ transform-origin: top center;
+ -webkit-animation-name: swing;
+ animation-name: swing
+}
+
+@-webkit-keyframes tada {
+ 0% {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+ 10%, 20% {
+ -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)
+ }
+ 30%, 50%, 70%, 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)
+ }
+ 40%, 60%, 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)
+ }
+ 100% {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+}
+
+@keyframes tada {
+ 0% {
+ -webkit-transform: scale3d(1, 1, 1);
+ -ms-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+ 10%, 20% {
+ -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+ -ms-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)
+ }
+ 30%, 50%, 70%, 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ -ms-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)
+ }
+ 40%, 60%, 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ -ms-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)
+ }
+ 100% {
+ -webkit-transform: scale3d(1, 1, 1);
+ -ms-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+}
+
+.tada {
+ -webkit-animation-name: tada;
+ animation-name: tada
+}
+
+@-webkit-keyframes wobble {
+ 0% {
+ -webkit-transform: none;
+ transform: none
+ }
+ 15% {
+ -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg)
+ }
+ 30% {
+ -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg)
+ }
+ 45% {
+ -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg)
+ }
+ 60% {
+ -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg)
+ }
+ 75% {
+ -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg)
+ }
+ 100% {
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes wobble {
+ 0% {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+ 15% {
+ -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ -ms-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg)
+ }
+ 30% {
+ -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ -ms-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg)
+ }
+ 45% {
+ -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ -ms-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg)
+ }
+ 60% {
+ -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ -ms-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg)
+ }
+ 75% {
+ -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ -ms-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg)
+ }
+ 100% {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.wobble {
+ -webkit-animation-name: wobble;
+ animation-name: wobble
+}
+
+@-webkit-keyframes bounceIn {
+ 0%, 100%, 20%, 40%, 60%, 80% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+ 20% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1)
+ }
+ 40% {
+ -webkit-transform: scale3d(.9, .9, .9);
+ transform: scale3d(.9, .9, .9)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
+ transform: scale3d(1.03, 1.03, 1.03)
+ }
+ 80% {
+ -webkit-transform: scale3d(.97, .97, .97);
+ transform: scale3d(.97, .97, .97)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+}
+
+@keyframes bounceIn {
+ 0%, 100%, 20%, 40%, 60%, 80% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ -ms-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+ 20% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ -ms-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1)
+ }
+ 40% {
+ -webkit-transform: scale3d(.9, .9, .9);
+ -ms-transform: scale3d(.9, .9, .9);
+ transform: scale3d(.9, .9, .9)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
+ -ms-transform: scale3d(1.03, 1.03, 1.03);
+ transform: scale3d(1.03, 1.03, 1.03)
+ }
+ 80% {
+ -webkit-transform: scale3d(.97, .97, .97);
+ -ms-transform: scale3d(.97, .97, .97);
+ transform: scale3d(.97, .97, .97)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: scale3d(1, 1, 1);
+ -ms-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1)
+ }
+}
+
+.bounceIn {
+ -webkit-animation-name: bounceIn;
+ animation-name: bounceIn;
+ -webkit-animation-duration: .75s;
+ animation-duration: .75s
+}
+
+@-webkit-keyframes bounceInDown {
+ 0%, 100%, 60%, 75%, 90% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -3000px, 0);
+ transform: translate3d(0, -3000px, 0)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 25px, 0);
+ transform: translate3d(0, 25px, 0)
+ }
+ 75% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(0, 5px, 0);
+ transform: translate3d(0, 5px, 0)
+ }
+ 100% {
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes bounceInDown {
+ 0%, 100%, 60%, 75%, 90% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -3000px, 0);
+ -ms-transform: translate3d(0, -3000px, 0);
+ transform: translate3d(0, -3000px, 0)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 25px, 0);
+ -ms-transform: translate3d(0, 25px, 0);
+ transform: translate3d(0, 25px, 0)
+ }
+ 75% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ -ms-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(0, 5px, 0);
+ -ms-transform: translate3d(0, 5px, 0);
+ transform: translate3d(0, 5px, 0)
+ }
+ 100% {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.bounceInDown {
+ -webkit-animation-name: bounceInDown;
+ animation-name: bounceInDown
+}
+
+@-webkit-keyframes bounceInLeft {
+ 0%, 100%, 60%, 75%, 90% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-3000px, 0, 0);
+ transform: translate3d(-3000px, 0, 0)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(25px, 0, 0);
+ transform: translate3d(25px, 0, 0)
+ }
+ 75% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(5px, 0, 0);
+ transform: translate3d(5px, 0, 0)
+ }
+ 100% {
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes bounceInLeft {
+ 0%, 100%, 60%, 75%, 90% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-3000px, 0, 0);
+ -ms-transform: translate3d(-3000px, 0, 0);
+ transform: translate3d(-3000px, 0, 0)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(25px, 0, 0);
+ -ms-transform: translate3d(25px, 0, 0);
+ transform: translate3d(25px, 0, 0)
+ }
+ 75% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ -ms-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(5px, 0, 0);
+ -ms-transform: translate3d(5px, 0, 0);
+ transform: translate3d(5px, 0, 0)
+ }
+ 100% {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.bounceInLeft {
+ -webkit-animation-name: bounceInLeft;
+ animation-name: bounceInLeft
+}
+
+@-webkit-keyframes bounceInRight {
+ 0%, 100%, 60%, 75%, 90% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(3000px, 0, 0);
+ transform: translate3d(3000px, 0, 0)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(-25px, 0, 0);
+ transform: translate3d(-25px, 0, 0)
+ }
+ 75% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(-5px, 0, 0);
+ transform: translate3d(-5px, 0, 0)
+ }
+ 100% {
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes bounceInRight {
+ 0%, 100%, 60%, 75%, 90% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(3000px, 0, 0);
+ -ms-transform: translate3d(3000px, 0, 0);
+ transform: translate3d(3000px, 0, 0)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(-25px, 0, 0);
+ -ms-transform: translate3d(-25px, 0, 0);
+ transform: translate3d(-25px, 0, 0)
+ }
+ 75% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ -ms-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(-5px, 0, 0);
+ -ms-transform: translate3d(-5px, 0, 0);
+ transform: translate3d(-5px, 0, 0)
+ }
+ 100% {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.bounceInRight {
+ -webkit-animation-name: bounceInRight;
+ animation-name: bounceInRight
+}
+
+@-webkit-keyframes bounceInUp {
+ 0%, 100%, 60%, 75%, 90% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 3000px, 0);
+ transform: translate3d(0, 3000px, 0)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0)
+ }
+ 75% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(0, -5px, 0);
+ transform: translate3d(0, -5px, 0)
+ }
+ 100% {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0)
+ }
+}
+
+@keyframes bounceInUp {
+ 0%, 100%, 60%, 75%, 90% {
+ -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1);
+ transition-timing-function: cubic-bezier(0.215, .61, .355, 1)
+ }
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 3000px, 0);
+ -ms-transform: translate3d(0, 3000px, 0);
+ transform: translate3d(0, 3000px, 0)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ -ms-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0)
+ }
+ 75% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ -ms-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0)
+ }
+ 90% {
+ -webkit-transform: translate3d(0, -5px, 0);
+ -ms-transform: translate3d(0, -5px, 0);
+ transform: translate3d(0, -5px, 0)
+ }
+ 100% {
+ -webkit-transform: translate3d(0, 0, 0);
+ -ms-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0)
+ }
+}
+
+.bounceInUp {
+ -webkit-animation-name: bounceInUp;
+ animation-name: bounceInUp
+}
+
+@-webkit-keyframes bounceOut {
+ 20% {
+ -webkit-transform: scale3d(.9, .9, .9);
+ transform: scale3d(.9, .9, .9)
+ }
+ 50%, 55% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+}
+
+@keyframes bounceOut {
+ 20% {
+ -webkit-transform: scale3d(.9, .9, .9);
+ -ms-transform: scale3d(.9, .9, .9);
+ transform: scale3d(.9, .9, .9)
+ }
+ 50%, 55% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ -ms-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ -ms-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+}
+
+.bounceOut {
+ -webkit-animation-name: bounceOut;
+ animation-name: bounceOut;
+ -webkit-animation-duration: .75s;
+ animation-duration: .75s
+}
+
+@-webkit-keyframes bounceOutDown {
+ 20% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0)
+ }
+ 40%, 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+}
+
+@keyframes bounceOutDown {
+ 20% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ -ms-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0)
+ }
+ 40%, 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ -ms-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ -ms-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+}
+
+.bounceOutDown {
+ -webkit-animation-name: bounceOutDown;
+ animation-name: bounceOutDown
+}
+
+@-webkit-keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(20px, 0, 0);
+ transform: translate3d(20px, 0, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+}
+
+@keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(20px, 0, 0);
+ -ms-transform: translate3d(20px, 0, 0);
+ transform: translate3d(20px, 0, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ -ms-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+}
+
+.bounceOutLeft {
+ -webkit-animation-name: bounceOutLeft;
+ animation-name: bounceOutLeft
+}
+
+@-webkit-keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(-20px, 0, 0);
+ transform: translate3d(-20px, 0, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+}
+
+@keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(-20px, 0, 0);
+ -ms-transform: translate3d(-20px, 0, 0);
+ transform: translate3d(-20px, 0, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ -ms-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+}
+
+.bounceOutRight {
+ -webkit-animation-name: bounceOutRight;
+ animation-name: bounceOutRight
+}
+
+@-webkit-keyframes bounceOutUp {
+ 20% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0)
+ }
+ 40%, 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 20px, 0);
+ transform: translate3d(0, 20px, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+}
+
+@keyframes bounceOutUp {
+ 20% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ -ms-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0)
+ }
+ 40%, 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 20px, 0);
+ -ms-transform: translate3d(0, 20px, 0);
+ transform: translate3d(0, 20px, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ -ms-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+}
+
+.bounceOutUp {
+ -webkit-animation-name: bounceOutUp;
+ animation-name: bounceOutUp
+}
+
+@-webkit-keyframes fadeIn {
+ 0% {
+ opacity: 0
+ }
+ 100% {
+ opacity: 1
+ }
+}
+
+@keyframes fadeIn {
+ 0% {
+ opacity: 0
+ }
+ 100% {
+ opacity: 1
+ }
+}
+
+.fadeIn {
+ -webkit-animation-name: fadeIn;
+ animation-name: fadeIn
+}
+
+@-webkit-keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ -ms-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.fadeInDown {
+ -webkit-animation-name: fadeInDown;
+ animation-name: fadeInDown
+}
+
+@-webkit-keyframes fadeInDownBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes fadeInDownBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ -ms-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.fadeInDownBig {
+ -webkit-animation-name: fadeInDownBig;
+ animation-name: fadeInDownBig
+}
+
+@-webkit-keyframes fadeInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes fadeInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ -ms-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.fadeInLeft {
+ -webkit-animation-name: fadeInLeft;
+ animation-name: fadeInLeft
+}
+
+@-webkit-keyframes fadeInLeftBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes fadeInLeftBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ -ms-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.fadeInLeftBig {
+ -webkit-animation-name: fadeInLeftBig;
+ animation-name: fadeInLeftBig
+}
+
+@-webkit-keyframes fadeInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes fadeInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ -ms-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.fadeInRight {
+ -webkit-animation-name: fadeInRight;
+ animation-name: fadeInRight
+}
+
+@-webkit-keyframes fadeInRightBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes fadeInRightBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ -ms-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.fadeInRightBig {
+ -webkit-animation-name: fadeInRightBig;
+ animation-name: fadeInRightBig
+}
+
+@-webkit-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ -ms-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.fadeInUp {
+ -webkit-animation-name: fadeInUp;
+ animation-name: fadeInUp
+}
+
+@-webkit-keyframes fadeInUpBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes fadeInUpBig {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ -ms-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.fadeInUpBig {
+ -webkit-animation-name: fadeInUpBig;
+ animation-name: fadeInUpBig
+}
+
+@-webkit-keyframes fadeOut {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0
+ }
+}
+
+@keyframes fadeOut {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0
+ }
+}
+
+.fadeOut {
+ -webkit-animation-name: fadeOut;
+ animation-name: fadeOut
+}
+
+@-webkit-keyframes fadeOutDown {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+}
+
+@keyframes fadeOutDown {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ -ms-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0)
+ }
+}
+
+.fadeOutDown {
+ -webkit-animation-name: fadeOutDown;
+ animation-name: fadeOutDown
+}
+
+@-webkit-keyframes fadeOutDownBig {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+}
+
+@keyframes fadeOutDownBig {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ -ms-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0)
+ }
+}
+
+.fadeOutDownBig {
+ -webkit-animation-name: fadeOutDownBig;
+ animation-name: fadeOutDownBig
+}
+
+@-webkit-keyframes fadeOutLeft {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+}
+
+@keyframes fadeOutLeft {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ -ms-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0)
+ }
+}
+
+.fadeOutLeft {
+ -webkit-animation-name: fadeOutLeft;
+ animation-name: fadeOutLeft
+}
+
+@-webkit-keyframes fadeOutLeftBig {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+}
+
+@keyframes fadeOutLeftBig {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ -ms-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0)
+ }
+}
+
+.fadeOutLeftBig {
+ -webkit-animation-name: fadeOutLeftBig;
+ animation-name: fadeOutLeftBig
+}
+
+@-webkit-keyframes fadeOutRight {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+}
+
+@keyframes fadeOutRight {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ -ms-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0)
+ }
+}
+
+.fadeOutRight {
+ -webkit-animation-name: fadeOutRight;
+ animation-name: fadeOutRight
+}
+
+@-webkit-keyframes fadeOutRightBig {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+}
+
+@keyframes fadeOutRightBig {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ -ms-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0)
+ }
+}
+
+.fadeOutRightBig {
+ -webkit-animation-name: fadeOutRightBig;
+ animation-name: fadeOutRightBig
+}
+
+@-webkit-keyframes fadeOutUp {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+}
+
+@keyframes fadeOutUp {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ -ms-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0)
+ }
+}
+
+.fadeOutUp {
+ -webkit-animation-name: fadeOutUp;
+ animation-name: fadeOutUp
+}
+
+@-webkit-keyframes fadeOutUpBig {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+}
+
+@keyframes fadeOutUpBig {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ -ms-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0)
+ }
+}
+
+.fadeOutUpBig {
+ -webkit-animation-name: fadeOutUpBig;
+ animation-name: fadeOutUpBig
+}
+
+@-webkit-keyframes flip {
+ 0% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+ }
+ 40% {
+ -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+ }
+ 50% {
+ -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+ 80% {
+ -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
+ transform: perspective(400px) scale3d(.95, .95, .95);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+ 100% {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+}
+
+@keyframes flip {
+ 0% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+ -ms-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+ }
+ 40% {
+ -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ -ms-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+ }
+ 50% {
+ -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ -ms-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+ 80% {
+ -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
+ -ms-transform: perspective(400px) scale3d(.95, .95, .95);
+ transform: perspective(400px) scale3d(.95, .95, .95);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+ 100% {
+ -webkit-transform: perspective(400px);
+ -ms-transform: perspective(400px);
+ transform: perspective(400px);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+ }
+}
+
+.animated.flip {
+ -webkit-backface-visibility: visible;
+ -ms-backface-visibility: visible;
+ backface-visibility: visible;
+ -webkit-animation-name: flip;
+ animation-name: flip
+}
+
+@-webkit-keyframes flipInX {
+ 0% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ -webkit-transition-timing-function: ease-in;
+ transition-timing-function: ease-in;
+ opacity: 0
+ }
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ -webkit-transition-timing-function: ease-in;
+ transition-timing-function: ease-in
+ }
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ opacity: 1
+ }
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg)
+ }
+ 100% {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+}
+
+@keyframes flipInX {
+ 0% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ -ms-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ -webkit-transition-timing-function: ease-in;
+ transition-timing-function: ease-in;
+ opacity: 0
+ }
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ -ms-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ -webkit-transition-timing-function: ease-in;
+ transition-timing-function: ease-in
+ }
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ -ms-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ opacity: 1
+ }
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ -ms-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg)
+ }
+ 100% {
+ -webkit-transform: perspective(400px);
+ -ms-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+}
+
+.flipInX {
+ -webkit-backface-visibility: visible !important;
+ -ms-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInX;
+ animation-name: flipInX
+}
+
+@-webkit-keyframes flipInY {
+ 0% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ -webkit-transition-timing-function: ease-in;
+ transition-timing-function: ease-in;
+ opacity: 0
+ }
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ -webkit-transition-timing-function: ease-in;
+ transition-timing-function: ease-in
+ }
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ opacity: 1
+ }
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg)
+ }
+ 100% {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+}
+
+@keyframes flipInY {
+ 0% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ -ms-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ -webkit-transition-timing-function: ease-in;
+ transition-timing-function: ease-in;
+ opacity: 0
+ }
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ -ms-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ -webkit-transition-timing-function: ease-in;
+ transition-timing-function: ease-in
+ }
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ -ms-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ opacity: 1
+ }
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ -ms-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg)
+ }
+ 100% {
+ -webkit-transform: perspective(400px);
+ -ms-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+}
+
+.flipInY {
+ -webkit-backface-visibility: visible !important;
+ -ms-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInY;
+ animation-name: flipInY
+}
+
+@-webkit-keyframes flipOutX {
+ 0% {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ opacity: 0
+ }
+}
+
+@keyframes flipOutX {
+ 0% {
+ -webkit-transform: perspective(400px);
+ -ms-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ -ms-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ -ms-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ opacity: 0
+ }
+}
+
+.flipOutX {
+ -webkit-animation-name: flipOutX;
+ animation-name: flipOutX;
+ -webkit-animation-duration: .75s;
+ animation-duration: .75s;
+ -webkit-backface-visibility: visible !important;
+ -ms-backface-visibility: visible !important;
+ backface-visibility: visible !important
+}
+
+@-webkit-keyframes flipOutY {
+ 0% {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ opacity: 0
+ }
+}
+
+@keyframes flipOutY {
+ 0% {
+ -webkit-transform: perspective(400px);
+ -ms-transform: perspective(400px);
+ transform: perspective(400px)
+ }
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ -ms-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ -ms-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ opacity: 0
+ }
+}
+
+.flipOutY {
+ -webkit-backface-visibility: visible !important;
+ -ms-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipOutY;
+ animation-name: flipOutY;
+ -webkit-animation-duration: .75s;
+ animation-duration: .75s
+}
+
+@-webkit-keyframes lightSpeedIn {
+ 0% {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0
+ }
+ 60% {
+ -webkit-transform: skewX(20deg);
+ transform: skewX(20deg);
+ opacity: 1
+ }
+ 80% {
+ -webkit-transform: skewX(-5deg);
+ transform: skewX(-5deg);
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+@keyframes lightSpeedIn {
+ 0% {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+ -ms-transform: translate3d(100%, 0, 0) skewX(-30deg);
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0
+ }
+ 60% {
+ -webkit-transform: skewX(20deg);
+ -ms-transform: skewX(20deg);
+ transform: skewX(20deg);
+ opacity: 1
+ }
+ 80% {
+ -webkit-transform: skewX(-5deg);
+ -ms-transform: skewX(-5deg);
+ transform: skewX(-5deg);
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+.lightSpeedIn {
+ -webkit-animation-name: lightSpeedIn;
+ animation-name: lightSpeedIn;
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out
+}
+
+@-webkit-keyframes lightSpeedOut {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0
+ }
+}
+
+@keyframes lightSpeedOut {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+ -ms-transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0
+ }
+}
+
+.lightSpeedOut {
+ -webkit-animation-name: lightSpeedOut;
+ animation-name: lightSpeedOut;
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in
+}
+
+@-webkit-keyframes rotateIn {
+ 0% {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, -200deg);
+ transform: rotate3d(0, 0, 1, -200deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+@keyframes rotateIn {
+ 0% {
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, -200deg);
+ -ms-transform: rotate3d(0, 0, 1, -200deg);
+ transform: rotate3d(0, 0, 1, -200deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+.rotateIn {
+ -webkit-animation-name: rotateIn;
+ animation-name: rotateIn
+}
+
+@-webkit-keyframes rotateInDownLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+@keyframes rotateInDownLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ -ms-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+.rotateInDownLeft {
+ -webkit-animation-name: rotateInDownLeft;
+ animation-name: rotateInDownLeft
+}
+
+@-webkit-keyframes rotateInDownRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+@keyframes rotateInDownRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ -ms-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+.rotateInDownRight {
+ -webkit-animation-name: rotateInDownRight;
+ animation-name: rotateInDownRight
+}
+
+@-webkit-keyframes rotateInUpLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+@keyframes rotateInUpLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ -ms-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+.rotateInUpLeft {
+ -webkit-animation-name: rotateInUpLeft;
+ animation-name: rotateInUpLeft
+}
+
+@-webkit-keyframes rotateInUpRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -90deg);
+ transform: rotate3d(0, 0, 1, -90deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+@keyframes rotateInUpRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -90deg);
+ -ms-transform: rotate3d(0, 0, 1, -90deg);
+ transform: rotate3d(0, 0, 1, -90deg);
+ opacity: 0
+ }
+ 100% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+ opacity: 1
+ }
+}
+
+.rotateInUpRight {
+ -webkit-animation-name: rotateInUpRight;
+ animation-name: rotateInUpRight
+}
+
+@-webkit-keyframes rotateOut {
+ 0% {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, 200deg);
+ transform: rotate3d(0, 0, 1, 200deg);
+ opacity: 0
+ }
+}
+
+@keyframes rotateOut {
+ 0% {
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: center;
+ -ms-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, 200deg);
+ -ms-transform: rotate3d(0, 0, 1, 200deg);
+ transform: rotate3d(0, 0, 1, 200deg);
+ opacity: 0
+ }
+}
+
+.rotateOut {
+ -webkit-animation-name: rotateOut;
+ animation-name: rotateOut
+}
+
+@-webkit-keyframes rotateOutDownLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0, 0, 1, 45deg);
+ transform: rotate(0, 0, 1, 45deg);
+ opacity: 0
+ }
+}
+
+@keyframes rotateOutDownLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate(0, 0, 1, 45deg);
+ -ms-transform: rotate(0, 0, 1, 45deg);
+ transform: rotate(0, 0, 1, 45deg);
+ opacity: 0
+ }
+}
+
+.rotateOutDownLeft {
+ -webkit-animation-name: rotateOutDownLeft;
+ animation-name: rotateOutDownLeft
+}
+
+@-webkit-keyframes rotateOutDownRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0
+ }
+}
+
+@keyframes rotateOutDownRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ -ms-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0
+ }
+}
+
+.rotateOutDownRight {
+ -webkit-animation-name: rotateOutDownRight;
+ animation-name: rotateOutDownRight
+}
+
+@-webkit-keyframes rotateOutUpLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0
+ }
+}
+
+@keyframes rotateOutUpLeft {
+ 0% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ -ms-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0
+ }
+}
+
+.rotateOutUpLeft {
+ -webkit-animation-name: rotateOutUpLeft;
+ animation-name: rotateOutUpLeft
+}
+
+@-webkit-keyframes rotateOutUpRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 90deg);
+ transform: rotate3d(0, 0, 1, 90deg);
+ opacity: 0
+ }
+}
+
+@keyframes rotateOutUpRight {
+ 0% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 90deg);
+ -ms-transform: rotate3d(0, 0, 1, 90deg);
+ transform: rotate3d(0, 0, 1, 90deg);
+ opacity: 0
+ }
+}
+
+.rotateOutUpRight {
+ -webkit-animation-name: rotateOutUpRight;
+ animation-name: rotateOutUpRight
+}
+
+@-webkit-keyframes hinge {
+ 0% {
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out
+ }
+ 20%, 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 80deg);
+ transform: rotate3d(0, 0, 1, 80deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out
+ }
+ 40%, 80% {
+ -webkit-transform: rotate3d(0, 0, 1, 60deg);
+ transform: rotate3d(0, 0, 1, 60deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: translate3d(0, 700px, 0);
+ transform: translate3d(0, 700px, 0);
+ opacity: 0
+ }
+}
+
+@keyframes hinge {
+ 0% {
+ -webkit-transform-origin: top left;
+ -ms-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out
+ }
+ 20%, 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 80deg);
+ -ms-transform: rotate3d(0, 0, 1, 80deg);
+ transform: rotate3d(0, 0, 1, 80deg);
+ -webkit-transform-origin: top left;
+ -ms-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out
+ }
+ 40%, 80% {
+ -webkit-transform: rotate3d(0, 0, 1, 60deg);
+ -ms-transform: rotate3d(0, 0, 1, 60deg);
+ transform: rotate3d(0, 0, 1, 60deg);
+ -webkit-transform-origin: top left;
+ -ms-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ opacity: 1
+ }
+ 100% {
+ -webkit-transform: translate3d(0, 700px, 0);
+ -ms-transform: translate3d(0, 700px, 0);
+ transform: translate3d(0, 700px, 0);
+ opacity: 0
+ }
+}
+
+.hinge {
+ -webkit-animation-name: hinge;
+ animation-name: hinge
+}
+
+@-webkit-keyframes rollIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none
+ }
+}
+
+@keyframes rollIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ -ms-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg)
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none
+ }
+}
+
+.rollIn {
+ -webkit-animation-name: rollIn;
+ animation-name: rollIn
+}
+
+@-webkit-keyframes rollOut {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg)
+ }
+}
+
+@keyframes rollOut {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ -ms-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg)
+ }
+}
+
+.rollOut {
+ -webkit-animation-name: rollOut;
+ animation-name: rollOut
+}
+
+@-webkit-keyframes zoomIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+ 50% {
+ opacity: 1
+ }
+}
+
+@keyframes zoomIn {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ -ms-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+ 50% {
+ opacity: 1
+ }
+}
+
+.zoomIn {
+ -webkit-animation-name: zoomIn;
+ animation-name: zoomIn
+}
+
+@-webkit-keyframes zoomInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+ transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+@keyframes zoomInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+ -ms-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+ transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ -ms-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+.zoomInDown {
+ -webkit-animation-name: zoomInDown;
+ animation-name: zoomInDown
+}
+
+@-webkit-keyframes zoomInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+ transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+ transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+@keyframes zoomInLeft {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+ -ms-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+ transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+ -ms-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+ transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+.zoomInLeft {
+ -webkit-animation-name: zoomInLeft;
+ animation-name: zoomInLeft
+}
+
+@-webkit-keyframes zoomInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+ transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+ transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+@keyframes zoomInRight {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+ -ms-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+ transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+ -ms-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+ transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+.zoomInRight {
+ -webkit-animation-name: zoomInRight;
+ animation-name: zoomInRight
+}
+
+@-webkit-keyframes zoomInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+ transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+@keyframes zoomInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+ -ms-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+ transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ -ms-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+.zoomInUp {
+ -webkit-animation-name: zoomInUp;
+ animation-name: zoomInUp
+}
+
+@-webkit-keyframes zoomOut {
+ 0% {
+ opacity: 1
+ }
+ 50% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+ 100% {
+ opacity: 0
+ }
+}
+
+@keyframes zoomOut {
+ 0% {
+ opacity: 1
+ }
+ 50% {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ -ms-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3)
+ }
+ 100% {
+ opacity: 0
+ }
+}
+
+.zoomOut {
+ -webkit-animation-name: zoomOut;
+ animation-name: zoomOut
+}
+
+@-webkit-keyframes zoomOutDown {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+ transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+@keyframes zoomOutDown {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ -ms-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+ -ms-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+ transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+ -webkit-transform-origin: center bottom;
+ -ms-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+.zoomOutDown {
+ -webkit-animation-name: zoomOutDown;
+ animation-name: zoomOutDown
+}
+
+@-webkit-keyframes zoomOutLeft {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+ transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
+ transform: scale(.1) translate3d(-2000px, 0, 0);
+ -webkit-transform-origin: left center;
+ transform-origin: left center
+ }
+}
+
+@keyframes zoomOutLeft {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+ -ms-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+ transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
+ -ms-transform: scale(.1) translate3d(-2000px, 0, 0);
+ transform: scale(.1) translate3d(-2000px, 0, 0);
+ -webkit-transform-origin: left center;
+ -ms-transform-origin: left center;
+ transform-origin: left center
+ }
+}
+
+.zoomOutLeft {
+ -webkit-animation-name: zoomOutLeft;
+ animation-name: zoomOutLeft
+}
+
+@-webkit-keyframes zoomOutRight {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+ transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
+ transform: scale(.1) translate3d(2000px, 0, 0);
+ -webkit-transform-origin: right center;
+ transform-origin: right center
+ }
+}
+
+@keyframes zoomOutRight {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+ -ms-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+ transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
+ -ms-transform: scale(.1) translate3d(2000px, 0, 0);
+ transform: scale(.1) translate3d(2000px, 0, 0);
+ -webkit-transform-origin: right center;
+ -ms-transform-origin: right center;
+ transform-origin: right center
+ }
+}
+
+.zoomOutRight {
+ -webkit-animation-name: zoomOutRight;
+ animation-name: zoomOutRight
+}
+
+@-webkit-keyframes zoomOutUp {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+ transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+@keyframes zoomOutUp {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ -ms-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19);
+ animation-timing-function: cubic-bezier(0.55, .055, .675, .19)
+ }
+ 100% {
+ opacity: 0;
+ -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+ -ms-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+ transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+ -webkit-transform-origin: center bottom;
+ -ms-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1);
+ animation-timing-function: cubic-bezier(0.175, .885, .32, 1)
+ }
+}
+
+.zoomOutUp {
+ -webkit-animation-name: zoomOutUp;
+ animation-name: zoomOutUp
+}
diff --git a/web/public/css/bootstrap.min.css b/web/public/css/bootstrap.min.css
new file mode 100755
index 0000000..be39f78
--- /dev/null
+++ b/web/public/css/bootstrap.min.css
@@ -0,0 +1,6710 @@
+/*!
+ * Bootstrap v3.3.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*!
+ * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=96424a68f1fcf5ec132f)
+ * Config saved to config.json and https://gist.github.com/96424a68f1fcf5ec132f
+ *//*! 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, figcaption, figure, 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], template {
+ display: none
+}
+
+a {
+ background-color: transparent
+}
+
+a:active, a:hover {
+ outline: 0
+}
+
+abbr[title] {
+ border-bottom: 1px dotted
+}
+
+b, strong {
+ font-weight: bold
+}
+
+dfn {
+ font-style: italic
+}
+
+h1 {
+ font-size: 2em;
+ margin: 0.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: -0.5em
+}
+
+sub {
+ bottom: -0.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 #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em
+}
+
+legend {
+ border: 0;
+ padding: 0
+}
+
+textarea {
+ overflow: auto
+}
+
+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 {
+ *, *:before, *:after {
+ background: transparent !important;
+ color: #000 !important;
+ 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) ")"
+ }
+
+ a[href^="#"]:after, a[href^="javascript:"]: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
+ }
+
+ .btn > .caret, .dropup > .btn > .caret {
+ border-top-color: #000 !important
+ }
+
+ .label {
+ border: 1px solid #000
+ }
+
+ .table {
+ border-collapse: collapse !important
+ }
+
+ .table td, .table th {
+ background-color: #fff !important
+ }
+
+ .table-bordered th, .table-bordered td {
+ border: 1px solid #ddd !important
+ }
+}
+
+@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: normal;
+ 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, .glyphicon-eur: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"
+}
+
+* {
+ -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: 10px;
+ -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;
+ -o-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
+}
+
+.sr-only-focusable:active, .sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto
+}
+
+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: normal;
+ line-height: 1;
+ color: #777
+}
+
+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: 300;
+ line-height: 1.4
+}
+
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px
+ }
+}
+
+small, .small {
+ font-size: 85%
+}
+
+mark, .mark {
+ background-color: #fcf8e3;
+ padding: .2em
+}
+
+.text-left {
+ text-align: left
+}
+
+.text-right {
+ text-align: right
+}
+
+.text-center {
+ text-align: center
+}
+
+.text-justify {
+ text-align: justify
+}
+
+.text-nowrap {
+ white-space: nowrap
+}
+
+.text-lowercase {
+ text-transform: lowercase
+}
+
+.text-uppercase {
+ text-transform: uppercase
+}
+
+.text-capitalize {
+ text-transform: capitalize
+}
+
+.text-muted {
+ color: #777
+}
+
+.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: 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
+ }
+}
+
+abbr[title], abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #777
+}
+
+.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: #777
+}
+
+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'
+}
+
+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;
+ 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, 0.25)
+}
+
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ box-shadow: none
+}
+
+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: auto
+}
+
+.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: auto
+}
+
+.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: 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
+ }
+}
+
+@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
+ }
+}
+
+@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
+ }
+}
+
+table {
+ background-color: transparent
+}
+
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #777;
+ text-align: left
+}
+
+th {
+ text-align: left
+}
+
+.table {
+ width: 100%;
+ max-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) {
+ background-color: #f9f9f9
+}
+
+.table-hover > tbody > tr:hover {
+ 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:hover > .active, .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:hover > .success, .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:hover > .info, .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:hover > .warning, .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:hover > .danger, .table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc
+}
+
+.table-responsive {
+ overflow-x: auto;
+ min-height: 0.01%
+}
+
+@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 #ddd
+ }
+
+ .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;
+ max-width: 100%;
+ 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
+}
+
+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, 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
+}
+
+.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)
+}
+
+.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"], input[type="time"], input[type="datetime-local"], input[type="month"] {
+ line-height: 34px;
+ line-height: 1.42857143 \0
+}
+
+input[type="date"].input-sm, input[type="time"].input-sm, input[type="datetime-local"].input-sm, input[type="month"].input-sm {
+ line-height: 30px;
+ line-height: 1.5 \0
+}
+
+input[type="date"].input-lg, input[type="time"].input-lg, input[type="datetime-local"].input-lg, input[type="month"].input-lg {
+ line-height: 46px;
+ line-height: 1.33 \0
+}
+
+_:-ms-fullscreen, :root input[type="date"], _:-ms-fullscreen, :root input[type="time"], _:-ms-fullscreen, :root input[type="datetime-local"], _:-ms-fullscreen, :root input[type="month"] {
+ line-height: 1.42857143
+}
+
+_:-ms-fullscreen.input-sm, :root input[type="date"].input-sm, _:-ms-fullscreen.input-sm, :root input[type="time"].input-sm, _:-ms-fullscreen.input-sm, :root input[type="datetime-local"].input-sm, _:-ms-fullscreen.input-sm, :root input[type="month"].input-sm {
+ line-height: 1.5
+}
+
+_:-ms-fullscreen.input-lg, :root input[type="date"].input-lg, _:-ms-fullscreen.input-lg, :root input[type="time"].input-lg, _:-ms-fullscreen.input-lg, :root input[type="datetime-local"].input-lg, _:-ms-fullscreen.input-lg, :root input[type="month"].input-lg {
+ line-height: 1.33
+}
+
+.form-group {
+ margin-bottom: 15px
+}
+
+.radio, .checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px
+}
+
+.radio label, .checkbox label {
+ min-height: 20px;
+ padding-left: 20px;
+ 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"] {
+ position: absolute;
+ margin-left: -20px;
+ margin-top: 4px \9
+}
+
+.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: normal;
+ cursor: pointer
+}
+
+.radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px
+}
+
+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
+}
+
+.radio-inline.disabled, .checkbox-inline.disabled, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed
+}
+
+.radio.disabled label, .checkbox.disabled label, fieldset[disabled] .radio label, fieldset[disabled] .checkbox label {
+ cursor: not-allowed
+}
+
+.form-control-static {
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 0
+}
+
+.form-control-static.input-lg, .form-control-static.input-sm {
+ padding-left: 0;
+ padding-right: 0
+}
+
+.input-sm, .form-group-sm .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+select.input-sm, select.form-group-sm .form-control {
+ height: 30px;
+ line-height: 30px
+}
+
+textarea.input-sm, textarea.form-group-sm .form-control, select[multiple].input-sm, select[multiple].form-group-sm .form-control {
+ height: auto
+}
+
+.input-lg, .form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+select.input-lg, select.form-group-lg .form-control {
+ height: 46px;
+ line-height: 46px
+}
+
+textarea.input-lg, textarea.form-group-lg .form-control, select[multiple].input-lg, select[multiple].form-group-lg .form-control {
+ height: auto
+}
+
+.has-feedback {
+ position: relative
+}
+
+.has-feedback .form-control {
+ padding-right: 42.5px
+}
+
+.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
+}
+
+.input-lg + .form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px
+}
+
+.input-sm + .form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px
+}
+
+.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
+}
+
+.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;
+ 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, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline label {
+ 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;
+ 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, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline label {
+ 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;
+ border-color: #a94442;
+ background-color: #f2dede
+}
+
+.has-error .form-control-feedback {
+ color: #a94442
+}
+
+.has-feedback label ~ .form-control-feedback {
+ top: 25px
+}
+
+.has-feedback label.sr-only ~ .form-control-feedback {
+ top: 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 .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
+ }
+}
+
+.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
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ text-align: right;
+ margin-bottom: 0;
+ padding-top: 7px
+ }
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 15px
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 14.3px
+ }
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px
+ }
+}
+
+.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
+}
+
+.btn:hover, .btn:focus, .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, 0.125);
+ box-shadow: inset 0 3px 5px rgba(0, 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.focus, .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #e6e6e6;
+ 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.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.focus, .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #3071a9;
+ 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.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.focus, .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #449d44;
+ 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.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.focus, .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #31b0d5;
+ 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.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.focus, .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ec971f;
+ 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.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.focus, .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #c9302c;
+ 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.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: normal;
+ border-radius: 0
+}
+
+.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
+}
+
+.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: #777;
+ 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%
+}
+
+.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;
+ -o-transition: opacity .15s linear;
+ transition: opacity .15s linear
+}
+
+.fade.in {
+ opacity: 1
+}
+
+.collapse {
+ display: none;
+ visibility: hidden
+}
+
+.collapse.in {
+ display: block;
+ visibility: visible
+}
+
+tr.collapse.in {
+ display: table-row
+}
+
+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: .35s;
+ transition-duration: .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;
+ 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;
+ text-align: left;
+ 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.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: #777
+}
+
+.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: #777;
+ white-space: nowrap
+}
+
+.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, 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 > .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%
+}
+
+.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[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: 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 > .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: #777
+}
+
+.nav > li.disabled > a:hover, .nav > li.disabled > a:focus {
+ color: #777;
+ 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;
+ 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: 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 {
+ 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
+}
+
+@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;
+ height: 50px
+}
+
+.navbar-brand:hover, .navbar-brand:focus {
+ text-decoration: none
+}
+
+.navbar-brand > img {
+ display: block
+}
+
+@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-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: 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 .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
+ }
+}
+
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px
+ }
+
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0
+ }
+}
+
+@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-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
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important
+ }
+
+ .navbar-right {
+ float: right !important;
+ margin-right: -15px
+ }
+
+ .navbar-right ~ .navbar-right {
+ 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-default .btn-link {
+ color: #777
+}
+
+.navbar-default .btn-link:hover, .navbar-default .btn-link:focus {
+ color: #333
+}
+
+.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: #ccc
+}
+
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808
+}
+
+.navbar-inverse .navbar-brand {
+ color: #9d9d9d
+}
+
+.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-text {
+ color: #9d9d9d
+}
+
+.navbar-inverse .navbar-nav > li > a {
+ color: #9d9d9d
+}
+
+.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: #9d9d9d
+ }
+
+ .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: #9d9d9d
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff
+}
+
+.navbar-inverse .btn-link {
+ color: #9d9d9d
+}
+
+.navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {
+ color: #fff
+}
+
+.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: #444
+}
+
+.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: #777
+}
+
+.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: #777;
+ 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: #777;
+ background-color: #fff;
+ cursor: not-allowed
+}
+
+.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
+}
+
+a.label:hover, a.label:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer
+}
+
+.label:empty {
+ display: none
+}
+
+.btn .label {
+ position: relative;
+ top: -1px
+}
+
+.label-default {
+ background-color: #777
+}
+
+.label-default[href]:hover, .label-default[href]:focus {
+ background-color: #5e5e5e
+}
+
+.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;
+ color: #fff;
+ line-height: 1;
+ vertical-align: baseline;
+ white-space: nowrap;
+ text-align: center;
+ background-color: #777;
+ 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 15px;
+ 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
+}
+
+.jumbotron > hr {
+ border-top-color: #d5d5d5
+}
+
+.container .jumbotron, .container-fluid .jumbotron {
+ border-radius: 6px
+}
+
+.jumbotron .container {
+ max-width: 100%
+}
+
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding: 48px 0
+ }
+
+ .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: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .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: bold
+}
+
+.alert > p, .alert > ul {
+ margin-bottom: 0
+}
+
+.alert > p + p {
+ margin-top: 5px
+}
+
+.alert-dismissable, .alert-dismissible {
+ padding-right: 35px
+}
+
+.alert-dismissable .close, .alert-dismissible .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, 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;
+ -o-transition: width .6s ease;
+ transition: width .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)
+}
+
+.media {
+ margin-top: 15px
+}
+
+.media:first-child {
+ margin-top: 0
+}
+
+.media-right, .media > .pull-right {
+ padding-left: 10px
+}
+
+.media-left, .media > .pull-left {
+ padding-right: 10px
+}
+
+.media-left, .media-right, .media-body {
+ display: table-cell;
+ vertical-align: top
+}
+
+.media-middle {
+ vertical-align: middle
+}
+
+.media-bottom {
+ vertical-align: bottom
+}
+
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px
+}
+
+.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;
+ color: #555;
+ background-color: #f5f5f5
+}
+
+.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus {
+ background-color: #eee;
+ color: #777;
+ cursor: not-allowed
+}
+
+.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: #777
+}
+
+.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca
+}
+
+.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
+}
+
+.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
+}
+
+.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, 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
+}
+
+.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, .panel > .panel-collapse > .list-group {
+ margin-bottom: 0
+}
+
+.panel > .list-group .list-group-item, .panel > .panel-collapse > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0
+}
+
+.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
+}
+
+.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
+}
+
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0
+}
+
+.list-group + .panel-footer {
+ border-top-width: 0
+}
+
+.panel > .table, .panel > .table-responsive > .table, .panel > .panel-collapse > .table {
+ margin-bottom: 0
+}
+
+.panel > .table caption, .panel > .table-responsive > .table caption, .panel > .panel-collapse > .table caption {
+ padding-left: 15px;
+ padding-right: 15px
+}
+
+.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, .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
+}
+
+.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, .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
+}
+
+.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, .panel > .table + .panel-body, .panel > .table-responsive + .panel-body {
+ 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
+}
+
+.panel-group .panel + .panel {
+ margin-top: 5px
+}
+
+.panel-group .panel-heading {
+ border-bottom: 0
+}
+
+.panel-group .panel-heading + .panel-collapse > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group {
+ 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-heading .badge {
+ color: #f5f5f5;
+ background-color: #333
+}
+
+.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-heading .badge {
+ color: #428bca;
+ background-color: #fff
+}
+
+.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-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d
+}
+
+.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-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f
+}
+
+.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-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b
+}
+
+.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-heading .badge {
+ color: #f2dede;
+ background-color: #a94442
+}
+
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ebccd1
+}
+
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden
+}
+
+.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%;
+ width: 100%;
+ border: 0
+}
+
+.embed-responsive.embed-responsive-16by9 {
+ padding-bottom: 56.25%
+}
+
+.embed-responsive.embed-responsive-4by3 {
+ padding-bottom: 75%
+}
+
+.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 {
+ display: none;
+ overflow: hidden;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ -webkit-overflow-scrolling: touch;
+ outline: 0
+}
+
+.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
+}
+
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ -o-transform: translate(0, 0);
+ transform: translate(0, 0)
+}
+
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto
+}
+
+.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, 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
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ 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: 15px
+}
+
+.modal-footer {
+ padding: 15px;
+ 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
+}
+
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll
+}
+
+@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
+ }
+}
+
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ 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: 1060;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ background-color: #fff;
+ background-clip: padding-box;
+ 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);
+ 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;
+ 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, 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, 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, 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, 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;
+ -o-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left
+}
+
+.carousel-inner > .item > img, .carousel-inner > .item > a > img {
+ line-height: 1
+}
+
+@media all and (transform-3d),(-webkit-transform-3d) {
+ .carousel-inner > .item {
+ transition: transform .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
+ }
+}
+
+.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, 0.6)
+}
+
+.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)
+}
+
+.carousel-control.right {
+ left: auto;
+ right: 0;
+ 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)
+}
+
+.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%;
+ margin-left: -10px
+}
+
+.carousel-control .icon-next, .carousel-control .glyphicon-chevron-right {
+ right: 50%;
+ margin-right: -10px
+}
+
+.carousel-control .icon-prev, .carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -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, 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;
+ 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 {
+ 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
+}
+
+.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
+}
+
+.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
+}
+
+@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 (max-width: 767px) {
+ .visible-xs-block {
+ display: block !important
+ }
+}
+
+@media (max-width: 767px) {
+ .visible-xs-inline {
+ display: inline !important
+ }
+}
+
+@media (max-width: 767px) {
+ .visible-xs-inline-block {
+ display: inline-block !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: 768px) and (max-width: 991px) {
+ .visible-sm-block {
+ display: block !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline {
+ display: inline !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline-block {
+ display: inline-block !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: 992px) and (max-width: 1199px) {
+ .visible-md-block {
+ display: block !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline {
+ display: inline !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline-block {
+ display: inline-block !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 (min-width: 1200px) {
+ .visible-lg-block {
+ display: block !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-lg-inline {
+ display: inline !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-lg-inline-block {
+ display: inline-block !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
+ }
+}
+
+.visible-print-block {
+ display: none !important
+}
+
+@media print {
+ .visible-print-block {
+ display: block !important
+ }
+}
+
+.visible-print-inline {
+ display: none !important
+}
+
+@media print {
+ .visible-print-inline {
+ display: inline !important
+ }
+}
+
+.visible-print-inline-block {
+ display: none !important
+}
+
+@media print {
+ .visible-print-inline-block {
+ display: inline-block !important
+ }
+}
+
+@media print {
+ .hidden-print {
+ display: none !important
+ }
+}
\ No newline at end of file
diff --git a/web/public/css/font-awesome.css b/web/public/css/font-awesome.css
new file mode 100644
index 0000000..77f6e1e
--- /dev/null
+++ b/web/public/css/font-awesome.css
@@ -0,0 +1,2101 @@
+/*!
+ * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+@font-face {
+ font-family: FontAwesome;
+ src: url(../fonts/fontawesome-webfont.eot?v=4.2.0);
+ src: url(../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0) format('embedded-opentype'), url(../fonts/fontawesome-webfont.woff?v=4.2.0) format('woff'), url(../fonts/fontawesome-webfont.ttf?v=4.2.0) format('truetype'), url(../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular) format('svg');
+ font-weight: 400;
+ font-style: normal
+}
+
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale
+}
+
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: .75em;
+ vertical-align: -15%
+}
+
+.fa-2x {
+ font-size: 2em
+}
+
+.fa-3x {
+ font-size: 3em
+}
+
+.fa-4x {
+ font-size: 4em
+}
+
+.fa-5x {
+ font-size: 5em
+}
+
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center
+}
+
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none
+}
+
+.fa-ul > li {
+ position: relative
+}
+
+.fa-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: .14285714em;
+ text-align: center
+}
+
+.fa-li.fa-lg {
+ left: -1.85714286em
+}
+
+.fa-border {
+ padding: .2em .25em .15em;
+ border: .08em solid #eee;
+ border-radius: .1em
+}
+
+.pull-right {
+ float: right
+}
+
+.pull-left {
+ float: left
+}
+
+.fa.pull-left {
+ margin-right: .3em
+}
+
+.fa.pull-right {
+ margin-left: .3em
+}
+
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear
+}
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg)
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg)
+ }
+}
+
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg)
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg)
+ }
+}
+
+.fa-rotate-90 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg)
+}
+
+.fa-rotate-180 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg)
+}
+
+.fa-rotate-270 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg)
+}
+
+.fa-flip-horizontal {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
+ -webkit-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ transform: scale(-1, 1)
+}
+
+.fa-flip-vertical {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
+ -webkit-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ transform: scale(1, -1)
+}
+
+:root .fa-flip-horizontal, :root .fa-flip-vertical, :root .fa-rotate-180, :root .fa-rotate-270, :root .fa-rotate-90 {
+ filter: none
+}
+
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle
+}
+
+.fa-stack-1x, .fa-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center
+}
+
+.fa-stack-1x {
+ line-height: inherit
+}
+
+.fa-stack-2x {
+ font-size: 2em
+}
+
+.fa-inverse {
+ color: #fff
+}
+
+.fa-glass:before {
+ content: "\f000"
+}
+
+.fa-music:before {
+ content: "\f001"
+}
+
+.fa-search:before {
+ content: "\f002"
+}
+
+.fa-envelope-o:before {
+ content: "\f003"
+}
+
+.fa-heart:before {
+ content: "\f004"
+}
+
+.fa-star:before {
+ content: "\f005"
+}
+
+.fa-star-o:before {
+ content: "\f006"
+}
+
+.fa-user:before {
+ content: "\f007"
+}
+
+.fa-film:before {
+ content: "\f008"
+}
+
+.fa-th-large:before {
+ content: "\f009"
+}
+
+.fa-th:before {
+ content: "\f00a"
+}
+
+.fa-th-list:before {
+ content: "\f00b"
+}
+
+.fa-check:before {
+ content: "\f00c"
+}
+
+.fa-close:before, .fa-remove:before, .fa-times:before {
+ content: "\f00d"
+}
+
+.fa-search-plus:before {
+ content: "\f00e"
+}
+
+.fa-search-minus:before {
+ content: "\f010"
+}
+
+.fa-power-off:before {
+ content: "\f011"
+}
+
+.fa-signal:before {
+ content: "\f012"
+}
+
+.fa-cog:before, .fa-gear:before {
+ content: "\f013"
+}
+
+.fa-trash-o:before {
+ content: "\f014"
+}
+
+.fa-home:before {
+ content: "\f015"
+}
+
+.fa-file-o:before {
+ content: "\f016"
+}
+
+.fa-clock-o:before {
+ content: "\f017"
+}
+
+.fa-road:before {
+ content: "\f018"
+}
+
+.fa-download:before {
+ content: "\f019"
+}
+
+.fa-arrow-circle-o-down:before {
+ content: "\f01a"
+}
+
+.fa-arrow-circle-o-up:before {
+ content: "\f01b"
+}
+
+.fa-inbox:before {
+ content: "\f01c"
+}
+
+.fa-play-circle-o:before {
+ content: "\f01d"
+}
+
+.fa-repeat:before, .fa-rotate-right:before {
+ content: "\f01e"
+}
+
+.fa-refresh:before {
+ content: "\f021"
+}
+
+.fa-list-alt:before {
+ content: "\f022"
+}
+
+.fa-lock:before {
+ content: "\f023"
+}
+
+.fa-flag:before {
+ content: "\f024"
+}
+
+.fa-headphones:before {
+ content: "\f025"
+}
+
+.fa-volume-off:before {
+ content: "\f026"
+}
+
+.fa-volume-down:before {
+ content: "\f027"
+}
+
+.fa-volume-up:before {
+ content: "\f028"
+}
+
+.fa-qrcode:before {
+ content: "\f029"
+}
+
+.fa-barcode:before {
+ content: "\f02a"
+}
+
+.fa-tag:before {
+ content: "\f02b"
+}
+
+.fa-tags:before {
+ content: "\f02c"
+}
+
+.fa-book:before {
+ content: "\f02d"
+}
+
+.fa-bookmark:before {
+ content: "\f02e"
+}
+
+.fa-print:before {
+ content: "\f02f"
+}
+
+.fa-camera:before {
+ content: "\f030"
+}
+
+.fa-font:before {
+ content: "\f031"
+}
+
+.fa-bold:before {
+ content: "\f032"
+}
+
+.fa-italic:before {
+ content: "\f033"
+}
+
+.fa-text-height:before {
+ content: "\f034"
+}
+
+.fa-text-width:before {
+ content: "\f035"
+}
+
+.fa-align-left:before {
+ content: "\f036"
+}
+
+.fa-align-center:before {
+ content: "\f037"
+}
+
+.fa-align-right:before {
+ content: "\f038"
+}
+
+.fa-align-justify:before {
+ content: "\f039"
+}
+
+.fa-list:before {
+ content: "\f03a"
+}
+
+.fa-dedent:before, .fa-outdent:before {
+ content: "\f03b"
+}
+
+.fa-indent:before {
+ content: "\f03c"
+}
+
+.fa-video-camera:before {
+ content: "\f03d"
+}
+
+.fa-image:before, .fa-photo:before, .fa-picture-o:before {
+ content: "\f03e"
+}
+
+.fa-pencil:before {
+ content: "\f040"
+}
+
+.fa-map-marker:before {
+ content: "\f041"
+}
+
+.fa-adjust:before {
+ content: "\f042"
+}
+
+.fa-tint:before {
+ content: "\f043"
+}
+
+.fa-edit:before, .fa-pencil-square-o:before {
+ content: "\f044"
+}
+
+.fa-share-square-o:before {
+ content: "\f045"
+}
+
+.fa-check-square-o:before {
+ content: "\f046"
+}
+
+.fa-arrows:before {
+ content: "\f047"
+}
+
+.fa-step-backward:before {
+ content: "\f048"
+}
+
+.fa-fast-backward:before {
+ content: "\f049"
+}
+
+.fa-backward:before {
+ content: "\f04a"
+}
+
+.fa-play:before {
+ content: "\f04b"
+}
+
+.fa-pause:before {
+ content: "\f04c"
+}
+
+.fa-stop:before {
+ content: "\f04d"
+}
+
+.fa-forward:before {
+ content: "\f04e"
+}
+
+.fa-fast-forward:before {
+ content: "\f050"
+}
+
+.fa-step-forward:before {
+ content: "\f051"
+}
+
+.fa-eject:before {
+ content: "\f052"
+}
+
+.fa-chevron-left:before {
+ content: "\f053"
+}
+
+.fa-chevron-right:before {
+ content: "\f054"
+}
+
+.fa-plus-circle:before {
+ content: "\f055"
+}
+
+.fa-minus-circle:before {
+ content: "\f056"
+}
+
+.fa-times-circle:before {
+ content: "\f057"
+}
+
+.fa-check-circle:before {
+ content: "\f058"
+}
+
+.fa-question-circle:before {
+ content: "\f059"
+}
+
+.fa-info-circle:before {
+ content: "\f05a"
+}
+
+.fa-crosshairs:before {
+ content: "\f05b"
+}
+
+.fa-times-circle-o:before {
+ content: "\f05c"
+}
+
+.fa-check-circle-o:before {
+ content: "\f05d"
+}
+
+.fa-ban:before {
+ content: "\f05e"
+}
+
+.fa-arrow-left:before {
+ content: "\f060"
+}
+
+.fa-arrow-right:before {
+ content: "\f061"
+}
+
+.fa-arrow-up:before {
+ content: "\f062"
+}
+
+.fa-arrow-down:before {
+ content: "\f063"
+}
+
+.fa-mail-forward:before, .fa-share:before {
+ content: "\f064"
+}
+
+.fa-expand:before {
+ content: "\f065"
+}
+
+.fa-compress:before {
+ content: "\f066"
+}
+
+.fa-plus:before {
+ content: "\f067"
+}
+
+.fa-minus:before {
+ content: "\f068"
+}
+
+.fa-asterisk:before {
+ content: "\f069"
+}
+
+.fa-exclamation-circle:before {
+ content: "\f06a"
+}
+
+.fa-gift:before {
+ content: "\f06b"
+}
+
+.fa-leaf:before {
+ content: "\f06c"
+}
+
+.fa-fire:before {
+ content: "\f06d"
+}
+
+.fa-eye:before {
+ content: "\f06e"
+}
+
+.fa-eye-slash:before {
+ content: "\f070"
+}
+
+.fa-exclamation-triangle:before, .fa-warning:before {
+ content: "\f071"
+}
+
+.fa-plane:before {
+ content: "\f072"
+}
+
+.fa-calendar:before {
+ content: "\f073"
+}
+
+.fa-random:before {
+ content: "\f074"
+}
+
+.fa-comment:before {
+ content: "\f075"
+}
+
+.fa-magnet:before {
+ content: "\f076"
+}
+
+.fa-chevron-up:before {
+ content: "\f077"
+}
+
+.fa-chevron-down:before {
+ content: "\f078"
+}
+
+.fa-retweet:before {
+ content: "\f079"
+}
+
+.fa-shopping-cart:before {
+ content: "\f07a"
+}
+
+.fa-folder:before {
+ content: "\f07b"
+}
+
+.fa-folder-open:before {
+ content: "\f07c"
+}
+
+.fa-arrows-v:before {
+ content: "\f07d"
+}
+
+.fa-arrows-h:before {
+ content: "\f07e"
+}
+
+.fa-bar-chart-o:before, .fa-bar-chart:before {
+ content: "\f080"
+}
+
+.fa-twitter-square:before {
+ content: "\f081"
+}
+
+.fa-facebook-square:before {
+ content: "\f082"
+}
+
+.fa-camera-retro:before {
+ content: "\f083"
+}
+
+.fa-key:before {
+ content: "\f084"
+}
+
+.fa-cogs:before, .fa-gears:before {
+ content: "\f085"
+}
+
+.fa-comments:before {
+ content: "\f086"
+}
+
+.fa-thumbs-o-up:before {
+ content: "\f087"
+}
+
+.fa-thumbs-o-down:before {
+ content: "\f088"
+}
+
+.fa-star-half:before {
+ content: "\f089"
+}
+
+.fa-heart-o:before {
+ content: "\f08a"
+}
+
+.fa-sign-out:before {
+ content: "\f08b"
+}
+
+.fa-linkedin-square:before {
+ content: "\f08c"
+}
+
+.fa-thumb-tack:before {
+ content: "\f08d"
+}
+
+.fa-external-link:before {
+ content: "\f08e"
+}
+
+.fa-sign-in:before {
+ content: "\f090"
+}
+
+.fa-trophy:before {
+ content: "\f091"
+}
+
+.fa-github-square:before {
+ content: "\f092"
+}
+
+.fa-upload:before {
+ content: "\f093"
+}
+
+.fa-lemon-o:before {
+ content: "\f094"
+}
+
+.fa-phone:before {
+ content: "\f095"
+}
+
+.fa-square-o:before {
+ content: "\f096"
+}
+
+.fa-bookmark-o:before {
+ content: "\f097"
+}
+
+.fa-phone-square:before {
+ content: "\f098"
+}
+
+.fa-twitter:before {
+ content: "\f099"
+}
+
+.fa-facebook:before {
+ content: "\f09a"
+}
+
+.fa-github:before {
+ content: "\f09b"
+}
+
+.fa-unlock:before {
+ content: "\f09c"
+}
+
+.fa-credit-card:before {
+ content: "\f09d"
+}
+
+.fa-rss:before {
+ content: "\f09e"
+}
+
+.fa-hdd-o:before {
+ content: "\f0a0"
+}
+
+.fa-bullhorn:before {
+ content: "\f0a1"
+}
+
+.fa-bell:before {
+ content: "\f0f3"
+}
+
+.fa-certificate:before {
+ content: "\f0a3"
+}
+
+.fa-hand-o-right:before {
+ content: "\f0a4"
+}
+
+.fa-hand-o-left:before {
+ content: "\f0a5"
+}
+
+.fa-hand-o-up:before {
+ content: "\f0a6"
+}
+
+.fa-hand-o-down:before {
+ content: "\f0a7"
+}
+
+.fa-arrow-circle-left:before {
+ content: "\f0a8"
+}
+
+.fa-arrow-circle-right:before {
+ content: "\f0a9"
+}
+
+.fa-arrow-circle-up:before {
+ content: "\f0aa"
+}
+
+.fa-arrow-circle-down:before {
+ content: "\f0ab"
+}
+
+.fa-globe:before {
+ content: "\f0ac"
+}
+
+.fa-wrench:before {
+ content: "\f0ad"
+}
+
+.fa-tasks:before {
+ content: "\f0ae"
+}
+
+.fa-filter:before {
+ content: "\f0b0"
+}
+
+.fa-briefcase:before {
+ content: "\f0b1"
+}
+
+.fa-arrows-alt:before {
+ content: "\f0b2"
+}
+
+.fa-group:before, .fa-users:before {
+ content: "\f0c0"
+}
+
+.fa-chain:before, .fa-link:before {
+ content: "\f0c1"
+}
+
+.fa-cloud:before {
+ content: "\f0c2"
+}
+
+.fa-flask:before {
+ content: "\f0c3"
+}
+
+.fa-cut:before, .fa-scissors:before {
+ content: "\f0c4"
+}
+
+.fa-copy:before, .fa-files-o:before {
+ content: "\f0c5"
+}
+
+.fa-paperclip:before {
+ content: "\f0c6"
+}
+
+.fa-floppy-o:before, .fa-save:before {
+ content: "\f0c7"
+}
+
+.fa-square:before {
+ content: "\f0c8"
+}
+
+.fa-bars:before, .fa-navicon:before, .fa-reorder:before {
+ content: "\f0c9"
+}
+
+.fa-list-ul:before {
+ content: "\f0ca"
+}
+
+.fa-list-ol:before {
+ content: "\f0cb"
+}
+
+.fa-strikethrough:before {
+ content: "\f0cc"
+}
+
+.fa-underline:before {
+ content: "\f0cd"
+}
+
+.fa-table:before {
+ content: "\f0ce"
+}
+
+.fa-magic:before {
+ content: "\f0d0"
+}
+
+.fa-truck:before {
+ content: "\f0d1"
+}
+
+.fa-pinterest:before {
+ content: "\f0d2"
+}
+
+.fa-pinterest-square:before {
+ content: "\f0d3"
+}
+
+.fa-google-plus-square:before {
+ content: "\f0d4"
+}
+
+.fa-google-plus:before {
+ content: "\f0d5"
+}
+
+.fa-money:before {
+ content: "\f0d6"
+}
+
+.fa-caret-down:before {
+ content: "\f0d7"
+}
+
+.fa-caret-up:before {
+ content: "\f0d8"
+}
+
+.fa-caret-left:before {
+ content: "\f0d9"
+}
+
+.fa-caret-right:before {
+ content: "\f0da"
+}
+
+.fa-columns:before {
+ content: "\f0db"
+}
+
+.fa-sort:before, .fa-unsorted:before {
+ content: "\f0dc"
+}
+
+.fa-sort-desc:before, .fa-sort-down:before {
+ content: "\f0dd"
+}
+
+.fa-sort-asc:before, .fa-sort-up:before {
+ content: "\f0de"
+}
+
+.fa-envelope:before {
+ content: "\f0e0"
+}
+
+.fa-linkedin:before {
+ content: "\f0e1"
+}
+
+.fa-rotate-left:before, .fa-undo:before {
+ content: "\f0e2"
+}
+
+.fa-gavel:before, .fa-legal:before {
+ content: "\f0e3"
+}
+
+.fa-dashboard:before, .fa-tachometer:before {
+ content: "\f0e4"
+}
+
+.fa-comment-o:before {
+ content: "\f0e5"
+}
+
+.fa-comments-o:before {
+ content: "\f0e6"
+}
+
+.fa-bolt:before, .fa-flash:before {
+ content: "\f0e7"
+}
+
+.fa-sitemap:before {
+ content: "\f0e8"
+}
+
+.fa-umbrella:before {
+ content: "\f0e9"
+}
+
+.fa-clipboard:before, .fa-paste:before {
+ content: "\f0ea"
+}
+
+.fa-lightbulb-o:before {
+ content: "\f0eb"
+}
+
+.fa-exchange:before {
+ content: "\f0ec"
+}
+
+.fa-cloud-download:before {
+ content: "\f0ed"
+}
+
+.fa-cloud-upload:before {
+ content: "\f0ee"
+}
+
+.fa-user-md:before {
+ content: "\f0f0"
+}
+
+.fa-stethoscope:before {
+ content: "\f0f1"
+}
+
+.fa-suitcase:before {
+ content: "\f0f2"
+}
+
+.fa-bell-o:before {
+ content: "\f0a2"
+}
+
+.fa-coffee:before {
+ content: "\f0f4"
+}
+
+.fa-cutlery:before {
+ content: "\f0f5"
+}
+
+.fa-file-text-o:before {
+ content: "\f0f6"
+}
+
+.fa-building-o:before {
+ content: "\f0f7"
+}
+
+.fa-hospital-o:before {
+ content: "\f0f8"
+}
+
+.fa-ambulance:before {
+ content: "\f0f9"
+}
+
+.fa-medkit:before {
+ content: "\f0fa"
+}
+
+.fa-fighter-jet:before {
+ content: "\f0fb"
+}
+
+.fa-beer:before {
+ content: "\f0fc"
+}
+
+.fa-h-square:before {
+ content: "\f0fd"
+}
+
+.fa-plus-square:before {
+ content: "\f0fe"
+}
+
+.fa-angle-double-left:before {
+ content: "\f100"
+}
+
+.fa-angle-double-right:before {
+ content: "\f101"
+}
+
+.fa-angle-double-up:before {
+ content: "\f102"
+}
+
+.fa-angle-double-down:before {
+ content: "\f103"
+}
+
+.fa-angle-left:before {
+ content: "\f104"
+}
+
+.fa-angle-right:before {
+ content: "\f105"
+}
+
+.fa-angle-up:before {
+ content: "\f106"
+}
+
+.fa-angle-down:before {
+ content: "\f107"
+}
+
+.fa-desktop:before {
+ content: "\f108"
+}
+
+.fa-laptop:before {
+ content: "\f109"
+}
+
+.fa-tablet:before {
+ content: "\f10a"
+}
+
+.fa-mobile-phone:before, .fa-mobile:before {
+ content: "\f10b"
+}
+
+.fa-circle-o:before {
+ content: "\f10c"
+}
+
+.fa-quote-left:before {
+ content: "\f10d"
+}
+
+.fa-quote-right:before {
+ content: "\f10e"
+}
+
+.fa-spinner:before {
+ content: "\f110"
+}
+
+.fa-circle:before {
+ content: "\f111"
+}
+
+.fa-mail-reply:before, .fa-reply:before {
+ content: "\f112"
+}
+
+.fa-github-alt:before {
+ content: "\f113"
+}
+
+.fa-folder-o:before {
+ content: "\f114"
+}
+
+.fa-folder-open-o:before {
+ content: "\f115"
+}
+
+.fa-smile-o:before {
+ content: "\f118"
+}
+
+.fa-frown-o:before {
+ content: "\f119"
+}
+
+.fa-meh-o:before {
+ content: "\f11a"
+}
+
+.fa-gamepad:before {
+ content: "\f11b"
+}
+
+.fa-keyboard-o:before {
+ content: "\f11c"
+}
+
+.fa-flag-o:before {
+ content: "\f11d"
+}
+
+.fa-flag-checkered:before {
+ content: "\f11e"
+}
+
+.fa-terminal:before {
+ content: "\f120"
+}
+
+.fa-code:before {
+ content: "\f121"
+}
+
+.fa-mail-reply-all:before, .fa-reply-all:before {
+ content: "\f122"
+}
+
+.fa-star-half-empty:before, .fa-star-half-full:before, .fa-star-half-o:before {
+ content: "\f123"
+}
+
+.fa-location-arrow:before {
+ content: "\f124"
+}
+
+.fa-crop:before {
+ content: "\f125"
+}
+
+.fa-code-fork:before {
+ content: "\f126"
+}
+
+.fa-chain-broken:before, .fa-unlink:before {
+ content: "\f127"
+}
+
+.fa-question:before {
+ content: "\f128"
+}
+
+.fa-info:before {
+ content: "\f129"
+}
+
+.fa-exclamation:before {
+ content: "\f12a"
+}
+
+.fa-superscript:before {
+ content: "\f12b"
+}
+
+.fa-subscript:before {
+ content: "\f12c"
+}
+
+.fa-eraser:before {
+ content: "\f12d"
+}
+
+.fa-puzzle-piece:before {
+ content: "\f12e"
+}
+
+.fa-microphone:before {
+ content: "\f130"
+}
+
+.fa-microphone-slash:before {
+ content: "\f131"
+}
+
+.fa-shield:before {
+ content: "\f132"
+}
+
+.fa-calendar-o:before {
+ content: "\f133"
+}
+
+.fa-fire-extinguisher:before {
+ content: "\f134"
+}
+
+.fa-rocket:before {
+ content: "\f135"
+}
+
+.fa-maxcdn:before {
+ content: "\f136"
+}
+
+.fa-chevron-circle-left:before {
+ content: "\f137"
+}
+
+.fa-chevron-circle-right:before {
+ content: "\f138"
+}
+
+.fa-chevron-circle-up:before {
+ content: "\f139"
+}
+
+.fa-chevron-circle-down:before {
+ content: "\f13a"
+}
+
+.fa-html5:before {
+ content: "\f13b"
+}
+
+.fa-css3:before {
+ content: "\f13c"
+}
+
+.fa-anchor:before {
+ content: "\f13d"
+}
+
+.fa-unlock-alt:before {
+ content: "\f13e"
+}
+
+.fa-bullseye:before {
+ content: "\f140"
+}
+
+.fa-ellipsis-h:before {
+ content: "\f141"
+}
+
+.fa-ellipsis-v:before {
+ content: "\f142"
+}
+
+.fa-rss-square:before {
+ content: "\f143"
+}
+
+.fa-play-circle:before {
+ content: "\f144"
+}
+
+.fa-ticket:before {
+ content: "\f145"
+}
+
+.fa-minus-square:before {
+ content: "\f146"
+}
+
+.fa-minus-square-o:before {
+ content: "\f147"
+}
+
+.fa-level-up:before {
+ content: "\f148"
+}
+
+.fa-level-down:before {
+ content: "\f149"
+}
+
+.fa-check-square:before {
+ content: "\f14a"
+}
+
+.fa-pencil-square:before {
+ content: "\f14b"
+}
+
+.fa-external-link-square:before {
+ content: "\f14c"
+}
+
+.fa-share-square:before {
+ content: "\f14d"
+}
+
+.fa-compass:before {
+ content: "\f14e"
+}
+
+.fa-caret-square-o-down:before, .fa-toggle-down:before {
+ content: "\f150"
+}
+
+.fa-caret-square-o-up:before, .fa-toggle-up:before {
+ content: "\f151"
+}
+
+.fa-caret-square-o-right:before, .fa-toggle-right:before {
+ content: "\f152"
+}
+
+.fa-eur:before, .fa-euro:before {
+ content: "\f153"
+}
+
+.fa-gbp:before {
+ content: "\f154"
+}
+
+.fa-dollar:before, .fa-usd:before {
+ content: "\f155"
+}
+
+.fa-inr:before, .fa-rupee:before {
+ content: "\f156"
+}
+
+.fa-cny:before, .fa-jpy:before, .fa-rmb:before, .fa-yen:before {
+ content: "\f157"
+}
+
+.fa-rouble:before, .fa-rub:before, .fa-ruble:before {
+ content: "\f158"
+}
+
+.fa-krw:before, .fa-won:before {
+ content: "\f159"
+}
+
+.fa-bitcoin:before, .fa-btc:before {
+ content: "\f15a"
+}
+
+.fa-file:before {
+ content: "\f15b"
+}
+
+.fa-file-text:before {
+ content: "\f15c"
+}
+
+.fa-sort-alpha-asc:before {
+ content: "\f15d"
+}
+
+.fa-sort-alpha-desc:before {
+ content: "\f15e"
+}
+
+.fa-sort-amount-asc:before {
+ content: "\f160"
+}
+
+.fa-sort-amount-desc:before {
+ content: "\f161"
+}
+
+.fa-sort-numeric-asc:before {
+ content: "\f162"
+}
+
+.fa-sort-numeric-desc:before {
+ content: "\f163"
+}
+
+.fa-thumbs-up:before {
+ content: "\f164"
+}
+
+.fa-thumbs-down:before {
+ content: "\f165"
+}
+
+.fa-youtube-square:before {
+ content: "\f166"
+}
+
+.fa-youtube:before {
+ content: "\f167"
+}
+
+.fa-xing:before {
+ content: "\f168"
+}
+
+.fa-xing-square:before {
+ content: "\f169"
+}
+
+.fa-youtube-play:before {
+ content: "\f16a"
+}
+
+.fa-dropbox:before {
+ content: "\f16b"
+}
+
+.fa-stack-overflow:before {
+ content: "\f16c"
+}
+
+.fa-instagram:before {
+ content: "\f16d"
+}
+
+.fa-flickr:before {
+ content: "\f16e"
+}
+
+.fa-adn:before {
+ content: "\f170"
+}
+
+.fa-bitbucket:before {
+ content: "\f171"
+}
+
+.fa-bitbucket-square:before {
+ content: "\f172"
+}
+
+.fa-tumblr:before {
+ content: "\f173"
+}
+
+.fa-tumblr-square:before {
+ content: "\f174"
+}
+
+.fa-long-arrow-down:before {
+ content: "\f175"
+}
+
+.fa-long-arrow-up:before {
+ content: "\f176"
+}
+
+.fa-long-arrow-left:before {
+ content: "\f177"
+}
+
+.fa-long-arrow-right:before {
+ content: "\f178"
+}
+
+.fa-apple:before {
+ content: "\f179"
+}
+
+.fa-windows:before {
+ content: "\f17a"
+}
+
+.fa-android:before {
+ content: "\f17b"
+}
+
+.fa-linux:before {
+ content: "\f17c"
+}
+
+.fa-dribbble:before {
+ content: "\f17d"
+}
+
+.fa-skype:before {
+ content: "\f17e"
+}
+
+.fa-foursquare:before {
+ content: "\f180"
+}
+
+.fa-trello:before {
+ content: "\f181"
+}
+
+.fa-female:before {
+ content: "\f182"
+}
+
+.fa-male:before {
+ content: "\f183"
+}
+
+.fa-gittip:before {
+ content: "\f184"
+}
+
+.fa-sun-o:before {
+ content: "\f185"
+}
+
+.fa-moon-o:before {
+ content: "\f186"
+}
+
+.fa-archive:before {
+ content: "\f187"
+}
+
+.fa-bug:before {
+ content: "\f188"
+}
+
+.fa-vk:before {
+ content: "\f189"
+}
+
+.fa-weibo:before {
+ content: "\f18a"
+}
+
+.fa-renren:before {
+ content: "\f18b"
+}
+
+.fa-pagelines:before {
+ content: "\f18c"
+}
+
+.fa-stack-exchange:before {
+ content: "\f18d"
+}
+
+.fa-arrow-circle-o-right:before {
+ content: "\f18e"
+}
+
+.fa-arrow-circle-o-left:before {
+ content: "\f190"
+}
+
+.fa-caret-square-o-left:before, .fa-toggle-left:before {
+ content: "\f191"
+}
+
+.fa-dot-circle-o:before {
+ content: "\f192"
+}
+
+.fa-wheelchair:before {
+ content: "\f193"
+}
+
+.fa-vimeo-square:before {
+ content: "\f194"
+}
+
+.fa-try:before, .fa-turkish-lira:before {
+ content: "\f195"
+}
+
+.fa-plus-square-o:before {
+ content: "\f196"
+}
+
+.fa-space-shuttle:before {
+ content: "\f197"
+}
+
+.fa-slack:before {
+ content: "\f198"
+}
+
+.fa-envelope-square:before {
+ content: "\f199"
+}
+
+.fa-wordpress:before {
+ content: "\f19a"
+}
+
+.fa-openid:before {
+ content: "\f19b"
+}
+
+.fa-bank:before, .fa-institution:before, .fa-university:before {
+ content: "\f19c"
+}
+
+.fa-graduation-cap:before, .fa-mortar-board:before {
+ content: "\f19d"
+}
+
+.fa-yahoo:before {
+ content: "\f19e"
+}
+
+.fa-google:before {
+ content: "\f1a0"
+}
+
+.fa-reddit:before {
+ content: "\f1a1"
+}
+
+.fa-reddit-square:before {
+ content: "\f1a2"
+}
+
+.fa-stumbleupon-circle:before {
+ content: "\f1a3"
+}
+
+.fa-stumbleupon:before {
+ content: "\f1a4"
+}
+
+.fa-delicious:before {
+ content: "\f1a5"
+}
+
+.fa-digg:before {
+ content: "\f1a6"
+}
+
+.fa-pied-piper:before {
+ content: "\f1a7"
+}
+
+.fa-pied-piper-alt:before {
+ content: "\f1a8"
+}
+
+.fa-drupal:before {
+ content: "\f1a9"
+}
+
+.fa-joomla:before {
+ content: "\f1aa"
+}
+
+.fa-language:before {
+ content: "\f1ab"
+}
+
+.fa-fax:before {
+ content: "\f1ac"
+}
+
+.fa-building:before {
+ content: "\f1ad"
+}
+
+.fa-child:before {
+ content: "\f1ae"
+}
+
+.fa-paw:before {
+ content: "\f1b0"
+}
+
+.fa-spoon:before {
+ content: "\f1b1"
+}
+
+.fa-cube:before {
+ content: "\f1b2"
+}
+
+.fa-cubes:before {
+ content: "\f1b3"
+}
+
+.fa-behance:before {
+ content: "\f1b4"
+}
+
+.fa-behance-square:before {
+ content: "\f1b5"
+}
+
+.fa-steam:before {
+ content: "\f1b6"
+}
+
+.fa-steam-square:before {
+ content: "\f1b7"
+}
+
+.fa-recycle:before {
+ content: "\f1b8"
+}
+
+.fa-automobile:before, .fa-car:before {
+ content: "\f1b9"
+}
+
+.fa-cab:before, .fa-taxi:before {
+ content: "\f1ba"
+}
+
+.fa-tree:before {
+ content: "\f1bb"
+}
+
+.fa-spotify:before {
+ content: "\f1bc"
+}
+
+.fa-deviantart:before {
+ content: "\f1bd"
+}
+
+.fa-soundcloud:before {
+ content: "\f1be"
+}
+
+.fa-database:before {
+ content: "\f1c0"
+}
+
+.fa-file-pdf-o:before {
+ content: "\f1c1"
+}
+
+.fa-file-word-o:before {
+ content: "\f1c2"
+}
+
+.fa-file-excel-o:before {
+ content: "\f1c3"
+}
+
+.fa-file-powerpoint-o:before {
+ content: "\f1c4"
+}
+
+.fa-file-image-o:before, .fa-file-photo-o:before, .fa-file-picture-o:before {
+ content: "\f1c5"
+}
+
+.fa-file-archive-o:before, .fa-file-zip-o:before {
+ content: "\f1c6"
+}
+
+.fa-file-audio-o:before, .fa-file-sound-o:before {
+ content: "\f1c7"
+}
+
+.fa-file-movie-o:before, .fa-file-video-o:before {
+ content: "\f1c8"
+}
+
+.fa-file-code-o:before {
+ content: "\f1c9"
+}
+
+.fa-vine:before {
+ content: "\f1ca"
+}
+
+.fa-codepen:before {
+ content: "\f1cb"
+}
+
+.fa-jsfiddle:before {
+ content: "\f1cc"
+}
+
+.fa-life-bouy:before, .fa-life-buoy:before, .fa-life-ring:before, .fa-life-saver:before, .fa-support:before {
+ content: "\f1cd"
+}
+
+.fa-circle-o-notch:before {
+ content: "\f1ce"
+}
+
+.fa-ra:before, .fa-rebel:before {
+ content: "\f1d0"
+}
+
+.fa-empire:before, .fa-ge:before {
+ content: "\f1d1"
+}
+
+.fa-git-square:before {
+ content: "\f1d2"
+}
+
+.fa-git:before {
+ content: "\f1d3"
+}
+
+.fa-hacker-news:before {
+ content: "\f1d4"
+}
+
+.fa-tencent-weibo:before {
+ content: "\f1d5"
+}
+
+.fa-qq:before {
+ content: "\f1d6"
+}
+
+.fa-wechat:before, .fa-weixin:before {
+ content: "\f1d7"
+}
+
+.fa-paper-plane:before, .fa-send:before {
+ content: "\f1d8"
+}
+
+.fa-paper-plane-o:before, .fa-send-o:before {
+ content: "\f1d9"
+}
+
+.fa-history:before {
+ content: "\f1da"
+}
+
+.fa-circle-thin:before {
+ content: "\f1db"
+}
+
+.fa-header:before {
+ content: "\f1dc"
+}
+
+.fa-paragraph:before {
+ content: "\f1dd"
+}
+
+.fa-sliders:before {
+ content: "\f1de"
+}
+
+.fa-share-alt:before {
+ content: "\f1e0"
+}
+
+.fa-share-alt-square:before {
+ content: "\f1e1"
+}
+
+.fa-bomb:before {
+ content: "\f1e2"
+}
+
+.fa-futbol-o:before, .fa-soccer-ball-o:before {
+ content: "\f1e3"
+}
+
+.fa-tty:before {
+ content: "\f1e4"
+}
+
+.fa-binoculars:before {
+ content: "\f1e5"
+}
+
+.fa-plug:before {
+ content: "\f1e6"
+}
+
+.fa-slideshare:before {
+ content: "\f1e7"
+}
+
+.fa-twitch:before {
+ content: "\f1e8"
+}
+
+.fa-yelp:before {
+ content: "\f1e9"
+}
+
+.fa-newspaper-o:before {
+ content: "\f1ea"
+}
+
+.fa-wifi:before {
+ content: "\f1eb"
+}
+
+.fa-calculator:before {
+ content: "\f1ec"
+}
+
+.fa-paypal:before {
+ content: "\f1ed"
+}
+
+.fa-google-wallet:before {
+ content: "\f1ee"
+}
+
+.fa-cc-visa:before {
+ content: "\f1f0"
+}
+
+.fa-cc-mastercard:before {
+ content: "\f1f1"
+}
+
+.fa-cc-discover:before {
+ content: "\f1f2"
+}
+
+.fa-cc-amex:before {
+ content: "\f1f3"
+}
+
+.fa-cc-paypal:before {
+ content: "\f1f4"
+}
+
+.fa-cc-stripe:before {
+ content: "\f1f5"
+}
+
+.fa-bell-slash:before {
+ content: "\f1f6"
+}
+
+.fa-bell-slash-o:before {
+ content: "\f1f7"
+}
+
+.fa-trash:before {
+ content: "\f1f8"
+}
+
+.fa-copyright:before {
+ content: "\f1f9"
+}
+
+.fa-at:before {
+ content: "\f1fa"
+}
+
+.fa-eyedropper:before {
+ content: "\f1fb"
+}
+
+.fa-paint-brush:before {
+ content: "\f1fc"
+}
+
+.fa-birthday-cake:before {
+ content: "\f1fd"
+}
+
+.fa-area-chart:before {
+ content: "\f1fe"
+}
+
+.fa-pie-chart:before {
+ content: "\f200"
+}
+
+.fa-line-chart:before {
+ content: "\f201"
+}
+
+.fa-lastfm:before {
+ content: "\f202"
+}
+
+.fa-lastfm-square:before {
+ content: "\f203"
+}
+
+.fa-toggle-off:before {
+ content: "\f204"
+}
+
+.fa-toggle-on:before {
+ content: "\f205"
+}
+
+.fa-bicycle:before {
+ content: "\f206"
+}
+
+.fa-bus:before {
+ content: "\f207"
+}
+
+.fa-ioxhost:before {
+ content: "\f208"
+}
+
+.fa-angellist:before {
+ content: "\f209"
+}
+
+.fa-cc:before {
+ content: "\f20a"
+}
+
+.fa-ils:before, .fa-shekel:before, .fa-sheqel:before {
+ content: "\f20b"
+}
+
+.fa-meanpath:before {
+ content: "\f20c"
+}
\ No newline at end of file
diff --git a/web/public/css/jquery.avgrund.min.css b/web/public/css/jquery.avgrund.min.css
new file mode 100644
index 0000000..9a3c1bb
--- /dev/null
+++ b/web/public/css/jquery.avgrund.min.css
@@ -0,0 +1,105 @@
+.avgrund-popin {
+ position: absolute;
+ background: #fff;
+ padding: 10px;
+ overflow: hidden;
+ visibility: hidden;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ top: 50%;
+ left: 50%;
+ z-index: 1000;
+ box-shadow: 0 1px 10px 0 rgba(0, 0, 0, .5);
+ -webkit-transform: scale(0.8);
+ -moz-transform: scale(0.8);
+ -ms-transform: scale(0.8);
+ -o-transform: scale(0.8);
+ transform: scale(0.8)
+}
+
+.avgrund-overlay {
+ background: #000;
+ width: 100%;
+ position: relative;
+ top: -1500px;
+ left: 0;
+ z-index: 101;
+ visibility: hidden;
+ opacity: 0;
+ filter: alpha(opacity=0)
+}
+
+body.avgrund-ready, .avgrund-ready .avgrund-popin, .avgrund-ready .avgrund-overlay {
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ -o-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+ -webkit-transition: 0.3s all ease-out;
+ -moz-transition: 0.3s all ease-out;
+ -ms-transition: 0.3s all ease-out;
+ -o-transition: 0.3s all ease-out;
+ transition: 0.3s all ease-out
+}
+
+body.avgrund-active {
+ -webkit-transform: scale(0.9);
+ -moz-transform: scale(0.9);
+ -ms-transform: scale(0.9);
+ -o-transform: scale(0.9);
+ transform: scale(0.9);
+ overflow: hidden
+}
+
+.avgrund-active .avgrund-popin {
+ visibility: visible;
+ opacity: 1;
+ filter: alpha(opacity=100);
+ -webkit-transform: scale(1.1);
+ -moz-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ -o-transform: scale(1.1);
+ transform: scale(1.1)
+}
+
+.avgrund-active .avgrund-overlay {
+ visibility: visible;
+ opacity: .5;
+ filter: alpha(opacity=50);
+ height: 20000px
+}
+
+.avgrund-popin.stack {
+ -webkit-transform: scale(1.5);
+ -moz-transform: scale(1.5);
+ -ms-transform: scale(1.5);
+ -o-transform: scale(1.5);
+ transform: scale(1.5)
+}
+
+.avgrund-active .avgrund-popin.stack {
+ -webkit-transform: scale(1.1);
+ -moz-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ -o-transform: scale(1.1);
+ transform: scale(1.1)
+}
+
+.avgrund-active .avgrund-blur {
+ -webkit-filter: blur(1px);
+ -moz-filter: blur(1px);
+ -ms-filter: blur(1px);
+ -o-filter: blur(1px);
+ filter: blur(1px)
+}
+
+.avgrund-close {
+ display: block;
+ color: #555;
+ font-size: 13px;
+ text-decoration: none;
+ text-transform: uppercase;
+ position: absolute;
+ top: 6px;
+ right: 10px
+}
\ No newline at end of file
diff --git a/web/public/css/jquery.fullPage.css b/web/public/css/jquery.fullPage.css
new file mode 100755
index 0000000..7370ab8
--- /dev/null
+++ b/web/public/css/jquery.fullPage.css
@@ -0,0 +1,199 @@
+/**
+ * fullPage 2.4.3
+ * https://github.com/alvarotrigo/fullPage.js
+ * MIT licensed
+ *
+ * Copyright (C) 2013 alvarotrigo.com - A project by Alvaro Trigo
+ */
+html, body {
+ margin: 0;
+ padding: 0;
+ overflow: hidden;
+
+ /*Avoid flicker on slides transitions for mobile phones #336 */
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+#superContainer {
+ height: 100%;
+ position: relative;
+
+ /* Touch detection for Windows 8 */
+ -ms-touch-action: none;
+
+ /* IE 11 on Windows Phone 8.1*/
+ touch-action: none;
+}
+
+.fp-section {
+ position: relative;
+ -webkit-box-sizing: border-box; /* Safari<=5 Android<=3 */
+ -moz-box-sizing: border-box; /* <=28 */
+ box-sizing: border-box;
+}
+
+.fp-slide {
+ float: left;
+}
+
+.fp-slide, .fp-slidesContainer {
+ height: 100%;
+ display: block;
+}
+
+.fp-slides {
+ z-index: 1;
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ -webkit-transition: all 0.3s ease-out; /* Safari<=6 Android<=4.3 */
+ transition: all 0.3s ease-out;
+}
+
+.fp-section.fp-table, .fp-slide.fp-table {
+ display: table;
+ width: 100%;
+}
+
+.fp-tableCell {
+ display: table-cell;
+ vertical-align: middle;
+ width: 100%;
+ height: 100%;
+}
+
+.fp-slidesContainer {
+ float: left;
+ position: relative;
+}
+
+.fp-controlArrow {
+ position: absolute;
+ z-index: 4;
+ top: 50%;
+ cursor: pointer;
+ width: 0;
+ height: 0;
+ border-style: solid;
+ margin-top: -38px;
+}
+
+.fp-controlArrow.fp-prev {
+ left: 15px;
+ width: 0;
+ border-width: 38.5px 34px 38.5px 0;
+ border-color: transparent #fff transparent transparent;
+}
+
+.fp-controlArrow.fp-next {
+ right: 15px;
+ border-width: 38.5px 0 38.5px 34px;
+ border-color: transparent transparent transparent #fff;
+}
+
+.fp-scrollable {
+ overflow: scroll;
+
+}
+
+.fp-notransition {
+ -webkit-transition: none !important;
+ transition: none !important;
+}
+
+#fp-nav {
+ position: fixed;
+ z-index: 100;
+ margin-top: -32px;
+ top: 50%;
+ opacity: 1;
+}
+
+#fp-nav.right {
+ right: 17px;
+}
+
+#fp-nav.left {
+ left: 17px;
+}
+
+.fp-slidesNav {
+ position: absolute;
+ z-index: 4;
+ left: 50%;
+ opacity: 1;
+}
+
+.fp-slidesNav.bottom {
+ bottom: 17px;
+}
+
+.fp-slidesNav.top {
+ top: 17px;
+}
+
+#fp-nav ul,
+.fp-slidesNav ul {
+ margin: 0;
+ padding: 0;
+}
+
+#fp-nav li,
+.fp-slidesNav li {
+ display: block;
+ width: 14px;
+ height: 13px;
+ margin: 7px;
+ position: relative;
+}
+
+.fp-slidesNav li {
+ display: inline-block;
+}
+
+#fp-nav li a,
+.fp-slidesNav li a {
+ display: block;
+ position: relative;
+ z-index: 1;
+ width: 100%;
+ height: 100%;
+ cursor: pointer;
+ text-decoration: none;
+}
+
+#fp-nav li .active span,
+.fp-slidesNav .active span {
+ background: #fff;
+}
+
+#fp-nav span,
+.fp-slidesNav span {
+ top: 2px;
+ left: 2px;
+ width: 8px;
+ height: 8px;
+ border: 1px solid #eee;
+ background: rgba(0, 0, 0, 0);
+ border-radius: 50%;
+ position: absolute;
+ z-index: 1;
+}
+
+.fp-tooltip {
+ position: absolute;
+ top: -2px;
+ color: #fff;
+ font-size: 14px;
+ font-family: arial, helvetica, sans-serif;
+ white-space: nowrap;
+ max-width: 220px;
+}
+
+.fp-tooltip.right {
+ right: 20px;
+}
+
+.fp-tooltip.left {
+ left: 20px;
+}
diff --git a/web/public/css/jquery.sticky.min.css b/web/public/css/jquery.sticky.min.css
new file mode 100644
index 0000000..3c761cb
--- /dev/null
+++ b/web/public/css/jquery.sticky.min.css
@@ -0,0 +1,86 @@
+/**
+ * jquery.sticky 0.0.1
+ * https://github.com/Tjatse/sticky
+ *
+ * Apache, License 2.0
+ * Copyright (C) 2014 Tjatse
+ */
+.sticky-holder {
+ position: fixed;
+ z-index: 99999;
+ font-family: Verdana, Helvetica, STHeiti, 'sans-serif'
+}
+
+.sticky {
+ box-shadow: 1px 1px 2px #000, -1px -1px 1px #444, inset -1px -1px 2px #fff, inset 1px 1px 2px #fff;
+ -moz-box-shadow: 1px 1px 2px #000, -1px -1px 1px #444, inset -1px -1px 2px #fff, inset 1px 1px 2px #fff;
+ -webkit-box-shadow: 1px 1px 2px #000, -1px -1px 1px #444, inset -1px -1px 2px #fff, inset 1px 1px 2px #fff;
+ -o-box-shadow: 1px 1px 2px #000, -1px -1px 1px #444, inset -1px -1px 2px #fff, inset 1px 1px 2px #fff;
+ background: #fafafa;
+ border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -o-border-radius: 4px;
+ position: absolute;
+ border: solid 1px #000;
+ background-image: -moz-linear-gradient(top, #fff, #eee);
+ background-image: -o-linear-gradient(top, #fff, #eee);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #eee));
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff', endColorstr='#eee', GradientType=0);
+ animation-duration: 500ms;
+ animation-delay: 0s;
+ animation-iteration-count: 1;
+ -moz-animation-duration: 500ms;
+ -moz-animation-delay: 0s;
+ -moz-animation-iteration-count: 1;
+ -webkit-animation-duration: 500ms;
+ -webkit-animation-delay: 0s;
+ -webkit-animation-iteration-count: 1;
+ -o-animation-duration: 500ms;
+ -o-animation-delay: 0s;
+ -o-animation-iteration-count: 1
+}
+
+.sticky div.sticky-title {
+ font-weight: bold;
+ font-size: 14px;
+ margin: 0 10px 0 10px;
+ padding: 5px 10px 8px 0;
+ border-bottom: solid 1px #eee
+}
+
+.sticky p.sticky-body {
+ font-size: 14px;
+ line-height: 22px;
+ color: #555;
+ padding: 10px;
+ margin: 0;
+ clear: both;
+ float: none
+}
+
+.sticky img.sticky-icon {
+ float: left;
+ margin: 5px 5px 5px 0;
+ max-width: 32px;
+ max-height: 32px
+}
+
+.sticky > span {
+ font-size: 18px;
+ font-weight: bold;
+ position: absolute;
+ right: 5px;
+ top: 5px;
+ width: 20px;
+ height: 20px;
+ line-height: 20px;
+ display: block;
+ text-align: center;
+ cursor: pointer;
+ color: #ccc
+}
+
+.sticky > span:hover {
+ color: #000
+}
\ No newline at end of file
diff --git a/web/public/css/style.css b/web/public/css/style.css
new file mode 100644
index 0000000..049e1c7
--- /dev/null
+++ b/web/public/css/style.css
@@ -0,0 +1,440 @@
+html, body {
+ background-color: #000;
+ font-family: Consolas, Menlo, Monaco, monospace;
+ letter-spacing: 0.5px;
+ height: 100%;
+ -webkit-text-size-adjust: none;
+}
+
+.load {
+ background: url(/img/ajax-loading.gif) no-repeat center center;
+ width: 20px;
+ height: 20px;
+ display: block;
+}
+
+.spinner {
+ z-index: 9999;
+ text-align: center;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin-left: -50px;
+ margin-top: -20px;
+ width: 100px;
+ height: 40px;
+}
+
+@-webkit-keyframes stretchdelay {
+ 0%, 40%, 100% {
+ -webkit-transform: scaleY(0.4)
+ }
+ 20% {
+ -webkit-transform: scaleY(1.0)
+ }
+}
+
+@-moz-keyframes stretchdelay {
+ 0%, 40%, 100% {
+ -webkit-transform: scaleY(0.4)
+ }
+ 20% {
+ -webkit-transform: scaleY(1.0)
+ }
+}
+
+@-o-keyframes stretchdelay {
+ 0%, 40%, 100% {
+ -webkit-transform: scaleY(0.4)
+ }
+ 20% {
+ -webkit-transform: scaleY(1.0)
+ }
+}
+
+@keyframes stretchdelay {
+ 0%, 40%, 100% {
+ transform: scaleY(0.4);
+ -moz-transform: scaleY(0.4);
+ -o-transform: scaleY(0.4);
+ -webkit-transform: scaleY(0.4);
+ }
+ 20% {
+ transform: scaleY(1.0);
+ -moz-transform: scaleY(1.0);
+ -o-transform: scaleY(1.0);
+ -webkit-transform: scaleY(1.0);
+ }
+}
+
+.spinner > div {
+ background-color: #f0f0f0;
+ height: 100%;
+ display: inline-block;
+ width: 8px;
+
+ -webkit-animation: stretchdelay 1.1s infinite ease-in-out;
+ -moz-animation: stretchdelay 1.1s infinite ease-in-out;
+ -o-animation: stretchdelay 1.1s infinite ease-in-out;
+ animation: stretchdelay 1.1s infinite ease-in-out;
+}
+
+.spinner > div:nth-child(1) {
+ -webkit-animation-delay: 0s;
+ -moz-animation-delay: 0s;
+ -o-animation-delay: 0s;
+ animation-delay: 0s;
+}
+
+.spinner > div:nth-child(2) {
+ -webkit-animation-delay: 0.1s;
+ -moz-animation-delay: 0.1s;
+ -o-animation-delay: 0.1s;
+ animation-delay: 0.1s;
+}
+
+.spinner > div:nth-child(3) {
+ -webkit-animation-delay: 0.2s;
+ -moz-animation-delay: 0.2s;
+ -o-animation-delay: 0.2s;
+ animation-delay: 0.2s;
+}
+
+.spinner > div:nth-child(4) {
+ -webkit-animation-delay: 0.3s;
+ -moz-animation-delay: 0.3s;
+ -o-animation-delay: 0.3s;
+ animation-delay: 0.3s;
+}
+
+.spinner > div:nth-child(5) {
+ -webkit-animation-delay: 0.4s;
+ -moz-animation-delay: 0.4s;
+ -o-animation-delay: 0.4s;
+ animation-delay: 0.4s;
+}
+
+.polar_usage {
+ margin: 0 auto;
+}
+
+.polar_usage text {
+ text-anchor: middle;
+ font-size: 10px;
+ fill: #fff;
+}
+
+.repo {
+ width: 100px;
+ text-align: center;
+ position: absolute;
+ left: 50%;
+ top: 3px;
+ margin-left: -50px;
+}
+
+.repo a {
+ display: block;
+ color: #666;
+}
+
+.repo a:hover {
+ color: #fff;
+}
+
+.repo span {
+ display: block;
+ color: #888;
+ font-size: 10px;
+}
+
+.system_info {
+ width: 200px;
+ margin: 0 auto;
+ display: none;
+}
+
+.system_info dl * {
+ width: 95px;
+ height: 20px;
+ line-height: 20px;
+ display: inline-block;
+ margin: 0;
+ font-weight: normal;
+}
+
+.system_info dl dt {
+ padding-right: 5px;
+ text-align: right;
+ color: #fff;
+}
+
+.system_info dl dd {
+ text-align: left;
+ padding-left: 5px;
+ color: #ccc;
+}
+
+.procs-hint-container {
+ position: absolute;
+ bottom: -1px;
+ left: 50%;
+ margin-left: -50px;
+ width: 100px;
+ height: 50px;
+ background: #3b4163;
+ border-radius: 50px 50px 0 0;
+ box-shadow: 0 -2px 3px #272e44;
+ -moz-box-shadow: 0 -2px 3px #272e44;
+ -o-box-shadow: 0 -2px 3px #272e44;
+}
+
+.procs-hint-container div {
+ width: 100%;
+ line-height: 65px;
+ text-align: center;
+ font-size: 16px;
+ color: #8e99bb;
+ text-shadow: 1px 1px 1px #000;
+}
+
+.procs-hint-container div span {
+ color: #c1ccec;
+}
+
+.procs, .slimScrollDiv {
+ width: 720px;
+ margin: 0 auto;
+}
+
+.procs .proc-div {
+ height: 1px;
+ margin: 5px 0;
+ width: 100%;
+ background: -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0, #3b4163),
+ color-stop(0.3, rgb(255, 255, 255)),
+ color-stop(0.9, #3b4163));
+ background: -moz-linear-gradient(left, #3b4163, rgb(255, 255, 255), #3b4163);
+ background: -o-linear-gradient(left, #3b4163, rgb(255, 255, 255), #3b4163);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#3b4163, endColorstr=#fff, GradientType=1);
+}
+
+.procs .proc {
+ width: 100%;
+ height: 50px;
+ position: relative;
+}
+
+.procs .proc-stop .proc-info {
+ opacity: 0.8;
+}
+
+.procs .proc .proc-col {
+ display: table-cell;
+}
+
+.procs .proc .proc-status {
+ text-align: center;
+ width: 50px;
+ height: 50px;
+}
+
+.procs .proc .proc-status i {
+ font-size: 16px;
+ top: -18px;
+ color: #5fe210;
+}
+
+.procs .proc-empty .proc-status i {
+ color: #fddf68
+}
+
+.procs .proc-stop .proc-status i {
+ color: #e98080;
+}
+
+.procs .proc .proc-info {
+ width: 600px;
+}
+
+.proc-info ul, .proc-info ul li {
+ list-style: none;
+ list-style-position: outside;
+ margin: 0;
+ padding: 0;
+ height: 30px;
+ display: block;
+}
+
+.proc-info ul.proc-title li {
+ height: 30px;
+ line-height: 30px;
+ font-size: 16px;
+ color: #fff;
+ float: left;
+}
+
+.proc-info ul.proc-title li.proc-name {
+ color: #73cce5;
+ cursor: pointer;
+ margin: 0 4px 0 2px;
+}
+.proc-info ul.proc-title li.proc-alert{
+ color: #fff;
+ margin: 0 4px 0 2px;
+}
+.proc-info ul.proc-title li sup{
+ font-size: 10px;
+ color: #4b8698;
+}
+
+.proc-info ul.proc-content {
+ height: 20px;
+}
+
+.proc-info ul.proc-content li {
+ color: #ccc;
+ height: 20px;
+ line-height: 20px;
+ font-size: 12px;
+ float: left;
+ text-align: left;
+ padding-left: 5px;
+}
+
+.proc-info ul.proc-content li.proc-file {
+ width: 300px;
+}
+
+.proc-info ul.proc-content li.proc-mem {
+ color: #5cb85c;
+ width: 35px;
+}
+
+.proc-info ul.proc-content li.proc-restart {
+ color: #f0ad4e;
+ width: 30px;
+}
+
+.proc-info ul.proc-content li.proc-uptime {
+ width: 100px;
+}
+
+.proc-info ul.proc-content li.proc-mode {
+ width: 70px;
+}
+
+.proc-info ul.proc-content li.proc-mode span {
+ border-radius: 2px;
+ padding: 3px 5px;
+}
+
+.proc-info ul.proc-content li.proc-mode-fork span {
+ color: #fff;
+ background: #323332;
+}
+
+.proc-info ul.proc-content li.proc-mode-cluster span {
+ color: #fff;
+ background: #426dbe;
+}
+
+.procs .proc .proc-ops {
+ width: 70px;
+ position: relative;
+ top: -18px;
+ text-align: right;
+}
+
+.procs .proc .proc-ops ul,
+.procs .proc .proc-ops ul li {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ list-style-position: outside;
+}
+
+.procs .proc .proc-ops ul
+.procs .proc .proc-ops .load {
+ position: absolute;
+ top: 0px;
+}
+
+.procs .proc .proc-ops ul li {
+ float: left;
+ padding: 0 2px;
+}
+
+.procs .proc .proc-ops ul li i {
+ font-size: 12px;
+ color: #fff;
+ cursor: pointer;
+ opacity: 0.5;
+}
+
+.procs .proc .proc-ops ul li i:hover {
+ opacity: 0.8;
+}
+
+.procs .proc .proc-ops ul li i:active {
+ opacity: 1;
+}
+
+.proc-popup {
+ color: #555;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -o-border-radius: 5px;
+ border-radius: 5px;
+}
+
+#popup {
+ height: 330px;
+ width: 100%;
+ position: relative;
+}
+
+#popup .load {
+ background-image: url(/img/ajax-loading-invert.gif);
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ margin-left: -10px;
+ margin-top: -10px;
+}
+
+#popup pre {
+ background: transparent;
+ border: 0;
+ border-radius: 0;
+}
+
+#popup .nav {
+ padding-left: 10px;
+}
+
+#popup .nav > li > a {
+ padding: 5px 15px;
+}
+
+#popup .nav > li:hover > a {
+ border-bottom: solid 1px #fff;
+}
+
+#popup .nav-tabs > li {
+ margin-bottom: -2px;
+ margin-right: 5px;
+}
+
+#log {
+ padding: 5px;
+}
+
+#log span {
+ font-size: 12px;
+}
+
+#log > span {
+ padding: 2px;
+ display: block;
+}
\ No newline at end of file
diff --git a/web/public/fonts/fontawesome-webfont.woff b/web/public/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..628b6a5
Binary files /dev/null and b/web/public/fonts/fontawesome-webfont.woff differ
diff --git a/web/public/fonts/glyphicons-halflings-regular.eot b/web/public/fonts/glyphicons-halflings-regular.eot
new file mode 100755
index 0000000..4a4ca86
Binary files /dev/null and b/web/public/fonts/glyphicons-halflings-regular.eot differ
diff --git a/web/public/fonts/glyphicons-halflings-regular.svg b/web/public/fonts/glyphicons-halflings-regular.svg
new file mode 100755
index 0000000..25691af
--- /dev/null
+++ b/web/public/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/public/fonts/glyphicons-halflings-regular.ttf b/web/public/fonts/glyphicons-halflings-regular.ttf
new file mode 100755
index 0000000..67fa00b
Binary files /dev/null and b/web/public/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/web/public/fonts/glyphicons-halflings-regular.woff b/web/public/fonts/glyphicons-halflings-regular.woff
new file mode 100755
index 0000000..8c54182
Binary files /dev/null and b/web/public/fonts/glyphicons-halflings-regular.woff differ
diff --git a/web/public/img/ajax-loading-invert.gif b/web/public/img/ajax-loading-invert.gif
new file mode 100644
index 0000000..09d621e
Binary files /dev/null and b/web/public/img/ajax-loading-invert.gif differ
diff --git a/web/public/img/ajax-loading.gif b/web/public/img/ajax-loading.gif
new file mode 100644
index 0000000..27d0aa8
Binary files /dev/null and b/web/public/img/ajax-loading.gif differ
diff --git a/web/public/img/favicon.ico b/web/public/img/favicon.ico
new file mode 100644
index 0000000..edf96c9
Binary files /dev/null and b/web/public/img/favicon.ico differ
diff --git a/web/public/img/info.png b/web/public/img/info.png
new file mode 100644
index 0000000..9d70cc3
Binary files /dev/null and b/web/public/img/info.png differ
diff --git a/web/public/js/bootstrap.min.js b/web/public/js/bootstrap.min.js
new file mode 100755
index 0000000..ac11e59
--- /dev/null
+++ b/web/public/js/bootstrap.min.js
@@ -0,0 +1,765 @@
+/*!
+ * Bootstrap v3.3.0 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*!
+ * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=96424a68f1fcf5ec132f)
+ * Config saved to config.json and https://gist.github.com/96424a68f1fcf5ec132f
+ */
+if ("undefined" == typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");
++function(t){
+ var e = t.fn.jquery.split(" ")[0].split(".");
+ if (e[0] < 2 && e[1] < 9 || 1 == e[0] && 9 == e[1] && e[2] < 1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")
+}(jQuery), +function(t){
+ "use strict";
+ function e(e){
+ return this.each(function(){
+ var i = t(this), s = i.data("bs.alert");
+ s || i.data("bs.alert", s = new o(this)), "string" == typeof e && s[e].call(i)
+ })
+ }
+
+ var i = '[data-dismiss="alert"]', o = function(e){
+ t(e).on("click", i, this.close)
+ };
+ o.VERSION = "3.3.0", o.TRANSITION_DURATION = 150, o.prototype.close = function(e){
+ function i(){
+ r.detach().trigger("closed.bs.alert").remove()
+ }
+
+ var s = t(this), n = s.attr("data-target");
+ n || (n = s.attr("href"), n = n && n.replace(/.*(?=#[^\s]*$)/, ""));
+ var r = t(n);
+ e && e.preventDefault(), r.length || (r = s.closest(".alert")), r.trigger(e = t.Event("close.bs.alert")), e.isDefaultPrevented() || (r.removeClass("in"), t.support.transition && r.hasClass("fade") ? r.one("bsTransitionEnd", i).emulateTransitionEnd(o.TRANSITION_DURATION) : i())
+ };
+ var s = t.fn.alert;
+ t.fn.alert = e, t.fn.alert.Constructor = o, t.fn.alert.noConflict = function(){
+ return t.fn.alert = s, this
+ }, t(document).on("click.bs.alert.data-api", i, o.prototype.close)
+}(jQuery), +function(t){
+ "use strict";
+ function e(e){
+ return this.each(function(){
+ var o = t(this), s = o.data("bs.button"), n = "object" == typeof e && e;
+ s || o.data("bs.button", s = new i(this, n)), "toggle" == e ? s.toggle() : e && s.setState(e)
+ })
+ }
+
+ var i = function(e, o){
+ this.$element = t(e), this.options = t.extend({}, i.DEFAULTS, o), this.isLoading = !1
+ };
+ i.VERSION = "3.3.0", i.DEFAULTS = {loadingText: "loading..."}, i.prototype.setState = function(e){
+ var i = "disabled", o = this.$element, s = o.is("input") ? "val" : "html", n = o.data();
+ e += "Text", null == n.resetText && o.data("resetText", o[s]()), setTimeout(t.proxy(function(){
+ o[s](null == n[e] ? this.options[e] : n[e]), "loadingText" == e ? (this.isLoading = !0, o.addClass(i).attr(i, i)) : this.isLoading && (this.isLoading = !1, o.removeClass(i).removeAttr(i))
+ }, this), 0)
+ }, i.prototype.toggle = function(){
+ var t = !0, e = this.$element.closest('[data-toggle="buttons"]');
+ if (e.length) {
+ var i = this.$element.find("input");
+ "radio" == i.prop("type") && (i.prop("checked") && this.$element.hasClass("active") ? t = !1 : e.find(".active").removeClass("active")), t && i.prop("checked", !this.$element.hasClass("active")).trigger("change")
+ } else this.$element.attr("aria-pressed", !this.$element.hasClass("active"));
+ t && this.$element.toggleClass("active")
+ };
+ var o = t.fn.button;
+ t.fn.button = e, t.fn.button.Constructor = i, t.fn.button.noConflict = function(){
+ return t.fn.button = o, this
+ }, t(document).on("click.bs.button.data-api", '[data-toggle^="button"]', function(i){
+ var o = t(i.target);
+ o.hasClass("btn") || (o = o.closest(".btn")), e.call(o, "toggle"), i.preventDefault()
+ }).on("focus.bs.button.data-api blur.bs.button.data-api", '[data-toggle^="button"]', function(e){
+ t(e.target).closest(".btn").toggleClass("focus", "focus" == e.type)
+ })
+}(jQuery), +function(t){
+ "use strict";
+ function e(e){
+ return this.each(function(){
+ var o = t(this), s = o.data("bs.carousel"), n = t.extend({}, i.DEFAULTS, o.data(), "object" == typeof e && e), r = "string" == typeof e ? e : n.slide;
+ s || o.data("bs.carousel", s = new i(this, n)), "number" == typeof e ? s.to(e) : r ? s[r]() : n.interval && s.pause().cycle()
+ })
+ }
+
+ var i = function(e, i){
+ this.$element = t(e), this.$indicators = this.$element.find(".carousel-indicators"), this.options = i, this.paused = this.sliding = this.interval = this.$active = this.$items = null, this.options.keyboard && this.$element.on("keydown.bs.carousel", t.proxy(this.keydown, this)), "hover" == this.options.pause && !("ontouchstart"in document.documentElement) && this.$element.on("mouseenter.bs.carousel", t.proxy(this.pause, this)).on("mouseleave.bs.carousel", t.proxy(this.cycle, this))
+ };
+ i.VERSION = "3.3.0", i.TRANSITION_DURATION = 600, i.DEFAULTS = {
+ interval: 5e3,
+ pause : "hover",
+ wrap : !0,
+ keyboard: !0
+ }, i.prototype.keydown = function(t){
+ switch (t.which) {
+ case 37:
+ this.prev();
+ break;
+ case 39:
+ this.next();
+ break;
+ default:
+ return
+ }
+ t.preventDefault()
+ }, i.prototype.cycle = function(e){
+ return e || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(t.proxy(this.next, this), this.options.interval)), this
+ }, i.prototype.getItemIndex = function(t){
+ return this.$items = t.parent().children(".item"), this.$items.index(t || this.$active)
+ }, i.prototype.getItemForDirection = function(t, e){
+ var i = "prev" == t ? -1 : 1, o = this.getItemIndex(e), s = (o + i) % this.$items.length;
+ return this.$items.eq(s)
+ }, i.prototype.to = function(t){
+ var e = this, i = this.getItemIndex(this.$active = this.$element.find(".item.active"));
+ return t > this.$items.length - 1 || 0 > t ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", function(){
+ e.to(t)
+ }) : i == t ? this.pause().cycle() : this.slide(t > i ? "next" : "prev", this.$items.eq(t))
+ }, i.prototype.pause = function(e){
+ return e || (this.paused = !0), this.$element.find(".next, .prev").length && t.support.transition && (this.$element.trigger(t.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
+ }, i.prototype.next = function(){
+ return this.sliding ? void 0 : this.slide("next")
+ }, i.prototype.prev = function(){
+ return this.sliding ? void 0 : this.slide("prev")
+ }, i.prototype.slide = function(e, o){
+ var s = this.$element.find(".item.active"), n = o || this.getItemForDirection(e, s), r = this.interval, a = "next" == e ? "left" : "right", l = "next" == e ? "first" : "last", h = this;
+ if (!n.length) {
+ if (!this.options.wrap)return;
+ n = this.$element.find(".item")[l]()
+ }
+ if (n.hasClass("active"))return this.sliding = !1;
+ var d = n[0], p = t.Event("slide.bs.carousel", {relatedTarget: d, direction: a});
+ if (this.$element.trigger(p), !p.isDefaultPrevented()) {
+ if (this.sliding = !0, r && this.pause(), this.$indicators.length) {
+ this.$indicators.find(".active").removeClass("active");
+ var c = t(this.$indicators.children()[this.getItemIndex(n)]);
+ c && c.addClass("active")
+ }
+ var f = t.Event("slid.bs.carousel", {relatedTarget: d, direction: a});
+ return t.support.transition && this.$element.hasClass("slide") ? (n.addClass(e), n[0].offsetWidth, s.addClass(a), n.addClass(a), s.one("bsTransitionEnd", function(){
+ n.removeClass([e, a].join(" ")).addClass("active"), s.removeClass(["active", a].join(" ")), h.sliding = !1, setTimeout(function(){
+ h.$element.trigger(f)
+ }, 0)
+ }).emulateTransitionEnd(i.TRANSITION_DURATION)) : (s.removeClass("active"), n.addClass("active"), this.sliding = !1, this.$element.trigger(f)), r && this.cycle(), this
+ }
+ };
+ var o = t.fn.carousel;
+ t.fn.carousel = e, t.fn.carousel.Constructor = i, t.fn.carousel.noConflict = function(){
+ return t.fn.carousel = o, this
+ };
+ var s = function(i){
+ var o, s = t(this), n = t(s.attr("data-target") || (o = s.attr("href")) && o.replace(/.*(?=#[^\s]+$)/, ""));
+ if (n.hasClass("carousel")) {
+ var r = t.extend({}, n.data(), s.data()), a = s.attr("data-slide-to");
+ a && (r.interval = !1), e.call(n, r), a && n.data("bs.carousel").to(a), i.preventDefault()
+ }
+ };
+ t(document).on("click.bs.carousel.data-api", "[data-slide]", s).on("click.bs.carousel.data-api", "[data-slide-to]", s), t(window).on("load", function(){
+ t('[data-ride="carousel"]').each(function(){
+ var i = t(this);
+ e.call(i, i.data())
+ })
+ })
+}(jQuery), +function(t){
+ "use strict";
+ function e(e){
+ e && 3 === e.which || (t(s).remove(), t(n).each(function(){
+ var o = t(this), s = i(o), n = {relatedTarget: this};
+ s.hasClass("open") && (s.trigger(e = t.Event("hide.bs.dropdown", n)), e.isDefaultPrevented() || (o.attr("aria-expanded", "false"), s.removeClass("open").trigger("hidden.bs.dropdown", n)))
+ }))
+ }
+
+ function i(e){
+ var i = e.attr("data-target");
+ i || (i = e.attr("href"), i = i && /#[A-Za-z]/.test(i) && i.replace(/.*(?=#[^\s]*$)/, ""));
+ var o = i && t(i);
+ return o && o.length ? o : e.parent()
+ }
+
+ function o(e){
+ return this.each(function(){
+ var i = t(this), o = i.data("bs.dropdown");
+ o || i.data("bs.dropdown", o = new r(this)), "string" == typeof e && o[e].call(i)
+ })
+ }
+
+ var s = ".dropdown-backdrop", n = '[data-toggle="dropdown"]', r = function(e){
+ t(e).on("click.bs.dropdown", this.toggle)
+ };
+ r.VERSION = "3.3.0", r.prototype.toggle = function(o){
+ var s = t(this);
+ if (!s.is(".disabled, :disabled")) {
+ var n = i(s), r = n.hasClass("open");
+ if (e(), !r) {
+ "ontouchstart"in document.documentElement && !n.closest(".navbar-nav").length && t('
').insertAfter(t(this)).on("click", e);
+ var a = {relatedTarget: this};
+ if (n.trigger(o = t.Event("show.bs.dropdown", a)), o.isDefaultPrevented())return;
+ s.trigger("focus").attr("aria-expanded", "true"), n.toggleClass("open").trigger("shown.bs.dropdown", a)
+ }
+ return !1
+ }
+ }, r.prototype.keydown = function(e){
+ if (/(38|40|27|32)/.test(e.which)) {
+ var o = t(this);
+ if (e.preventDefault(), e.stopPropagation(), !o.is(".disabled, :disabled")) {
+ var s = i(o), r = s.hasClass("open");
+ if (!r && 27 != e.which || r && 27 == e.which)return 27 == e.which && s.find(n).trigger("focus"), o.trigger("click");
+ var a = " li:not(.divider):visible a", l = s.find('[role="menu"]' + a + ', [role="listbox"]' + a);
+ if (l.length) {
+ var h = l.index(e.target);
+ 38 == e.which && h > 0 && h--, 40 == e.which && h < l.length - 1 && h++, ~h || (h = 0), l.eq(h).trigger("focus")
+ }
+ }
+ }
+ };
+ var a = t.fn.dropdown;
+ t.fn.dropdown = o, t.fn.dropdown.Constructor = r, t.fn.dropdown.noConflict = function(){
+ return t.fn.dropdown = a, this
+ }, t(document).on("click.bs.dropdown.data-api", e).on("click.bs.dropdown.data-api", ".dropdown form", function(t){
+ t.stopPropagation()
+ }).on("click.bs.dropdown.data-api", n, r.prototype.toggle).on("keydown.bs.dropdown.data-api", n, r.prototype.keydown).on("keydown.bs.dropdown.data-api", '[role="menu"]', r.prototype.keydown).on("keydown.bs.dropdown.data-api", '[role="listbox"]', r.prototype.keydown)
+}(jQuery), +function(t){
+ "use strict";
+ function e(e, o){
+ return this.each(function(){
+ var s = t(this), n = s.data("bs.modal"), r = t.extend({}, i.DEFAULTS, s.data(), "object" == typeof e && e);
+ n || s.data("bs.modal", n = new i(this, r)), "string" == typeof e ? n[e](o) : r.show && n.show(o)
+ })
+ }
+
+ var i = function(e, i){
+ this.options = i, this.$body = t(document.body), this.$element = t(e), this.$backdrop = this.isShown = null, this.scrollbarWidth = 0, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, t.proxy(function(){
+ this.$element.trigger("loaded.bs.modal")
+ }, this))
+ };
+ i.VERSION = "3.3.0", i.TRANSITION_DURATION = 300, i.BACKDROP_TRANSITION_DURATION = 150, i.DEFAULTS = {
+ backdrop: !0,
+ keyboard: !0,
+ show : !0
+ }, i.prototype.toggle = function(t){
+ return this.isShown ? this.hide() : this.show(t)
+ }, i.prototype.show = function(e){
+ var o = this, s = t.Event("show.bs.modal", {relatedTarget: e});
+ this.$element.trigger(s), this.isShown || s.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.$body.addClass("modal-open"), this.setScrollbar(), this.escape(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', t.proxy(this.hide, this)), this.backdrop(function(){
+ var s = t.support.transition && o.$element.hasClass("fade");
+ o.$element.parent().length || o.$element.appendTo(o.$body), o.$element.show().scrollTop(0), s && o.$element[0].offsetWidth, o.$element.addClass("in").attr("aria-hidden", !1), o.enforceFocus();
+ var n = t.Event("shown.bs.modal", {relatedTarget: e});
+ s ? o.$element.find(".modal-dialog").one("bsTransitionEnd", function(){
+ o.$element.trigger("focus").trigger(n)
+ }).emulateTransitionEnd(i.TRANSITION_DURATION) : o.$element.trigger("focus").trigger(n)
+ }))
+ }, i.prototype.hide = function(e){
+ e && e.preventDefault(), e = t.Event("hide.bs.modal"), this.$element.trigger(e), this.isShown && !e.isDefaultPrevented() && (this.isShown = !1, this.escape(), t(document).off("focusin.bs.modal"), this.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.bs.modal"), t.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", t.proxy(this.hideModal, this)).emulateTransitionEnd(i.TRANSITION_DURATION) : this.hideModal())
+ }, i.prototype.enforceFocus = function(){
+ t(document).off("focusin.bs.modal").on("focusin.bs.modal", t.proxy(function(t){
+ this.$element[0] === t.target || this.$element.has(t.target).length || this.$element.trigger("focus")
+ }, this))
+ }, i.prototype.escape = function(){
+ this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", t.proxy(function(t){
+ 27 == t.which && this.hide()
+ }, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal")
+ }, i.prototype.hideModal = function(){
+ var t = this;
+ this.$element.hide(), this.backdrop(function(){
+ t.$body.removeClass("modal-open"), t.resetScrollbar(), t.$element.trigger("hidden.bs.modal")
+ })
+ }, i.prototype.removeBackdrop = function(){
+ this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
+ }, i.prototype.backdrop = function(e){
+ var o = this, s = this.$element.hasClass("fade") ? "fade" : "";
+ if (this.isShown && this.options.backdrop) {
+ var n = t.support.transition && s;
+ if (this.$backdrop = t('
').prependTo(this.$element).on("click.dismiss.bs.modal", t.proxy(function(t){
+ t.target === t.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call(this.$element[0]) : this.hide.call(this))
+ }, this)), n && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !e)return;
+ n ? this.$backdrop.one("bsTransitionEnd", e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION) : e()
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass("in");
+ var r = function(){
+ o.removeBackdrop(), e && e()
+ };
+ t.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", r).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION) : r()
+ } else e && e()
+ }, i.prototype.checkScrollbar = function(){
+ this.scrollbarWidth = this.measureScrollbar()
+ }, i.prototype.setScrollbar = function(){
+ var t = parseInt(this.$body.css("padding-right") || 0, 10);
+ this.scrollbarWidth && this.$body.css("padding-right", t + this.scrollbarWidth)
+ }, i.prototype.resetScrollbar = function(){
+ this.$body.css("padding-right", "")
+ }, i.prototype.measureScrollbar = function(){
+ if (document.body.clientWidth >= window.innerWidth)return 0;
+ var t = document.createElement("div");
+ t.className = "modal-scrollbar-measure", this.$body.append(t);
+ var e = t.offsetWidth - t.clientWidth;
+ return this.$body[0].removeChild(t), e
+ };
+ var o = t.fn.modal;
+ t.fn.modal = e, t.fn.modal.Constructor = i, t.fn.modal.noConflict = function(){
+ return t.fn.modal = o, this
+ }, t(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(i){
+ var o = t(this), s = o.attr("href"), n = t(o.attr("data-target") || s && s.replace(/.*(?=#[^\s]+$)/, "")), r = n.data("bs.modal") ? "toggle" : t.extend({remote: !/#/.test(s) && s}, n.data(), o.data());
+ o.is("a") && i.preventDefault(), n.one("show.bs.modal", function(t){
+ t.isDefaultPrevented() || n.one("hidden.bs.modal", function(){
+ o.is(":visible") && o.trigger("focus")
+ })
+ }), e.call(n, r, this)
+ })
+}(jQuery), +function(t){
+ "use strict";
+ function e(e){
+ return this.each(function(){
+ var o = t(this), s = o.data("bs.tooltip"), n = "object" == typeof e && e, r = n && n.selector;
+ (s || "destroy" != e) && (r ? (s || o.data("bs.tooltip", s = {}), s[r] || (s[r] = new i(this, n))) : s || o.data("bs.tooltip", s = new i(this, n)), "string" == typeof e && s[e]())
+ })
+ }
+
+ var i = function(t, e){
+ this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init("tooltip", t, e)
+ };
+ i.VERSION = "3.3.0", i.TRANSITION_DURATION = 150, i.DEFAULTS = {
+ animation: !0,
+ placement: "top",
+ selector : !1,
+ template : '',
+ trigger : "hover focus",
+ title : "",
+ delay : 0,
+ html : !1,
+ container: !1,
+ viewport : {selector: "body", padding: 0}
+ }, i.prototype.init = function(e, i, o){
+ this.enabled = !0, this.type = e, this.$element = t(i), this.options = this.getOptions(o), this.$viewport = this.options.viewport && t(this.options.viewport.selector || this.options.viewport);
+ for (var s = this.options.trigger.split(" "), n = s.length; n--;) {
+ var r = s[n];
+ if ("click" == r)this.$element.on("click." + this.type, this.options.selector, t.proxy(this.toggle, this)); else if ("manual" != r) {
+ var a = "hover" == r ? "mouseenter" : "focusin", l = "hover" == r ? "mouseleave" : "focusout";
+ this.$element.on(a + "." + this.type, this.options.selector, t.proxy(this.enter, this)), this.$element.on(l + "." + this.type, this.options.selector, t.proxy(this.leave, this))
+ }
+ }
+ this.options.selector ? this._options = t.extend({}, this.options, {
+ trigger : "manual",
+ selector: ""
+ }) : this.fixTitle()
+ }, i.prototype.getDefaults = function(){
+ return i.DEFAULTS
+ }, i.prototype.getOptions = function(e){
+ return e = t.extend({}, this.getDefaults(), this.$element.data(), e), e.delay && "number" == typeof e.delay && (e.delay = {
+ show: e.delay,
+ hide: e.delay
+ }), e
+ }, i.prototype.getDelegateOptions = function(){
+ var e = {}, i = this.getDefaults();
+ return this._options && t.each(this._options, function(t, o){
+ i[t] != o && (e[t] = o)
+ }), e
+ }, i.prototype.enter = function(e){
+ var i = e instanceof this.constructor ? e : t(e.currentTarget).data("bs." + this.type);
+ return i && i.$tip && i.$tip.is(":visible") ? void(i.hoverState = "in") : (i || (i = new this.constructor(e.currentTarget, this.getDelegateOptions()), t(e.currentTarget).data("bs." + this.type, i)), clearTimeout(i.timeout), i.hoverState = "in", i.options.delay && i.options.delay.show ? void(i.timeout = setTimeout(function(){
+ "in" == i.hoverState && i.show()
+ }, i.options.delay.show)) : i.show())
+ }, i.prototype.leave = function(e){
+ var i = e instanceof this.constructor ? e : t(e.currentTarget).data("bs." + this.type);
+ return i || (i = new this.constructor(e.currentTarget, this.getDelegateOptions()), t(e.currentTarget).data("bs." + this.type, i)), clearTimeout(i.timeout), i.hoverState = "out", i.options.delay && i.options.delay.hide ? void(i.timeout = setTimeout(function(){
+ "out" == i.hoverState && i.hide()
+ }, i.options.delay.hide)) : i.hide()
+ }, i.prototype.show = function(){
+ var e = t.Event("show.bs." + this.type);
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e);
+ var o = t.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);
+ if (e.isDefaultPrevented() || !o)return;
+ var s = this, n = this.tip(), r = this.getUID(this.type);
+ this.setContent(), n.attr("id", r), this.$element.attr("aria-describedby", r), this.options.animation && n.addClass("fade");
+ var a = "function" == typeof this.options.placement ? this.options.placement.call(this, n[0], this.$element[0]) : this.options.placement, l = /\s?auto?\s?/i, h = l.test(a);
+ h && (a = a.replace(l, "") || "top"), n.detach().css({
+ top : 0,
+ left : 0,
+ display: "block"
+ }).addClass(a).data("bs." + this.type, this), this.options.container ? n.appendTo(this.options.container) : n.insertAfter(this.$element);
+ var d = this.getPosition(), p = n[0].offsetWidth, c = n[0].offsetHeight;
+ if (h) {
+ var f = a, u = this.options.container ? t(this.options.container) : this.$element.parent(), g = this.getPosition(u);
+ a = "bottom" == a && d.bottom + c > g.bottom ? "top" : "top" == a && d.top - c < g.top ? "bottom" : "right" == a && d.right + p > g.width ? "left" : "left" == a && d.left - p < g.left ? "right" : a, n.removeClass(f).addClass(a)
+ }
+ var v = this.getCalculatedOffset(a, d, p, c);
+ this.applyPlacement(v, a);
+ var m = function(){
+ var t = s.hoverState;
+ s.$element.trigger("shown.bs." + s.type), s.hoverState = null, "out" == t && s.leave(s)
+ };
+ t.support.transition && this.$tip.hasClass("fade") ? n.one("bsTransitionEnd", m).emulateTransitionEnd(i.TRANSITION_DURATION) : m()
+ }
+ }, i.prototype.applyPlacement = function(e, i){
+ var o = this.tip(), s = o[0].offsetWidth, n = o[0].offsetHeight, r = parseInt(o.css("margin-top"), 10), a = parseInt(o.css("margin-left"), 10);
+ isNaN(r) && (r = 0), isNaN(a) && (a = 0), e.top = e.top + r, e.left = e.left + a, t.offset.setOffset(o[0], t.extend({
+ using: function(t){
+ o.css({top: Math.round(t.top), left: Math.round(t.left)})
+ }
+ }, e), 0), o.addClass("in");
+ var l = o[0].offsetWidth, h = o[0].offsetHeight;
+ "top" == i && h != n && (e.top = e.top + n - h);
+ var d = this.getViewportAdjustedDelta(i, e, l, h);
+ d.left ? e.left += d.left : e.top += d.top;
+ var p = /top|bottom/.test(i), c = p ? 2 * d.left - s + l : 2 * d.top - n + h, f = p ? "offsetWidth" : "offsetHeight";
+ o.offset(e), this.replaceArrow(c, o[0][f], p)
+ }, i.prototype.replaceArrow = function(t, e, i){
+ this.arrow().css(i ? "left" : "top", 50 * (1 - t / e) + "%").css(i ? "top" : "left", "")
+ }, i.prototype.setContent = function(){
+ var t = this.tip(), e = this.getTitle();
+ t.find(".tooltip-inner")[this.options.html ? "html" : "text"](e), t.removeClass("fade in top bottom left right")
+ }, i.prototype.hide = function(e){
+ function o(){
+ "in" != s.hoverState && n.detach(), s.$element.removeAttr("aria-describedby").trigger("hidden.bs." + s.type), e && e()
+ }
+
+ var s = this, n = this.tip(), r = t.Event("hide.bs." + this.type);
+ return this.$element.trigger(r), r.isDefaultPrevented() ? void 0 : (n.removeClass("in"), t.support.transition && this.$tip.hasClass("fade") ? n.one("bsTransitionEnd", o).emulateTransitionEnd(i.TRANSITION_DURATION) : o(), this.hoverState = null, this)
+ }, i.prototype.fixTitle = function(){
+ var t = this.$element;
+ (t.attr("title") || "string" != typeof t.attr("data-original-title")) && t.attr("data-original-title", t.attr("title") || "").attr("title", "")
+ }, i.prototype.hasContent = function(){
+ return this.getTitle()
+ }, i.prototype.getPosition = function(e){
+ e = e || this.$element;
+ var i = e[0], o = "BODY" == i.tagName, s = i.getBoundingClientRect();
+ null == s.width && (s = t.extend({}, s, {width: s.right - s.left, height: s.bottom - s.top}));
+ var n = o ? {
+ top : 0,
+ left: 0
+ } : e.offset(), r = {scroll: o ? document.documentElement.scrollTop || document.body.scrollTop : e.scrollTop()}, a = o ? {
+ width : t(window).width(),
+ height: t(window).height()
+ } : null;
+ return t.extend({}, s, r, a, n)
+ }, i.prototype.getCalculatedOffset = function(t, e, i, o){
+ return "bottom" == t ? {top: e.top + e.height, left: e.left + e.width / 2 - i / 2} : "top" == t ? {
+ top : e.top - o,
+ left: e.left + e.width / 2 - i / 2
+ } : "left" == t ? {top: e.top + e.height / 2 - o / 2, left: e.left - i} : {
+ top : e.top + e.height / 2 - o / 2,
+ left: e.left + e.width
+ }
+ }, i.prototype.getViewportAdjustedDelta = function(t, e, i, o){
+ var s = {top: 0, left: 0};
+ if (!this.$viewport)return s;
+ var n = this.options.viewport && this.options.viewport.padding || 0, r = this.getPosition(this.$viewport);
+ if (/right|left/.test(t)) {
+ var a = e.top - n - r.scroll, l = e.top + n - r.scroll + o;
+ a < r.top ? s.top = r.top - a : l > r.top + r.height && (s.top = r.top + r.height - l)
+ } else {
+ var h = e.left - n, d = e.left + n + i;
+ h < r.left ? s.left = r.left - h : d > r.width && (s.left = r.left + r.width - d)
+ }
+ return s
+ }, i.prototype.getTitle = function(){
+ var t, e = this.$element, i = this.options;
+ return t = e.attr("data-original-title") || ("function" == typeof i.title ? i.title.call(e[0]) : i.title)
+ }, i.prototype.getUID = function(t){
+ do t += ~~(1e6 * Math.random()); while (document.getElementById(t));
+ return t
+ }, i.prototype.tip = function(){
+ return this.$tip = this.$tip || t(this.options.template)
+ }, i.prototype.arrow = function(){
+ return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
+ }, i.prototype.enable = function(){
+ this.enabled = !0
+ }, i.prototype.disable = function(){
+ this.enabled = !1
+ }, i.prototype.toggleEnabled = function(){
+ this.enabled = !this.enabled
+ }, i.prototype.toggle = function(e){
+ var i = this;
+ e && (i = t(e.currentTarget).data("bs." + this.type), i || (i = new this.constructor(e.currentTarget, this.getDelegateOptions()), t(e.currentTarget).data("bs." + this.type, i))), i.tip().hasClass("in") ? i.leave(i) : i.enter(i)
+ }, i.prototype.destroy = function(){
+ var t = this;
+ clearTimeout(this.timeout), this.hide(function(){
+ t.$element.off("." + t.type).removeData("bs." + t.type)
+ })
+ };
+ var o = t.fn.tooltip;
+ t.fn.tooltip = e, t.fn.tooltip.Constructor = i, t.fn.tooltip.noConflict = function(){
+ return t.fn.tooltip = o, this
+ }
+}(jQuery), +function(t){
+ "use strict";
+ function e(e){
+ return this.each(function(){
+ var o = t(this), s = o.data("bs.popover"), n = "object" == typeof e && e, r = n && n.selector;
+ (s || "destroy" != e) && (r ? (s || o.data("bs.popover", s = {}), s[r] || (s[r] = new i(this, n))) : s || o.data("bs.popover", s = new i(this, n)), "string" == typeof e && s[e]())
+ })
+ }
+
+ var i = function(t, e){
+ this.init("popover", t, e)
+ };
+ if (!t.fn.tooltip)throw new Error("Popover requires tooltip.js");
+ i.VERSION = "3.3.0", i.DEFAULTS = t.extend({}, t.fn.tooltip.Constructor.DEFAULTS, {
+ placement: "right",
+ trigger : "click",
+ content : "",
+ template : ''
+ }), i.prototype = t.extend({}, t.fn.tooltip.Constructor.prototype), i.prototype.constructor = i, i.prototype.getDefaults = function(){
+ return i.DEFAULTS
+ }, i.prototype.setContent = function(){
+ var t = this.tip(), e = this.getTitle(), i = this.getContent();
+ t.find(".popover-title")[this.options.html ? "html" : "text"](e), t.find(".popover-content").children().detach().end()[this.options.html ? "string" == typeof i ? "html" : "append" : "text"](i), t.removeClass("fade top bottom left right in"), t.find(".popover-title").html() || t.find(".popover-title").hide()
+ }, i.prototype.hasContent = function(){
+ return this.getTitle() || this.getContent()
+ }, i.prototype.getContent = function(){
+ var t = this.$element, e = this.options;
+ return t.attr("data-content") || ("function" == typeof e.content ? e.content.call(t[0]) : e.content)
+ }, i.prototype.arrow = function(){
+ return this.$arrow = this.$arrow || this.tip().find(".arrow")
+ }, i.prototype.tip = function(){
+ return this.$tip || (this.$tip = t(this.options.template)), this.$tip
+ };
+ var o = t.fn.popover;
+ t.fn.popover = e, t.fn.popover.Constructor = i, t.fn.popover.noConflict = function(){
+ return t.fn.popover = o, this
+ }
+}(jQuery), +function(t){
+ "use strict";
+ function e(e){
+ return this.each(function(){
+ var o = t(this), s = o.data("bs.tab");
+ s || o.data("bs.tab", s = new i(this)), "string" == typeof e && s[e]()
+ })
+ }
+
+ var i = function(e){
+ this.element = t(e)
+ };
+ i.VERSION = "3.3.0", i.TRANSITION_DURATION = 150, i.prototype.show = function(){
+ var e = this.element, i = e.closest("ul:not(.dropdown-menu)"), o = e.data("target");
+ if (o || (o = e.attr("href"), o = o && o.replace(/.*(?=#[^\s]*$)/, "")), !e.parent("li").hasClass("active")) {
+ var s = i.find(".active:last a"), n = t.Event("hide.bs.tab", {relatedTarget: e[0]}), r = t.Event("show.bs.tab", {relatedTarget: s[0]});
+ if (s.trigger(n), e.trigger(r), !r.isDefaultPrevented() && !n.isDefaultPrevented()) {
+ var a = t(o);
+ this.activate(e.closest("li"), i), this.activate(a, a.parent(), function(){
+ s.trigger({type: "hidden.bs.tab", relatedTarget: e[0]}), e.trigger({
+ type : "shown.bs.tab",
+ relatedTarget: s[0]
+ })
+ })
+ }
+ }
+ }, i.prototype.activate = function(e, o, s){
+ function n(){
+ r.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !1), e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded", !0), a ? (e[0].offsetWidth, e.addClass("in")) : e.removeClass("fade"), e.parent(".dropdown-menu") && e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !0), s && s()
+ }
+
+ var r = o.find("> .active"), a = s && t.support.transition && (r.length && r.hasClass("fade") || !!o.find("> .fade").length);
+ r.length && a ? r.one("bsTransitionEnd", n).emulateTransitionEnd(i.TRANSITION_DURATION) : n(), r.removeClass("in")
+ };
+ var o = t.fn.tab;
+ t.fn.tab = e, t.fn.tab.Constructor = i, t.fn.tab.noConflict = function(){
+ return t.fn.tab = o, this
+ };
+ var s = function(i){
+ i.preventDefault(), e.call(t(this), "show")
+ };
+ t(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', s).on("click.bs.tab.data-api", '[data-toggle="pill"]', s)
+}(jQuery), +function(t){
+ "use strict";
+ function e(e){
+ return this.each(function(){
+ var o = t(this), s = o.data("bs.affix"), n = "object" == typeof e && e;
+ s || o.data("bs.affix", s = new i(this, n)), "string" == typeof e && s[e]()
+ })
+ }
+
+ var i = function(e, o){
+ this.options = t.extend({}, i.DEFAULTS, o), this.$target = t(this.options.target).on("scroll.bs.affix.data-api", t.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", t.proxy(this.checkPositionWithEventLoop, this)), this.$element = t(e), this.affixed = this.unpin = this.pinnedOffset = null, this.checkPosition()
+ };
+ i.VERSION = "3.3.0", i.RESET = "affix affix-top affix-bottom", i.DEFAULTS = {
+ offset: 0,
+ target: window
+ }, i.prototype.getState = function(t, e, i, o){
+ var s = this.$target.scrollTop(), n = this.$element.offset(), r = this.$target.height();
+ if (null != i && "top" == this.affixed)return i > s ? "top" : !1;
+ if ("bottom" == this.affixed)return null != i ? s + this.unpin <= n.top ? !1 : "bottom" : t - o >= s + r ? !1 : "bottom";
+ var a = null == this.affixed, l = a ? s : n.top, h = a ? r : e;
+ return null != i && i >= l ? "top" : null != o && l + h >= t - o ? "bottom" : !1
+ }, i.prototype.getPinnedOffset = function(){
+ if (this.pinnedOffset)return this.pinnedOffset;
+ this.$element.removeClass(i.RESET).addClass("affix");
+ var t = this.$target.scrollTop(), e = this.$element.offset();
+ return this.pinnedOffset = e.top - t
+ }, i.prototype.checkPositionWithEventLoop = function(){
+ setTimeout(t.proxy(this.checkPosition, this), 1)
+ }, i.prototype.checkPosition = function(){
+ if (this.$element.is(":visible")) {
+ var e = this.$element.height(), o = this.options.offset, s = o.top, n = o.bottom, r = t("body").height();
+ "object" != typeof o && (n = s = o), "function" == typeof s && (s = o.top(this.$element)), "function" == typeof n && (n = o.bottom(this.$element));
+ var a = this.getState(r, e, s, n);
+ if (this.affixed != a) {
+ null != this.unpin && this.$element.css("top", "");
+ var l = "affix" + (a ? "-" + a : ""), h = t.Event(l + ".bs.affix");
+ if (this.$element.trigger(h), h.isDefaultPrevented())return;
+ this.affixed = a, this.unpin = "bottom" == a ? this.getPinnedOffset() : null, this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix", "affixed") + ".bs.affix")
+ }
+ "bottom" == a && this.$element.offset({top: r - e - n})
+ }
+ };
+ var o = t.fn.affix;
+ t.fn.affix = e, t.fn.affix.Constructor = i, t.fn.affix.noConflict = function(){
+ return t.fn.affix = o, this
+ }, t(window).on("load", function(){
+ t('[data-spy="affix"]').each(function(){
+ var i = t(this), o = i.data();
+ o.offset = o.offset || {}, null != o.offsetBottom && (o.offset.bottom = o.offsetBottom), null != o.offsetTop && (o.offset.top = o.offsetTop), e.call(i, o)
+ })
+ })
+}(jQuery), +function(t){
+ "use strict";
+ function e(e){
+ var i, o = e.attr("data-target") || (i = e.attr("href")) && i.replace(/.*(?=#[^\s]+$)/, "");
+ return t(o)
+ }
+
+ function i(e){
+ return this.each(function(){
+ var i = t(this), s = i.data("bs.collapse"), n = t.extend({}, o.DEFAULTS, i.data(), "object" == typeof e && e);
+ !s && n.toggle && "show" == e && (n.toggle = !1), s || i.data("bs.collapse", s = new o(this, n)), "string" == typeof e && s[e]()
+ })
+ }
+
+ var o = function(e, i){
+ this.$element = t(e), this.options = t.extend({}, o.DEFAULTS, i), this.$trigger = t(this.options.trigger).filter('[href="#' + e.id + '"], [data-target="#' + e.id + '"]'), this.transitioning = null, this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger), this.options.toggle && this.toggle()
+ };
+ o.VERSION = "3.3.0", o.TRANSITION_DURATION = 350, o.DEFAULTS = {
+ toggle : !0,
+ trigger: '[data-toggle="collapse"]'
+ }, o.prototype.dimension = function(){
+ var t = this.$element.hasClass("width");
+ return t ? "width" : "height"
+ }, o.prototype.show = function(){
+ if (!this.transitioning && !this.$element.hasClass("in")) {
+ var e, s = this.$parent && this.$parent.find("> .panel").children(".in, .collapsing");
+ if (!(s && s.length && (e = s.data("bs.collapse"), e && e.transitioning))) {
+ var n = t.Event("show.bs.collapse");
+ if (this.$element.trigger(n), !n.isDefaultPrevented()) {
+ s && s.length && (i.call(s, "hide"), e || s.data("bs.collapse", null));
+ var r = this.dimension();
+ this.$element.removeClass("collapse").addClass("collapsing")[r](0).attr("aria-expanded", !0), this.$trigger.removeClass("collapsed").attr("aria-expanded", !0), this.transitioning = 1;
+ var a = function(){
+ this.$element.removeClass("collapsing").addClass("collapse in")[r](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
+ };
+ if (!t.support.transition)return a.call(this);
+ var l = t.camelCase(["scroll", r].join("-"));
+ this.$element.one("bsTransitionEnd", t.proxy(a, this)).emulateTransitionEnd(o.TRANSITION_DURATION)[r](this.$element[0][l])
+ }
+ }
+ }
+ }, o.prototype.hide = function(){
+ if (!this.transitioning && this.$element.hasClass("in")) {
+ var e = t.Event("hide.bs.collapse");
+ if (this.$element.trigger(e), !e.isDefaultPrevented()) {
+ var i = this.dimension();
+ this.$element[i](this.$element[i]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded", !1), this.$trigger.addClass("collapsed").attr("aria-expanded", !1), this.transitioning = 1;
+ var s = function(){
+ this.transitioning = 0, this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")
+ };
+ return t.support.transition ? void this.$element[i](0).one("bsTransitionEnd", t.proxy(s, this)).emulateTransitionEnd(o.TRANSITION_DURATION) : s.call(this)
+ }
+ }
+ }, o.prototype.toggle = function(){
+ this[this.$element.hasClass("in") ? "hide" : "show"]()
+ }, o.prototype.getParent = function(){
+ return t(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(t.proxy(function(i, o){
+ var s = t(o);
+ this.addAriaAndCollapsedClass(e(s), s)
+ }, this)).end()
+ }, o.prototype.addAriaAndCollapsedClass = function(t, e){
+ var i = t.hasClass("in");
+ t.attr("aria-expanded", i), e.toggleClass("collapsed", !i).attr("aria-expanded", i)
+ };
+ var s = t.fn.collapse;
+ t.fn.collapse = i, t.fn.collapse.Constructor = o, t.fn.collapse.noConflict = function(){
+ return t.fn.collapse = s, this
+ }, t(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function(o){
+ var s = t(this);
+ s.attr("data-target") || o.preventDefault();
+ var n = e(s), r = n.data("bs.collapse"), a = r ? "toggle" : t.extend({}, s.data(), {trigger: this});
+ i.call(n, a)
+ })
+}(jQuery), +function(t){
+ "use strict";
+ function e(i, o){
+ var s = t.proxy(this.process, this);
+ this.$body = t("body"), this.$scrollElement = t(t(i).is("body") ? window : i), this.options = t.extend({}, e.DEFAULTS, o), this.selector = (this.options.target || "") + " .nav li > a", this.offsets = [], this.targets = [], this.activeTarget = null, this.scrollHeight = 0, this.$scrollElement.on("scroll.bs.scrollspy", s), this.refresh(), this.process()
+ }
+
+ function i(i){
+ return this.each(function(){
+ var o = t(this), s = o.data("bs.scrollspy"), n = "object" == typeof i && i;
+ s || o.data("bs.scrollspy", s = new e(this, n)), "string" == typeof i && s[i]()
+ })
+ }
+
+ e.VERSION = "3.3.0", e.DEFAULTS = {offset: 10}, e.prototype.getScrollHeight = function(){
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }, e.prototype.refresh = function(){
+ var e = "offset", i = 0;
+ t.isWindow(this.$scrollElement[0]) || (e = "position", i = this.$scrollElement.scrollTop()), this.offsets = [], this.targets = [], this.scrollHeight = this.getScrollHeight();
+ var o = this;
+ this.$body.find(this.selector).map(function(){
+ var o = t(this), s = o.data("target") || o.attr("href"), n = /^#./.test(s) && t(s);
+ return n && n.length && n.is(":visible") && [[n[e]().top + i, s]] || null
+ }).sort(function(t, e){
+ return t[0] - e[0]
+ }).each(function(){
+ o.offsets.push(this[0]), o.targets.push(this[1])
+ })
+ }, e.prototype.process = function(){
+ var t, e = this.$scrollElement.scrollTop() + this.options.offset, i = this.getScrollHeight(), o = this.options.offset + i - this.$scrollElement.height(), s = this.offsets, n = this.targets, r = this.activeTarget;
+ if (this.scrollHeight != i && this.refresh(), e >= o)return r != (t = n[n.length - 1]) && this.activate(t);
+ if (r && e < s[0])return this.activeTarget = null, this.clear();
+ for (t = s.length; t--;)r != n[t] && e >= s[t] && (!s[t + 1] || e <= s[t + 1]) && this.activate(n[t])
+ }, e.prototype.activate = function(e){
+ this.activeTarget = e, this.clear();
+ var i = this.selector + '[data-target="' + e + '"],' + this.selector + '[href="' + e + '"]', o = t(i).parents("li").addClass("active");
+ o.parent(".dropdown-menu").length && (o = o.closest("li.dropdown").addClass("active")), o.trigger("activate.bs.scrollspy")
+ }, e.prototype.clear = function(){
+ t(this.selector).parentsUntil(this.options.target, ".active").removeClass("active")
+ };
+ var o = t.fn.scrollspy;
+ t.fn.scrollspy = i, t.fn.scrollspy.Constructor = e, t.fn.scrollspy.noConflict = function(){
+ return t.fn.scrollspy = o, this
+ }, t(window).on("load.bs.scrollspy.data-api", function(){
+ t('[data-spy="scroll"]').each(function(){
+ var e = t(this);
+ i.call(e, e.data())
+ })
+ })
+}(jQuery), +function(t){
+ "use strict";
+ function e(){
+ var t = document.createElement("bootstrap"), e = {
+ WebkitTransition: "webkitTransitionEnd",
+ MozTransition : "transitionend",
+ OTransition : "oTransitionEnd otransitionend",
+ transition : "transitionend"
+ };
+ for (var i in e)if (void 0 !== t.style[i])return {end: e[i]};
+ return !1
+ }
+
+ t.fn.emulateTransitionEnd = function(e){
+ var i = !1, o = this;
+ t(this).one("bsTransitionEnd", function(){
+ i = !0
+ });
+ var s = function(){
+ i || t(o).trigger(t.support.transition.end)
+ };
+ return setTimeout(s, e), this
+ }, t(function(){
+ t.support.transition = e(), t.support.transition && (t.event.special.bsTransitionEnd = {
+ bindType : t.support.transition.end,
+ delegateType: t.support.transition.end,
+ handle : function(e){
+ return t(e.target).is(this) ? e.handleObj.handler.apply(this, arguments) : void 0
+ }
+ })
+ })
+}(jQuery);
\ No newline at end of file
diff --git a/web/public/js/d3.min.js b/web/public/js/d3.min.js
new file mode 100644
index 0000000..1a29775
--- /dev/null
+++ b/web/public/js/d3.min.js
@@ -0,0 +1,6135 @@
+!function(){
+ function n(n, t){
+ return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0
+ }
+
+ function t(n){
+ return null === n ? 0 / 0 : +n
+ }
+
+ function e(n){
+ return !isNaN(n)
+ }
+
+ function r(n){
+ return {
+ left : function(t, e, r, u){
+ for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {
+ var i = r + u >>> 1;
+ n(t[i], e) < 0 ? r = i + 1 : u = i
+ }
+ return r
+ }, right: function(t, e, r, u){
+ for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {
+ var i = r + u >>> 1;
+ n(t[i], e) > 0 ? u = i : r = i + 1
+ }
+ return r
+ }
+ }
+ }
+
+ function u(n){
+ return n.length
+ }
+
+ function i(n){
+ for (var t = 1; n * t % 1;)t *= 10;
+ return t
+ }
+
+ function o(n, t){
+ for (var e in t)Object.defineProperty(n.prototype, e, {value: t[e], enumerable: !1})
+ }
+
+ function a(){
+ this._ = Object.create(null)
+ }
+
+ function c(n){
+ return (n += "") === la || n[0] === sa ? sa + n : n
+ }
+
+ function l(n){
+ return (n += "")[0] === sa ? n.slice(1) : n
+ }
+
+ function s(n){
+ return c(n)in this._
+ }
+
+ function f(n){
+ return (n = c(n))in this._ && delete this._[n]
+ }
+
+ function h(){
+ var n = [];
+ for (var t in this._)n.push(l(t));
+ return n
+ }
+
+ function g(){
+ var n = 0;
+ for (var t in this._)++n;
+ return n
+ }
+
+ function p(){
+ for (var n in this._)return !1;
+ return !0
+ }
+
+ function v(){
+ this._ = Object.create(null)
+ }
+
+ function d(n, t, e){
+ return function(){
+ var r = e.apply(t, arguments);
+ return r === t ? n : r
+ }
+ }
+
+ function m(n, t){
+ if (t in n)return t;
+ t = t.charAt(0).toUpperCase() + t.slice(1);
+ for (var e = 0, r = fa.length; r > e; ++e) {
+ var u = fa[e] + t;
+ if (u in n)return u
+ }
+ }
+
+ function y(){
+ }
+
+ function x(){
+ }
+
+ function M(n){
+ function t(){
+ for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);
+ return n
+ }
+
+ var e = [], r = new a;
+ return t.on = function(t, u){
+ var i, o = r.get(t);
+ return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {on: u})), n)
+ }, t
+ }
+
+ function _(){
+ Bo.event.preventDefault()
+ }
+
+ function b(){
+ for (var n, t = Bo.event; n = t.sourceEvent;)t = n;
+ return t
+ }
+
+ function w(n){
+ for (var t = new x, e = 0, r = arguments.length; ++e < r;)t[arguments[e]] = M(t);
+ return t.of = function(e, r){
+ return function(u){
+ try {
+ var i = u.sourceEvent = Bo.event;
+ u.target = n, Bo.event = u, t[u.type].apply(e, r)
+ } finally {
+ Bo.event = i
+ }
+ }
+ }, t
+ }
+
+ function S(n){
+ return ga(n, ya), n
+ }
+
+ function k(n){
+ return "function" == typeof n ? n : function(){
+ return pa(n, this)
+ }
+ }
+
+ function E(n){
+ return "function" == typeof n ? n : function(){
+ return va(n, this)
+ }
+ }
+
+ function A(n, t){
+ function e(){
+ this.removeAttribute(n)
+ }
+
+ function r(){
+ this.removeAttributeNS(n.space, n.local)
+ }
+
+ function u(){
+ this.setAttribute(n, t)
+ }
+
+ function i(){
+ this.setAttributeNS(n.space, n.local, t)
+ }
+
+ function o(){
+ var e = t.apply(this, arguments);
+ null == e ? this.removeAttribute(n) : this.setAttribute(n, e)
+ }
+
+ function a(){
+ var e = t.apply(this, arguments);
+ null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)
+ }
+
+ return n = Bo.ns.qualify(n), null == t ? n.local ? r : e : "function" == typeof t ? n.local ? a : o : n.local ? i : u
+ }
+
+ function C(n){
+ return n.trim().replace(/\s+/g, " ")
+ }
+
+ function N(n){
+ return new RegExp("(?:^|\\s+)" + Bo.requote(n) + "(?:\\s+|$)", "g")
+ }
+
+ function z(n){
+ return (n + "").trim().split(/^|\s+/)
+ }
+
+ function L(n, t){
+ function e(){
+ for (var e = -1; ++e < u;)n[e](this, t)
+ }
+
+ function r(){
+ for (var e = -1, r = t.apply(this, arguments); ++e < u;)n[e](this, r)
+ }
+
+ n = z(n).map(T);
+ var u = n.length;
+ return "function" == typeof t ? r : e
+ }
+
+ function T(n){
+ var t = N(n);
+ return function(e, r){
+ if (u = e.classList)return r ? u.add(n) : u.remove(n);
+ var u = e.getAttribute("class") || "";
+ r ? (t.lastIndex = 0, t.test(u) || e.setAttribute("class", C(u + " " + n))) : e.setAttribute("class", C(u.replace(t, " ")))
+ }
+ }
+
+ function q(n, t, e){
+ function r(){
+ this.style.removeProperty(n)
+ }
+
+ function u(){
+ this.style.setProperty(n, t, e)
+ }
+
+ function i(){
+ var r = t.apply(this, arguments);
+ null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)
+ }
+
+ return null == t ? r : "function" == typeof t ? i : u
+ }
+
+ function R(n, t){
+ function e(){
+ delete this[n]
+ }
+
+ function r(){
+ this[n] = t
+ }
+
+ function u(){
+ var e = t.apply(this, arguments);
+ null == e ? delete this[n] : this[n] = e
+ }
+
+ return null == t ? e : "function" == typeof t ? u : r
+ }
+
+ function D(n){
+ return "function" == typeof n ? n : (n = Bo.ns.qualify(n)).local ? function(){
+ return this.ownerDocument.createElementNS(n.space, n.local)
+ } : function(){
+ return this.ownerDocument.createElementNS(this.namespaceURI, n)
+ }
+ }
+
+ function P(n){
+ return {__data__: n}
+ }
+
+ function U(n){
+ return function(){
+ return ma(this, n)
+ }
+ }
+
+ function j(t){
+ return arguments.length || (t = n), function(n, e){
+ return n && e ? t(n.__data__, e.__data__) : !n - !e
+ }
+ }
+
+ function F(n, t){
+ for (var e = 0, r = n.length; r > e; e++)for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);
+ return n
+ }
+
+ function H(n){
+ return ga(n, Ma), n
+ }
+
+ function O(n){
+ var t, e;
+ return function(r, u, i){
+ var o, a = n[i].update, c = a.length;
+ for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);
+ return o
+ }
+ }
+
+ function Y(){
+ var n = this.__transition__;
+ n && ++n.active
+ }
+
+ function I(n, t, e){
+ function r(){
+ var t = this[o];
+ t && (this.removeEventListener(n, t, t.$), delete this[o])
+ }
+
+ function u(){
+ var u = c(t, Jo(arguments));
+ r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t
+ }
+
+ function i(){
+ var t, e = new RegExp("^__on([^.]+)" + Bo.requote(n) + "$");
+ for (var r in this)if (t = r.match(e)) {
+ var u = this[r];
+ this.removeEventListener(t[1], u, u.$), delete this[r]
+ }
+ }
+
+ var o = "__on" + n, a = n.indexOf("."), c = Z;
+ a > 0 && (n = n.slice(0, a));
+ var l = ba.get(n);
+ return l && (n = l, c = V), a ? t ? u : r : t ? y : i
+ }
+
+ function Z(n, t){
+ return function(e){
+ var r = Bo.event;
+ Bo.event = e, t[0] = this.__data__;
+ try {
+ n.apply(this, t)
+ } finally {
+ Bo.event = r
+ }
+ }
+ }
+
+ function V(n, t){
+ var e = Z(n, t);
+ return function(n){
+ var t = this, r = n.relatedTarget;
+ r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)
+ }
+ }
+
+ function X(){
+ var n = ".dragsuppress-" + ++Sa, t = "click" + n, e = Bo.select(Qo).on("touchmove" + n, _).on("dragstart" + n, _).on("selectstart" + n, _);
+ if (wa) {
+ var r = Ko.style, u = r[wa];
+ r[wa] = "none"
+ }
+ return function(i){
+ function o(){
+ e.on(t, null)
+ }
+
+ e.on(n, null), wa && (r[wa] = u), i && (e.on(t, function(){
+ _(), o()
+ }, !0), setTimeout(o, 0))
+ }
+ }
+
+ function $(n, t){
+ t.changedTouches && (t = t.changedTouches[0]);
+ var e = n.ownerSVGElement || n;
+ if (e.createSVGPoint) {
+ var r = e.createSVGPoint();
+ if (0 > ka && (Qo.scrollX || Qo.scrollY)) {
+ e = Bo.select("body").append("svg").style({
+ position: "absolute",
+ top : 0,
+ left : 0,
+ margin : 0,
+ padding : 0,
+ border : "none"
+ }, "important");
+ var u = e[0][0].getScreenCTM();
+ ka = !(u.f || u.e), e.remove()
+ }
+ return ka ? (r.x = t.pageX, r.y = t.pageY) : (r.x = t.clientX, r.y = t.clientY), r = r.matrixTransform(n.getScreenCTM().inverse()), [r.x, r.y]
+ }
+ var i = n.getBoundingClientRect();
+ return [t.clientX - i.left - n.clientLeft, t.clientY - i.top - n.clientTop]
+ }
+
+ function B(){
+ return Bo.event.changedTouches[0].identifier
+ }
+
+ function W(){
+ return Bo.event.target
+ }
+
+ function J(){
+ return Qo
+ }
+
+ function G(n){
+ return n > 0 ? 1 : 0 > n ? -1 : 0
+ }
+
+ function K(n, t, e){
+ return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])
+ }
+
+ function Q(n){
+ return n > 1 ? 0 : -1 > n ? Ea : Math.acos(n)
+ }
+
+ function nt(n){
+ return n > 1 ? Ca : -1 > n ? -Ca : Math.asin(n)
+ }
+
+ function tt(n){
+ return ((n = Math.exp(n)) - 1 / n) / 2
+ }
+
+ function et(n){
+ return ((n = Math.exp(n)) + 1 / n) / 2
+ }
+
+ function rt(n){
+ return ((n = Math.exp(2 * n)) - 1) / (n + 1)
+ }
+
+ function ut(n){
+ return (n = Math.sin(n / 2)) * n
+ }
+
+ function it(){
+ }
+
+ function ot(n, t, e){
+ return this instanceof ot ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof ot ? new ot(n.h, n.s, n.l) : Mt("" + n, _t, ot) : new ot(n, t, e)
+ }
+
+ function at(n, t, e){
+ function r(n){
+ return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i
+ }
+
+ function u(n){
+ return Math.round(255 * r(n))
+ }
+
+ var i, o;
+ return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new dt(u(n + 120), u(n), u(n - 120))
+ }
+
+ function ct(n, t, e){
+ return this instanceof ct ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof ct ? new ct(n.h, n.c, n.l) : n instanceof st ? ht(n.l, n.a, n.b) : ht((n = bt((n = Bo.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new ct(n, t, e)
+ }
+
+ function lt(n, t, e){
+ return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new st(e, Math.cos(n *= La) * t, Math.sin(n) * t)
+ }
+
+ function st(n, t, e){
+ return this instanceof st ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof st ? new st(n.l, n.a, n.b) : n instanceof ct ? lt(n.h, n.c, n.l) : bt((n = dt(n)).r, n.g, n.b) : new st(n, t, e)
+ }
+
+ function ft(n, t, e){
+ var r = (n + 16) / 116, u = r + t / 500, i = r - e / 200;
+ return u = gt(u) * Ya, r = gt(r) * Ia, i = gt(i) * Za, new dt(vt(3.2404542 * u - 1.5371385 * r - .4985314 * i), vt(-.969266 * u + 1.8760108 * r + .041556 * i), vt(.0556434 * u - .2040259 * r + 1.0572252 * i))
+ }
+
+ function ht(n, t, e){
+ return n > 0 ? new ct(Math.atan2(e, t) * Ta, Math.sqrt(t * t + e * e), n) : new ct(0 / 0, 0 / 0, n)
+ }
+
+ function gt(n){
+ return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037
+ }
+
+ function pt(n){
+ return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29
+ }
+
+ function vt(n){
+ return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))
+ }
+
+ function dt(n, t, e){
+ return this instanceof dt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof dt ? new dt(n.r, n.g, n.b) : Mt("" + n, dt, at) : new dt(n, t, e)
+ }
+
+ function mt(n){
+ return new dt(n >> 16, 255 & n >> 8, 255 & n)
+ }
+
+ function yt(n){
+ return mt(n) + ""
+ }
+
+ function xt(n){
+ return 16 > n ? "0" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)
+ }
+
+ function Mt(n, t, e){
+ var r, u, i, o = 0, a = 0, c = 0;
+ if (r = /([a-z]+)\((.*)\)/i.exec(n))switch (u = r[2].split(","), r[1]) {
+ case"hsl":
+ return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);
+ case"rgb":
+ return t(St(u[0]), St(u[1]), St(u[2]))
+ }
+ return (i = $a.get(n)) ? t(i.r, i.g, i.b) : (null == n || "#" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))
+ }
+
+ function _t(n, t, e){
+ var r, u, i = Math.min(n /= 255, t /= 255, e /= 255), o = Math.max(n, t, e), a = o - i, c = (o + i) / 2;
+ return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new ot(r, u, c)
+ }
+
+ function bt(n, t, e){
+ n = wt(n), t = wt(t), e = wt(e);
+ var r = pt((.4124564 * n + .3575761 * t + .1804375 * e) / Ya), u = pt((.2126729 * n + .7151522 * t + .072175 * e) / Ia), i = pt((.0193339 * n + .119192 * t + .9503041 * e) / Za);
+ return st(116 * u - 16, 500 * (r - u), 200 * (u - i))
+ }
+
+ function wt(n){
+ return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)
+ }
+
+ function St(n){
+ var t = parseFloat(n);
+ return "%" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t
+ }
+
+ function kt(n){
+ return "function" == typeof n ? n : function(){
+ return n
+ }
+ }
+
+ function Et(n){
+ return n
+ }
+
+ function At(n){
+ return function(t, e, r){
+ return 2 === arguments.length && "function" == typeof e && (r = e, e = null), Ct(t, e, n, r)
+ }
+ }
+
+ function Ct(n, t, e, r){
+ function u(){
+ var n, t = c.status;
+ if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {
+ try {
+ n = e.call(i, c)
+ } catch (r) {
+ return o.error.call(i, r), void 0
+ }
+ o.load.call(i, n)
+ } else o.error.call(i, c)
+ }
+
+ var i = {}, o = Bo.dispatch("beforesend", "progress", "load", "error"), a = {}, c = new XMLHttpRequest, l = null;
+ return !Qo.XDomainRequest || "withCredentials"in c || !/^(http(s)?:)?\/\//.test(n) || (c = new XDomainRequest), "onload"in c ? c.onload = c.onerror = u : c.onreadystatechange = function(){
+ c.readyState > 3 && u()
+ }, c.onprogress = function(n){
+ var t = Bo.event;
+ Bo.event = n;
+ try {
+ o.progress.call(i, c)
+ } finally {
+ Bo.event = t
+ }
+ }, i.header = function(n, t){
+ return n = (n + "").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + "", i)
+ }, i.mimeType = function(n){
+ return arguments.length ? (t = null == n ? null : n + "", i) : t
+ }, i.responseType = function(n){
+ return arguments.length ? (l = n, i) : l
+ }, i.response = function(n){
+ return e = n, i
+ }, ["get", "post"].forEach(function(n){
+ i[n] = function(){
+ return i.send.apply(i, [n].concat(Jo(arguments)))
+ }
+ }), i.send = function(e, r, u){
+ if (2 === arguments.length && "function" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || "accept"in a || (a.accept = t + ",*/*"), c.setRequestHeader)for (var s in a)c.setRequestHeader(s, a[s]);
+ return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on("error", u).on("load", function(n){
+ u(null, n)
+ }), o.beforesend.call(i, c), c.send(null == r ? null : r), i
+ }, i.abort = function(){
+ return c.abort(), i
+ }, Bo.rebind(i, o, "on"), null == r ? i : i.get(Nt(r))
+ }
+
+ function Nt(n){
+ return 1 === n.length ? function(t, e){
+ n(null == t ? e : null)
+ } : n
+ }
+
+ function zt(n){
+ var t = n.responseType;
+ return t && "text" !== t ? n.response : n.responseText
+ }
+
+ function Lt(){
+ var n = Tt(), t = qt() - n;
+ t > 24 ? (isFinite(t) && (clearTimeout(Ga), Ga = setTimeout(Lt, t)), Ja = 0) : (Ja = 1, Qa(Lt))
+ }
+
+ function Tt(){
+ var n = Date.now();
+ for (Ka = Ba; Ka;)n >= Ka.t && (Ka.f = Ka.c(n - Ka.t)), Ka = Ka.n;
+ return n
+ }
+
+ function qt(){
+ for (var n, t = Ba, e = 1 / 0; t;)t.f ? t = n ? n.n = t.n : Ba = t.n : (t.t < e && (e = t.t), t = (n = t).n);
+ return Wa = n, e
+ }
+
+ function Rt(n, t){
+ return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)
+ }
+
+ function Dt(n, t){
+ var e = Math.pow(10, 3 * ca(8 - t));
+ return {
+ scale : t > 8 ? function(n){
+ return n / e
+ } : function(n){
+ return n * e
+ }, symbol: n
+ }
+ }
+
+ function Pt(n){
+ var t = n.decimal, e = n.thousands, r = n.grouping, u = n.currency, i = r && e ? function(n, t){
+ for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));)a = r[o = (o + 1) % r.length];
+ return i.reverse().join(e)
+ } : Et;
+ return function(n){
+ var e = tc.exec(n), r = e[1] || " ", o = e[2] || ">", a = e[3] || "-", c = e[4] || "", l = e[5], s = +e[6], f = e[7], h = e[8], g = e[9], p = 1, v = "", d = "", m = !1, y = !0;
+ switch (h && (h = +h.substring(1)), (l || "0" === r && "=" === o) && (l = r = "0", o = "="), g) {
+ case"n":
+ f = !0, g = "g";
+ break;
+ case"%":
+ p = 100, d = "%", g = "f";
+ break;
+ case"p":
+ p = 100, d = "%", g = "r";
+ break;
+ case"b":
+ case"o":
+ case"x":
+ case"X":
+ "#" === c && (v = "0" + g.toLowerCase());
+ case"c":
+ y = !1;
+ case"d":
+ m = !0, h = 0;
+ break;
+ case"s":
+ p = -1, g = "r"
+ }
+ "$" === c && (v = u[0], d = u[1]), "r" != g || h || (g = "g"), null != h && ("g" == g ? h = Math.max(1, Math.min(21, h)) : ("e" == g || "f" == g) && (h = Math.max(0, Math.min(20, h)))), g = ec.get(g) || Ut;
+ var x = l && f;
+ return function(n){
+ var e = d;
+ if (m && n % 1)return "";
+ var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, "-") : "-" === a ? "" : a;
+ if (0 > p) {
+ var c = Bo.formatPrefix(n, h);
+ n = c.scale(n), e = c.symbol + d
+ } else n *= p;
+ n = g(n, h);
+ var M, _, b = n.lastIndexOf(".");
+ if (0 > b) {
+ var w = y ? n.lastIndexOf("e") : -1;
+ 0 > w ? (M = n, _ = "") : (M = n.substring(0, w), _ = n.substring(w))
+ } else M = n.substring(0, b), _ = t + n.substring(b + 1);
+ !l && f && (M = i(M, 1 / 0));
+ var S = v.length + M.length + _.length + (x ? 0 : u.length), k = s > S ? new Array(S = s - S + 1).join(r) : "";
+ return x && (M = i(k + M, k.length ? s - _.length : 1 / 0)), u += v, n = M + _, ("<" === o ? u + n + k : ">" === o ? k + u + n : "^" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (x ? n : k + n)) + e
+ }
+ }
+ }
+
+ function Ut(n){
+ return n + ""
+ }
+
+ function jt(){
+ this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])
+ }
+
+ function Ft(n, t, e){
+ function r(t){
+ var e = n(t), r = i(e, 1);
+ return r - t > t - e ? e : r
+ }
+
+ function u(e){
+ return t(e = n(new uc(e - 1)), 1), e
+ }
+
+ function i(n, e){
+ return t(n = new uc(+n), e), n
+ }
+
+ function o(n, r, i){
+ var o = u(n), a = [];
+ if (i > 1)for (; r > o;)e(o) % i || a.push(new Date(+o)), t(o, 1); else for (; r > o;)a.push(new Date(+o)), t(o, 1);
+ return a
+ }
+
+ function a(n, t, e){
+ try {
+ uc = jt;
+ var r = new jt;
+ return r._ = n, o(r, t, e)
+ } finally {
+ uc = Date
+ }
+ }
+
+ n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;
+ var c = n.utc = Ht(n);
+ return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n
+ }
+
+ function Ht(n){
+ return function(t, e){
+ try {
+ uc = jt;
+ var r = new jt;
+ return r._ = t, n(r, e)._
+ } finally {
+ uc = Date
+ }
+ }
+ }
+
+ function Ot(n){
+ function t(n){
+ function t(t){
+ for (var e, u, i, o = [], a = -1, c = 0; ++a < r;)37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = oc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = C[e]) && (e = i(t, null == u ? "e" === e ? " " : "0" : u)), o.push(e), c = a + 1);
+ return o.push(n.slice(c, a)), o.join("")
+ }
+
+ var r = n.length;
+ return t.parse = function(t){
+ var r = {y: 1900, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0, Z: null}, u = e(r, n, t, 0);
+ if (u != t.length)return null;
+ "p"in r && (r.H = r.H % 12 + 12 * r.p);
+ var i = null != r.Z && uc !== jt, o = new (i ? jt : uc);
+ return "j"in r ? o.setFullYear(r.y, 0, r.j) : "w"in r && ("W"in r || "U"in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, "W"in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (0 | r.Z / 100), r.M + r.Z % 100, r.S, r.L), i ? o._ : o
+ }, t.toString = function(){
+ return n
+ }, t
+ }
+
+ function e(n, t, e, r){
+ for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {
+ if (r >= l)return -1;
+ if (u = t.charCodeAt(a++), 37 === u) {
+ if (o = t.charAt(a++), i = N[o in oc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0)return -1
+ } else if (u != e.charCodeAt(r++))return -1
+ }
+ return r
+ }
+
+ function r(n, t, e){
+ b.lastIndex = 0;
+ var r = b.exec(t.slice(e));
+ return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function u(n, t, e){
+ M.lastIndex = 0;
+ var r = M.exec(t.slice(e));
+ return r ? (n.w = _.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function i(n, t, e){
+ E.lastIndex = 0;
+ var r = E.exec(t.slice(e));
+ return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function o(n, t, e){
+ S.lastIndex = 0;
+ var r = S.exec(t.slice(e));
+ return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function a(n, t, r){
+ return e(n, C.c.toString(), t, r)
+ }
+
+ function c(n, t, r){
+ return e(n, C.x.toString(), t, r)
+ }
+
+ function l(n, t, r){
+ return e(n, C.X.toString(), t, r)
+ }
+
+ function s(n, t, e){
+ var r = x.get(t.slice(e, e += 2).toLowerCase());
+ return null == r ? -1 : (n.p = r, e)
+ }
+
+ var f = n.dateTime, h = n.date, g = n.time, p = n.periods, v = n.days, d = n.shortDays, m = n.months, y = n.shortMonths;
+ t.utc = function(n){
+ function e(n){
+ try {
+ uc = jt;
+ var t = new uc;
+ return t._ = n, r(t)
+ } finally {
+ uc = Date
+ }
+ }
+
+ var r = t(n);
+ return e.parse = function(n){
+ try {
+ uc = jt;
+ var t = r.parse(n);
+ return t && t._
+ } finally {
+ uc = Date
+ }
+ }, e.toString = r.toString, e
+ }, t.multi = t.utc.multi = ae;
+ var x = Bo.map(), M = It(v), _ = Zt(v), b = It(d), w = Zt(d), S = It(m), k = Zt(m), E = It(y), A = Zt(y);
+ p.forEach(function(n, t){
+ x.set(n.toLowerCase(), t)
+ });
+ var C = {
+ a : function(n){
+ return d[n.getDay()]
+ }, A: function(n){
+ return v[n.getDay()]
+ }, b: function(n){
+ return y[n.getMonth()]
+ }, B: function(n){
+ return m[n.getMonth()]
+ }, c: t(f), d: function(n, t){
+ return Yt(n.getDate(), t, 2)
+ }, e: function(n, t){
+ return Yt(n.getDate(), t, 2)
+ }, H: function(n, t){
+ return Yt(n.getHours(), t, 2)
+ }, I: function(n, t){
+ return Yt(n.getHours() % 12 || 12, t, 2)
+ }, j: function(n, t){
+ return Yt(1 + rc.dayOfYear(n), t, 3)
+ }, L: function(n, t){
+ return Yt(n.getMilliseconds(), t, 3)
+ }, m: function(n, t){
+ return Yt(n.getMonth() + 1, t, 2)
+ }, M: function(n, t){
+ return Yt(n.getMinutes(), t, 2)
+ }, p: function(n){
+ return p[+(n.getHours() >= 12)]
+ }, S: function(n, t){
+ return Yt(n.getSeconds(), t, 2)
+ }, U: function(n, t){
+ return Yt(rc.sundayOfYear(n), t, 2)
+ }, w: function(n){
+ return n.getDay()
+ }, W: function(n, t){
+ return Yt(rc.mondayOfYear(n), t, 2)
+ }, x: t(h), X: t(g), y: function(n, t){
+ return Yt(n.getFullYear() % 100, t, 2)
+ }, Y: function(n, t){
+ return Yt(n.getFullYear() % 1e4, t, 4)
+ }, Z: ie, "%": function(){
+ return "%"
+ }
+ }, N = {
+ a : r,
+ A : u,
+ b : i,
+ B : o,
+ c : a,
+ d : Qt,
+ e : Qt,
+ H : te,
+ I : te,
+ j : ne,
+ L : ue,
+ m : Kt,
+ M : ee,
+ p : s,
+ S : re,
+ U : Xt,
+ w : Vt,
+ W : $t,
+ x : c,
+ X : l,
+ y : Wt,
+ Y : Bt,
+ Z : Jt,
+ "%": oe
+ };
+ return t
+ }
+
+ function Yt(n, t, e){
+ var r = 0 > n ? "-" : "", u = (r ? -n : n) + "", i = u.length;
+ return r + (e > i ? new Array(e - i + 1).join(t) + u : u)
+ }
+
+ function It(n){
+ return new RegExp("^(?:" + n.map(Bo.requote).join("|") + ")", "i")
+ }
+
+ function Zt(n){
+ for (var t = new a, e = -1, r = n.length; ++e < r;)t.set(n[e].toLowerCase(), e);
+ return t
+ }
+
+ function Vt(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 1));
+ return r ? (n.w = +r[0], e + r[0].length) : -1
+ }
+
+ function Xt(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e));
+ return r ? (n.U = +r[0], e + r[0].length) : -1
+ }
+
+ function $t(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e));
+ return r ? (n.W = +r[0], e + r[0].length) : -1
+ }
+
+ function Bt(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 4));
+ return r ? (n.y = +r[0], e + r[0].length) : -1
+ }
+
+ function Wt(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1
+ }
+
+ function Jt(n, t, e){
+ return /^[+-]\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1
+ }
+
+ function Gt(n){
+ return n + (n > 68 ? 1900 : 2e3)
+ }
+
+ function Kt(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.m = r[0] - 1, e + r[0].length) : -1
+ }
+
+ function Qt(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.d = +r[0], e + r[0].length) : -1
+ }
+
+ function ne(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 3));
+ return r ? (n.j = +r[0], e + r[0].length) : -1
+ }
+
+ function te(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.H = +r[0], e + r[0].length) : -1
+ }
+
+ function ee(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.M = +r[0], e + r[0].length) : -1
+ }
+
+ function re(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.S = +r[0], e + r[0].length) : -1
+ }
+
+ function ue(n, t, e){
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 3));
+ return r ? (n.L = +r[0], e + r[0].length) : -1
+ }
+
+ function ie(n){
+ var t = n.getTimezoneOffset(), e = t > 0 ? "-" : "+", r = 0 | ca(t) / 60, u = ca(t) % 60;
+ return e + Yt(r, "0", 2) + Yt(u, "0", 2)
+ }
+
+ function oe(n, t, e){
+ cc.lastIndex = 0;
+ var r = cc.exec(t.slice(e, e + 1));
+ return r ? e + r[0].length : -1
+ }
+
+ function ae(n){
+ for (var t = n.length, e = -1; ++e < t;)n[e][0] = this(n[e][0]);
+ return function(t){
+ for (var e = 0, r = n[e]; !r[1](t);)r = n[++e];
+ return r[0](t)
+ }
+ }
+
+ function ce(){
+ }
+
+ function le(n, t, e){
+ var r = e.s = n + t, u = r - n, i = r - u;
+ e.t = n - i + (t - u)
+ }
+
+ function se(n, t){
+ n && hc.hasOwnProperty(n.type) && hc[n.type](n, t)
+ }
+
+ function fe(n, t, e){
+ var r, u = -1, i = n.length - e;
+ for (t.lineStart(); ++u < i;)r = n[u], t.point(r[0], r[1], r[2]);
+ t.lineEnd()
+ }
+
+ function he(n, t){
+ var e = -1, r = n.length;
+ for (t.polygonStart(); ++e < r;)fe(n[e], t, 1);
+ t.polygonEnd()
+ }
+
+ function ge(){
+ function n(n, t){
+ n *= La, t = t * La / 2 + Ea / 4;
+ var e = n - r, o = e >= 0 ? 1 : -1, a = o * e, c = Math.cos(t), l = Math.sin(t), s = i * l, f = u * c + s * Math.cos(a), h = s * o * Math.sin(a);
+ pc.add(Math.atan2(h, f)), r = n, u = c, i = l
+ }
+
+ var t, e, r, u, i;
+ vc.point = function(o, a){
+ vc.point = n, r = (t = o) * La, u = Math.cos(a = (e = a) * La / 2 + Ea / 4), i = Math.sin(a)
+ }, vc.lineEnd = function(){
+ n(t, e)
+ }
+ }
+
+ function pe(n){
+ var t = n[0], e = n[1], r = Math.cos(e);
+ return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]
+ }
+
+ function ve(n, t){
+ return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]
+ }
+
+ function de(n, t){
+ return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]
+ }
+
+ function me(n, t){
+ n[0] += t[0], n[1] += t[1], n[2] += t[2]
+ }
+
+ function ye(n, t){
+ return [n[0] * t, n[1] * t, n[2] * t]
+ }
+
+ function xe(n){
+ var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);
+ n[0] /= t, n[1] /= t, n[2] /= t
+ }
+
+ function Me(n){
+ return [Math.atan2(n[1], n[0]), nt(n[2])]
+ }
+
+ function _e(n, t){
+ return ca(n[0] - t[0]) < Na && ca(n[1] - t[1]) < Na
+ }
+
+ function be(n, t){
+ n *= La;
+ var e = Math.cos(t *= La);
+ we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))
+ }
+
+ function we(n, t, e){
+ ++dc, yc += (n - yc) / dc, xc += (t - xc) / dc, Mc += (e - Mc) / dc
+ }
+
+ function Se(){
+ function n(n, u){
+ n *= La;
+ var i = Math.cos(u *= La), o = i * Math.cos(n), a = i * Math.sin(n), c = Math.sin(u), l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);
+ mc += l, _c += l * (t + (t = o)), bc += l * (e + (e = a)), wc += l * (r + (r = c)), we(t, e, r)
+ }
+
+ var t, e, r;
+ Ac.point = function(u, i){
+ u *= La;
+ var o = Math.cos(i *= La);
+ t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), Ac.point = n, we(t, e, r)
+ }
+ }
+
+ function ke(){
+ Ac.point = be
+ }
+
+ function Ee(){
+ function n(n, t){
+ n *= La;
+ var e = Math.cos(t *= La), o = e * Math.cos(n), a = e * Math.sin(n), c = Math.sin(t), l = u * c - i * a, s = i * o - r * c, f = r * a - u * o, h = Math.sqrt(l * l + s * s + f * f), g = r * o + u * a + i * c, p = h && -Q(g) / h, v = Math.atan2(h, g);
+ Sc += p * l, kc += p * s, Ec += p * f, mc += v, _c += v * (r + (r = o)), bc += v * (u + (u = a)), wc += v * (i + (i = c)), we(r, u, i)
+ }
+
+ var t, e, r, u, i;
+ Ac.point = function(o, a){
+ t = o, e = a, Ac.point = n, o *= La;
+ var c = Math.cos(a *= La);
+ r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)
+ }, Ac.lineEnd = function(){
+ n(t, e), Ac.lineEnd = ke, Ac.point = be
+ }
+ }
+
+ function Ae(){
+ return !0
+ }
+
+ function Ce(n, t, e, r, u){
+ var i = [], o = [];
+ if (n.forEach(function(n){
+ if (!((t = n.length - 1) <= 0)) {
+ var t, e = n[0], r = n[t];
+ if (_e(e, r)) {
+ u.lineStart();
+ for (var a = 0; t > a; ++a)u.point((e = n[a])[0], e[1]);
+ return u.lineEnd(), void 0
+ }
+ var c = new ze(e, n, null, !0), l = new ze(e, null, c, !1);
+ c.o = l, i.push(c), o.push(l), c = new ze(r, n, null, !1), l = new ze(r, null, c, !0), c.o = l, i.push(c), o.push(l)
+ }
+ }), o.sort(t), Ne(i), Ne(o), i.length) {
+ for (var a = 0, c = e, l = o.length; l > a; ++a)o[a].e = c = !c;
+ for (var s, f, h = i[0]; ;) {
+ for (var g = h, p = !0; g.v;)if ((g = g.n) === h)return;
+ s = g.z, u.lineStart();
+ do {
+ if (g.v = g.o.v = !0, g.e) {
+ if (p)for (var a = 0, l = s.length; l > a; ++a)u.point((f = s[a])[0], f[1]); else r(g.x, g.n.x, 1, u);
+ g = g.n
+ } else {
+ if (p) {
+ s = g.p.z;
+ for (var a = s.length - 1; a >= 0; --a)u.point((f = s[a])[0], f[1])
+ } else r(g.x, g.p.x, -1, u);
+ g = g.p
+ }
+ g = g.o, s = g.z, p = !p
+ } while (!g.v);
+ u.lineEnd()
+ }
+ }
+ }
+
+ function Ne(n){
+ if (t = n.length) {
+ for (var t, e, r = 0, u = n[0]; ++r < t;)u.n = e = n[r], e.p = u, u = e;
+ u.n = e = n[0], e.p = u
+ }
+ }
+
+ function ze(n, t, e, r){
+ this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null
+ }
+
+ function Le(n, t, e, r){
+ return function(u, i){
+ function o(t, e){
+ var r = u(t, e);
+ n(t = r[0], e = r[1]) && i.point(t, e)
+ }
+
+ function a(n, t){
+ var e = u(n, t);
+ d.point(e[0], e[1])
+ }
+
+ function c(){
+ y.point = a, d.lineStart()
+ }
+
+ function l(){
+ y.point = o, d.lineEnd()
+ }
+
+ function s(n, t){
+ v.push([n, t]);
+ var e = u(n, t);
+ M.point(e[0], e[1])
+ }
+
+ function f(){
+ M.lineStart(), v = []
+ }
+
+ function h(){
+ s(v[0][0], v[0][1]), M.lineEnd();
+ var n, t = M.clean(), e = x.buffer(), r = e.length;
+ if (v.pop(), p.push(v), v = null, r)if (1 & t) {
+ n = e[0];
+ var u, r = n.length - 1, o = -1;
+ if (r > 0) {
+ for (_ || (i.polygonStart(), _ = !0), i.lineStart(); ++o < r;)i.point((u = n[o])[0], u[1]);
+ i.lineEnd()
+ }
+ } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))
+ }
+
+ var g, p, v, d = t(i), m = u.invert(r[0], r[1]), y = {
+ point : o,
+ lineStart : c,
+ lineEnd : l,
+ polygonStart: function(){
+ y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []
+ },
+ polygonEnd : function(){
+ y.point = o, y.lineStart = c, y.lineEnd = l, g = Bo.merge(g);
+ var n = je(m, p);
+ g.length ? (_ || (i.polygonStart(), _ = !0), Ce(g, Re, n, e, i)) : n && (_ || (i.polygonStart(), _ = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), _ && (i.polygonEnd(), _ = !1), g = p = null
+ },
+ sphere : function(){
+ i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()
+ }
+ }, x = qe(), M = t(x), _ = !1;
+ return y
+ }
+ }
+
+ function Te(n){
+ return n.length > 1
+ }
+
+ function qe(){
+ var n, t = [];
+ return {
+ lineStart : function(){
+ t.push(n = [])
+ }, point : function(t, e){
+ n.push([t, e])
+ }, lineEnd: y, buffer: function(){
+ var e = t;
+ return t = [], n = null, e
+ }, rejoin : function(){
+ t.length > 1 && t.push(t.pop().concat(t.shift()))
+ }
+ }
+ }
+
+ function Re(n, t){
+ return ((n = n.x)[0] < 0 ? n[1] - Ca - Na : Ca - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ca - Na : Ca - t[1])
+ }
+
+ function De(n){
+ var t, e = 0 / 0, r = 0 / 0, u = 0 / 0;
+ return {
+ lineStart : function(){
+ n.lineStart(), t = 1
+ }, point : function(i, o){
+ var a = i > 0 ? Ea : -Ea, c = ca(i - e);
+ ca(c - Ea) < Na ? (n.point(e, r = (r + o) / 2 > 0 ? Ca : -Ca), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= Ea && (ca(e - u) < Na && (e -= u * Na), ca(i - a) < Na && (i -= a * Na), r = Pe(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a
+ }, lineEnd: function(){
+ n.lineEnd(), e = r = 0 / 0
+ }, clean : function(){
+ return 2 - t
+ }
+ }
+ }
+
+ function Pe(n, t, e, r){
+ var u, i, o = Math.sin(n - e);
+ return ca(o) > Na ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2
+ }
+
+ function Ue(n, t, e, r){
+ var u;
+ if (null == n)u = e * Ca, r.point(-Ea, u), r.point(0, u), r.point(Ea, u), r.point(Ea, 0), r.point(Ea, -u), r.point(0, -u), r.point(-Ea, -u), r.point(-Ea, 0), r.point(-Ea, u); else if (ca(n[0] - t[0]) > Na) {
+ var i = n[0] < t[0] ? Ea : -Ea;
+ u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)
+ } else r.point(t[0], t[1])
+ }
+
+ function je(n, t){
+ var e = n[0], r = n[1], u = [Math.sin(e), -Math.cos(e), 0], i = 0, o = 0;
+ pc.reset();
+ for (var a = 0, c = t.length; c > a; ++a) {
+ var l = t[a], s = l.length;
+ if (s)for (var f = l[0], h = f[0], g = f[1] / 2 + Ea / 4, p = Math.sin(g), v = Math.cos(g), d = 1; ;) {
+ d === s && (d = 0), n = l[d];
+ var m = n[0], y = n[1] / 2 + Ea / 4, x = Math.sin(y), M = Math.cos(y), _ = m - h, b = _ >= 0 ? 1 : -1, w = b * _, S = w > Ea, k = p * x;
+ if (pc.add(Math.atan2(k * b * Math.sin(w), v * M + k * Math.cos(w))), i += S ? _ + b * Aa : _, S ^ h >= e ^ m >= e) {
+ var E = de(pe(f), pe(n));
+ xe(E);
+ var A = de(u, E);
+ xe(A);
+ var C = (S ^ _ >= 0 ? -1 : 1) * nt(A[2]);
+ (r > C || r === C && (E[0] || E[1])) && (o += S ^ _ >= 0 ? 1 : -1)
+ }
+ if (!d++)break;
+ h = m, p = x, v = M, f = n
+ }
+ }
+ return (-Na > i || Na > i && 0 > pc) ^ 1 & o
+ }
+
+ function Fe(n){
+ function t(n, t){
+ return Math.cos(n) * Math.cos(t) > i
+ }
+
+ function e(n){
+ var e, i, c, l, s;
+ return {
+ lineStart : function(){
+ l = c = !1, s = 1
+ }, point : function(f, h){
+ var g, p = [f, h], v = t(f, h), d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? Ea : -Ea), h) : 0;
+ if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (_e(e, g) || _e(p, g)) && (p[0] += Na, p[1] += Na, v = t(p[0], p[1]))), v !== c)s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g; else if (a && e && o ^ v) {
+ var m;
+ d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))
+ }
+ !v || e && _e(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d
+ }, lineEnd: function(){
+ c && n.lineEnd(), e = null
+ }, clean : function(){
+ return s | (l && c) << 1
+ }
+ }
+ }
+
+ function r(n, t, e){
+ var r = pe(n), u = pe(t), o = [1, 0, 0], a = de(r, u), c = ve(a, a), l = a[0], s = c - l * l;
+ if (!s)return !e && n;
+ var f = i * c / s, h = -i * l / s, g = de(o, a), p = ye(o, f), v = ye(a, h);
+ me(p, v);
+ var d = g, m = ve(p, d), y = ve(d, d), x = m * m - y * (ve(p, p) - 1);
+ if (!(0 > x)) {
+ var M = Math.sqrt(x), _ = ye(d, (-m - M) / y);
+ if (me(_, p), _ = Me(_), !e)return _;
+ var b, w = n[0], S = t[0], k = n[1], E = t[1];
+ w > S && (b = w, w = S, S = b);
+ var A = S - w, C = ca(A - Ea) < Na, N = C || Na > A;
+ if (!C && k > E && (b = k, k = E, E = b), N ? C ? k + E > 0 ^ _[1] < (ca(_[0] - w) < Na ? k : E) : k <= _[1] && _[1] <= E : A > Ea ^ (w <= _[0] && _[0] <= S)) {
+ var z = ye(d, (-m + M) / y);
+ return me(z, p), [_, Me(z)]
+ }
+ }
+ }
+
+ function u(t, e){
+ var r = o ? n : Ea - n, u = 0;
+ return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u
+ }
+
+ var i = Math.cos(n), o = i > 0, a = ca(i) > Na, c = gr(n, 6 * La);
+ return Le(t, e, c, o ? [0, -n] : [-Ea, n - Ea])
+ }
+
+ function He(n, t, e, r){
+ return function(u){
+ var i, o = u.a, a = u.b, c = o.x, l = o.y, s = a.x, f = a.y, h = 0, g = 1, p = s - c, v = f - l;
+ if (i = n - c, p || !(i > 0)) {
+ if (i /= p, 0 > p) {
+ if (h > i)return;
+ g > i && (g = i)
+ } else if (p > 0) {
+ if (i > g)return;
+ i > h && (h = i)
+ }
+ if (i = e - c, p || !(0 > i)) {
+ if (i /= p, 0 > p) {
+ if (i > g)return;
+ i > h && (h = i)
+ } else if (p > 0) {
+ if (h > i)return;
+ g > i && (g = i)
+ }
+ if (i = t - l, v || !(i > 0)) {
+ if (i /= v, 0 > v) {
+ if (h > i)return;
+ g > i && (g = i)
+ } else if (v > 0) {
+ if (i > g)return;
+ i > h && (h = i)
+ }
+ if (i = r - l, v || !(0 > i)) {
+ if (i /= v, 0 > v) {
+ if (i > g)return;
+ i > h && (h = i)
+ } else if (v > 0) {
+ if (h > i)return;
+ g > i && (g = i)
+ }
+ return h > 0 && (u.a = {x: c + h * p, y: l + h * v}), 1 > g && (u.b = {x: c + g * p, y: l + g * v}), u
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function Oe(n, t, e, r){
+ function u(r, u){
+ return ca(r[0] - n) < Na ? u > 0 ? 0 : 3 : ca(r[0] - e) < Na ? u > 0 ? 2 : 1 : ca(r[1] - t) < Na ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2
+ }
+
+ function i(n, t){
+ return o(n.x, t.x)
+ }
+
+ function o(n, t){
+ var e = u(n, 1), r = u(t, 1);
+ return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]
+ }
+
+ return function(a){
+ function c(n){
+ for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o)i = a[o], l[1] <= r ? i[1] > r && K(l, i, n) > 0 && ++t : i[1] <= r && K(l, i, n) < 0 && --t, l = i;
+ return 0 !== t
+ }
+
+ function l(i, a, c, l){
+ var s = 0, f = 0;
+ if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {
+ do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)
+ } else l.point(a[0], a[1])
+ }
+
+ function s(u, i){
+ return u >= n && e >= u && i >= t && r >= i
+ }
+
+ function f(n, t){
+ s(n, t) && a.point(n, t)
+ }
+
+ function h(){
+ N.point = p, d && d.push(m = []), S = !0, w = !1, _ = b = 0 / 0
+ }
+
+ function g(){
+ v && (p(y, x), M && w && A.rejoin(), v.push(A.buffer())), N.point = f, w && a.lineEnd()
+ }
+
+ function p(n, t){
+ n = Math.max(-Nc, Math.min(Nc, n)), t = Math.max(-Nc, Math.min(Nc, t));
+ var e = s(n, t);
+ if (d && m.push([n, t]), S)y = n, x = t, M = e, S = !1, e && (a.lineStart(), a.point(n, t)); else if (e && w)a.point(n, t); else {
+ var r = {a: {x: _, y: b}, b: {x: n, y: t}};
+ C(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)
+ }
+ _ = n, b = t, w = e
+ }
+
+ var v, d, m, y, x, M, _, b, w, S, k, E = a, A = qe(), C = He(n, t, e, r), N = {
+ point : f,
+ lineStart : h,
+ lineEnd : g,
+ polygonStart: function(){
+ a = A, v = [], d = [], k = !0
+ },
+ polygonEnd : function(){
+ a = E, v = Bo.merge(v);
+ var t = c([n, r]), e = k && t, u = v.length;
+ (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null
+ }
+ };
+ return N
+ }
+ }
+
+ function Ye(n, t){
+ function e(e, r){
+ return e = n(e, r), t(e[0], e[1])
+ }
+
+ return n.invert && t.invert && (e.invert = function(e, r){
+ return e = t.invert(e, r), e && n.invert(e[0], e[1])
+ }), e
+ }
+
+ function Ie(n){
+ var t = 0, e = Ea / 3, r = ir(n), u = r(t, e);
+ return u.parallels = function(n){
+ return arguments.length ? r(t = n[0] * Ea / 180, e = n[1] * Ea / 180) : [180 * (t / Ea), 180 * (e / Ea)]
+ }, u
+ }
+
+ function Ze(n, t){
+ function e(n, t){
+ var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;
+ return [e * Math.sin(n *= u), o - e * Math.cos(n)]
+ }
+
+ var r = Math.sin(n), u = (r + Math.sin(t)) / 2, i = 1 + r * (2 * u - r), o = Math.sqrt(i) / u;
+ return e.invert = function(n, t){
+ var e = o - t;
+ return [Math.atan2(n, e) / u, nt((i - (n * n + e * e) * u * u) / (2 * u))]
+ }, e
+ }
+
+ function Ve(){
+ function n(n, t){
+ Lc += u * n - r * t, r = n, u = t
+ }
+
+ var t, e, r, u;
+ Pc.point = function(i, o){
+ Pc.point = n, t = r = i, e = u = o
+ }, Pc.lineEnd = function(){
+ n(t, e)
+ }
+ }
+
+ function Xe(n, t){
+ Tc > n && (Tc = n), n > Rc && (Rc = n), qc > t && (qc = t), t > Dc && (Dc = t)
+ }
+
+ function $e(){
+ function n(n, t){
+ o.push("M", n, ",", t, i)
+ }
+
+ function t(n, t){
+ o.push("M", n, ",", t), a.point = e
+ }
+
+ function e(n, t){
+ o.push("L", n, ",", t)
+ }
+
+ function r(){
+ a.point = n
+ }
+
+ function u(){
+ o.push("Z")
+ }
+
+ var i = Be(4.5), o = [], a = {
+ point : n, lineStart: function(){
+ a.point = t
+ }, lineEnd : r, polygonStart: function(){
+ a.lineEnd = u
+ }, polygonEnd : function(){
+ a.lineEnd = r, a.point = n
+ }, pointRadius: function(n){
+ return i = Be(n), a
+ }, result : function(){
+ if (o.length) {
+ var n = o.join("");
+ return o = [], n
+ }
+ }
+ };
+ return a
+ }
+
+ function Be(n){
+ return "m0," + n + "a" + n + "," + n + " 0 1,1 0," + -2 * n + "a" + n + "," + n + " 0 1,1 0," + 2 * n + "z"
+ }
+
+ function We(n, t){
+ yc += n, xc += t, ++Mc
+ }
+
+ function Je(){
+ function n(n, r){
+ var u = n - t, i = r - e, o = Math.sqrt(u * u + i * i);
+ _c += o * (t + n) / 2, bc += o * (e + r) / 2, wc += o, We(t = n, e = r)
+ }
+
+ var t, e;
+ jc.point = function(r, u){
+ jc.point = n, We(t = r, e = u)
+ }
+ }
+
+ function Ge(){
+ jc.point = We
+ }
+
+ function Ke(){
+ function n(n, t){
+ var e = n - r, i = t - u, o = Math.sqrt(e * e + i * i);
+ _c += o * (r + n) / 2, bc += o * (u + t) / 2, wc += o, o = u * n - r * t, Sc += o * (r + n), kc += o * (u + t), Ec += 3 * o, We(r = n, u = t)
+ }
+
+ var t, e, r, u;
+ jc.point = function(i, o){
+ jc.point = n, We(t = r = i, e = u = o)
+ }, jc.lineEnd = function(){
+ n(t, e)
+ }
+ }
+
+ function Qe(n){
+ function t(t, e){
+ n.moveTo(t, e), n.arc(t, e, o, 0, Aa)
+ }
+
+ function e(t, e){
+ n.moveTo(t, e), a.point = r
+ }
+
+ function r(t, e){
+ n.lineTo(t, e)
+ }
+
+ function u(){
+ a.point = t
+ }
+
+ function i(){
+ n.closePath()
+ }
+
+ var o = 4.5, a = {
+ point : t, lineStart: function(){
+ a.point = e
+ }, lineEnd : u, polygonStart: function(){
+ a.lineEnd = i
+ }, polygonEnd : function(){
+ a.lineEnd = u, a.point = t
+ }, pointRadius: function(n){
+ return o = n, a
+ }, result : y
+ };
+ return a
+ }
+
+ function nr(n){
+ function t(n){
+ return (a ? r : e)(n)
+ }
+
+ function e(t){
+ return rr(t, function(e, r){
+ e = n(e, r), t.point(e[0], e[1])
+ })
+ }
+
+ function r(t){
+ function e(e, r){
+ e = n(e, r), t.point(e[0], e[1])
+ }
+
+ function r(){
+ x = 0 / 0, S.point = i, t.lineStart()
+ }
+
+ function i(e, r){
+ var i = pe([e, r]), o = n(e, r);
+ u(x, M, y, _, b, w, x = o[0], M = o[1], y = e, _ = i[0], b = i[1], w = i[2], a, t), t.point(x, M)
+ }
+
+ function o(){
+ S.point = e, t.lineEnd()
+ }
+
+ function c(){
+ r(), S.point = l, S.lineEnd = s
+ }
+
+ function l(n, t){
+ i(f = n, h = t), g = x, p = M, v = _, d = b, m = w, S.point = i
+ }
+
+ function s(){
+ u(x, M, y, _, b, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()
+ }
+
+ var f, h, g, p, v, d, m, y, x, M, _, b, w, S = {
+ point : e, lineStart: r, lineEnd: o, polygonStart: function(){
+ t.polygonStart(), S.lineStart = c
+ }, polygonEnd: function(){
+ t.polygonEnd(), S.lineStart = r
+ }
+ };
+ return S
+ }
+
+ function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m){
+ var y = s - t, x = f - e, M = y * y + x * x;
+ if (M > 4 * i && d--) {
+ var _ = a + g, b = c + p, w = l + v, S = Math.sqrt(_ * _ + b * b + w * w), k = Math.asin(w /= S), E = ca(ca(w) - 1) < Na || ca(r - h) < Na ? (r + h) / 2 : Math.atan2(b, _), A = n(E, k), C = A[0], N = A[1], z = C - t, L = N - e, T = x * z - y * L;
+ (T * T / M > i || ca((y * z + x * L) / M - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, C, N, E, _ /= S, b /= S, w, d, m), m.point(C, N), u(C, N, E, _, b, w, s, f, h, g, p, v, d, m))
+ }
+ }
+
+ var i = .5, o = Math.cos(30 * La), a = 16;
+ return t.precision = function(n){
+ return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)
+ }, t
+ }
+
+ function tr(n){
+ var t = nr(function(t, e){
+ return n([t * Ta, e * Ta])
+ });
+ return function(n){
+ return or(t(n))
+ }
+ }
+
+ function er(n){
+ this.stream = n
+ }
+
+ function rr(n, t){
+ return {
+ point : t, sphere: function(){
+ n.sphere()
+ }, lineStart : function(){
+ n.lineStart()
+ }, lineEnd : function(){
+ n.lineEnd()
+ }, polygonStart: function(){
+ n.polygonStart()
+ }, polygonEnd : function(){
+ n.polygonEnd()
+ }
+ }
+ }
+
+ function ur(n){
+ return ir(function(){
+ return n
+ })()
+ }
+
+ function ir(n){
+ function t(n){
+ return n = a(n[0] * La, n[1] * La), [n[0] * h + c, l - n[1] * h]
+ }
+
+ function e(n){
+ return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Ta, n[1] * Ta]
+ }
+
+ function r(){
+ a = Ye(o = lr(m, y, x), i);
+ var n = i(v, d);
+ return c = g - n[0] * h, l = p + n[1] * h, u()
+ }
+
+ function u(){
+ return s && (s.valid = !1, s = null), t
+ }
+
+ var i, o, a, c, l, s, f = nr(function(n, t){
+ return n = i(n, t), [n[0] * h + c, l - n[1] * h]
+ }), h = 150, g = 480, p = 250, v = 0, d = 0, m = 0, y = 0, x = 0, M = Cc, _ = Et, b = null, w = null;
+ return t.stream = function(n){
+ return s && (s.valid = !1), s = or(M(o, f(_(n)))), s.valid = !0, s
+ }, t.clipAngle = function(n){
+ return arguments.length ? (M = null == n ? (b = n, Cc) : Fe((b = +n) * La), u()) : b
+ }, t.clipExtent = function(n){
+ return arguments.length ? (w = n, _ = n ? Oe(n[0][0], n[0][1], n[1][0], n[1][1]) : Et, u()) : w
+ }, t.scale = function(n){
+ return arguments.length ? (h = +n, r()) : h
+ }, t.translate = function(n){
+ return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]
+ }, t.center = function(n){
+ return arguments.length ? (v = n[0] % 360 * La, d = n[1] % 360 * La, r()) : [v * Ta, d * Ta]
+ }, t.rotate = function(n){
+ return arguments.length ? (m = n[0] % 360 * La, y = n[1] % 360 * La, x = n.length > 2 ? n[2] % 360 * La : 0, r()) : [m * Ta, y * Ta, x * Ta]
+ }, Bo.rebind(t, f, "precision"), function(){
+ return i = n.apply(this, arguments), t.invert = i.invert && e, r()
+ }
+ }
+
+ function or(n){
+ return rr(n, function(t, e){
+ n.point(t * La, e * La)
+ })
+ }
+
+ function ar(n, t){
+ return [n, t]
+ }
+
+ function cr(n, t){
+ return [n > Ea ? n - Aa : -Ea > n ? n + Aa : n, t]
+ }
+
+ function lr(n, t, e){
+ return n ? t || e ? Ye(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr
+ }
+
+ function sr(n){
+ return function(t, e){
+ return t += n, [t > Ea ? t - Aa : -Ea > t ? t + Aa : t, e]
+ }
+ }
+
+ function fr(n){
+ var t = sr(n);
+ return t.invert = sr(-n), t
+ }
+
+ function hr(n, t){
+ function e(n, t){
+ var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * r + a * u;
+ return [Math.atan2(c * i - s * o, a * r - l * u), nt(s * i + c * o)]
+ }
+
+ var r = Math.cos(n), u = Math.sin(n), i = Math.cos(t), o = Math.sin(t);
+ return e.invert = function(n, t){
+ var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * i - c * o;
+ return [Math.atan2(c * i + l * o, a * r + s * u), nt(s * r - a * u)]
+ }, e
+ }
+
+ function gr(n, t){
+ var e = Math.cos(n), r = Math.sin(n);
+ return function(u, i, o, a){
+ var c = o * t;
+ null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * Aa)) : (u = n + o * Aa, i = n - .5 * c);
+ for (var l, s = u; o > 0 ? s > i : i > s; s -= c)a.point((l = Me([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])
+ }
+ }
+
+ function pr(n, t){
+ var e = pe(t);
+ e[0] -= n, xe(e);
+ var r = Q(-e[1]);
+ return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Na) % (2 * Math.PI)
+ }
+
+ function vr(n, t, e){
+ var r = Bo.range(n, t - Na, e).concat(t);
+ return function(n){
+ return r.map(function(t){
+ return [n, t]
+ })
+ }
+ }
+
+ function dr(n, t, e){
+ var r = Bo.range(n, t - Na, e).concat(t);
+ return function(n){
+ return r.map(function(t){
+ return [t, n]
+ })
+ }
+ }
+
+ function mr(n){
+ return n.source
+ }
+
+ function yr(n){
+ return n.target
+ }
+
+ function xr(n, t, e, r){
+ var u = Math.cos(t), i = Math.sin(t), o = Math.cos(r), a = Math.sin(r), c = u * Math.cos(n), l = u * Math.sin(n), s = o * Math.cos(e), f = o * Math.sin(e), h = 2 * Math.asin(Math.sqrt(ut(r - t) + u * o * ut(e - n))), g = 1 / Math.sin(h), p = h ? function(n){
+ var t = Math.sin(n *= h) * g, e = Math.sin(h - n) * g, r = e * c + t * s, u = e * l + t * f, o = e * i + t * a;
+ return [Math.atan2(u, r) * Ta, Math.atan2(o, Math.sqrt(r * r + u * u)) * Ta]
+ } : function(){
+ return [n * Ta, t * Ta]
+ };
+ return p.distance = h, p
+ }
+
+ function Mr(){
+ function n(n, u){
+ var i = Math.sin(u *= La), o = Math.cos(u), a = ca((n *= La) - t), c = Math.cos(a);
+ Fc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o
+ }
+
+ var t, e, r;
+ Hc.point = function(u, i){
+ t = u * La, e = Math.sin(i *= La), r = Math.cos(i), Hc.point = n
+ }, Hc.lineEnd = function(){
+ Hc.point = Hc.lineEnd = y
+ }
+ }
+
+ function _r(n, t){
+ function e(t, e){
+ var r = Math.cos(t), u = Math.cos(e), i = n(r * u);
+ return [i * u * Math.sin(t), i * Math.sin(e)]
+ }
+
+ return e.invert = function(n, e){
+ var r = Math.sqrt(n * n + e * e), u = t(r), i = Math.sin(u), o = Math.cos(u);
+ return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]
+ }, e
+ }
+
+ function br(n, t){
+ function e(n, t){
+ o > 0 ? -Ca + Na > t && (t = -Ca + Na) : t > Ca - Na && (t = Ca - Na);
+ var e = o / Math.pow(u(t), i);
+ return [e * Math.sin(i * n), o - e * Math.cos(i * n)]
+ }
+
+ var r = Math.cos(n), u = function(n){
+ return Math.tan(Ea / 4 + n / 2)
+ }, i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)), o = r * Math.pow(u(n), i) / i;
+ return i ? (e.invert = function(n, t){
+ var e = o - t, r = G(i) * Math.sqrt(n * n + e * e);
+ return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ca]
+ }, e) : Sr
+ }
+
+ function wr(n, t){
+ function e(n, t){
+ var e = i - t;
+ return [e * Math.sin(u * n), i - e * Math.cos(u * n)]
+ }
+
+ var r = Math.cos(n), u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n), i = r / u + n;
+ return ca(u) < Na ? ar : (e.invert = function(n, t){
+ var e = i - t;
+ return [Math.atan2(n, e) / u, i - G(u) * Math.sqrt(n * n + e * e)]
+ }, e)
+ }
+
+ function Sr(n, t){
+ return [n, Math.log(Math.tan(Ea / 4 + t / 2))]
+ }
+
+ function kr(n){
+ var t, e = ur(n), r = e.scale, u = e.translate, i = e.clipExtent;
+ return e.scale = function(){
+ var n = r.apply(e, arguments);
+ return n === e ? t ? e.clipExtent(null) : e : n
+ }, e.translate = function(){
+ var n = u.apply(e, arguments);
+ return n === e ? t ? e.clipExtent(null) : e : n
+ }, e.clipExtent = function(n){
+ var o = i.apply(e, arguments);
+ if (o === e) {
+ if (t = null == n) {
+ var a = Ea * r(), c = u();
+ i([[c[0] - a, c[1] - a], [c[0] + a, c[1] + a]])
+ }
+ } else t && (o = null);
+ return o
+ }, e.clipExtent(null)
+ }
+
+ function Er(n, t){
+ return [Math.log(Math.tan(Ea / 4 + t / 2)), -n]
+ }
+
+ function Ar(n){
+ return n[0]
+ }
+
+ function Cr(n){
+ return n[1]
+ }
+
+ function Nr(n){
+ for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {
+ for (; r > 1 && K(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;)--r;
+ e[r++] = u
+ }
+ return e.slice(0, r)
+ }
+
+ function zr(n, t){
+ return n[0] - t[0] || n[1] - t[1]
+ }
+
+ function Lr(n, t, e){
+ return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])
+ }
+
+ function Tr(n, t, e, r){
+ var u = n[0], i = e[0], o = t[0] - u, a = r[0] - i, c = n[1], l = e[1], s = t[1] - c, f = r[1] - l, h = (a * (c - l) - f * (u - i)) / (f * o - a * s);
+ return [u + h * o, c + h * s]
+ }
+
+ function qr(n){
+ var t = n[0], e = n[n.length - 1];
+ return !(t[0] - e[0] || t[1] - e[1])
+ }
+
+ function Rr(){
+ tu(this), this.edge = this.site = this.circle = null
+ }
+
+ function Dr(n){
+ var t = Kc.pop() || new Rr;
+ return t.site = n, t
+ }
+
+ function Pr(n){
+ Xr(n), Wc.remove(n), Kc.push(n), tu(n)
+ }
+
+ function Ur(n){
+ var t = n.circle, e = t.x, r = t.cy, u = {x: e, y: r}, i = n.P, o = n.N, a = [n];
+ Pr(n);
+ for (var c = i; c.circle && ca(e - c.circle.x) < Na && ca(r - c.circle.cy) < Na;)i = c.P, a.unshift(c), Pr(c), c = i;
+ a.unshift(c), Xr(c);
+ for (var l = o; l.circle && ca(e - l.circle.x) < Na && ca(r - l.circle.cy) < Na;)o = l.N, a.push(l), Pr(l), l = o;
+ a.push(l), Xr(l);
+ var s, f = a.length;
+ for (s = 1; f > s; ++s)l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);
+ c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)
+ }
+
+ function jr(n){
+ for (var t, e, r, u, i = n.x, o = n.y, a = Wc._; a;)if (r = Fr(a, o) - i, r > Na)a = a.L; else {
+ if (u = i - Hr(a, o), !(u > Na)) {
+ r > -Na ? (t = a.P, e = a) : u > -Na ? (t = a, e = a.N) : t = e = a;
+ break
+ }
+ if (!a.R) {
+ t = a;
+ break
+ }
+ a = a.R
+ }
+ var c = Dr(n);
+ if (Wc.insert(t, c), t || e) {
+ if (t === e)return Xr(t), e = Dr(t.site), Wc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), Vr(e), void 0;
+ if (!e)return c.edge = Jr(t.site, c.site), void 0;
+ Xr(t), Xr(e);
+ var l = t.site, s = l.x, f = l.y, h = n.x - s, g = n.y - f, p = e.site, v = p.x - s, d = p.y - f, m = 2 * (h * d - g * v), y = h * h + g * g, x = v * v + d * d, M = {
+ x: (d * y - g * x) / m + s,
+ y: (h * x - v * y) / m + f
+ };
+ Kr(e.edge, l, p, M), c.edge = Jr(l, n, null, M), e.edge = Jr(n, p, null, M), Vr(t), Vr(e)
+ }
+ }
+
+ function Fr(n, t){
+ var e = n.site, r = e.x, u = e.y, i = u - t;
+ if (!i)return r;
+ var o = n.P;
+ if (!o)return -1 / 0;
+ e = o.site;
+ var a = e.x, c = e.y, l = c - t;
+ if (!l)return a;
+ var s = a - r, f = 1 / i - 1 / l, h = s / l;
+ return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2
+ }
+
+ function Hr(n, t){
+ var e = n.N;
+ if (e)return Fr(e, t);
+ var r = n.site;
+ return r.y === t ? r.x : 1 / 0
+ }
+
+ function Or(n){
+ this.site = n, this.edges = []
+ }
+
+ function Yr(n){
+ for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Bc, d = v.length; d--;)if (i = v[d], i && i.prepare())for (a = i.edges, c = a.length, o = 0; c > o;)s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ca(r - t) > Na || ca(u - e) > Na) && (a.splice(o, 0, new Qr(Gr(i.site, s, ca(r - f) < Na && p - u > Na ? {
+ x: f,
+ y: ca(t - f) < Na ? e : p
+ } : ca(u - p) < Na && h - r > Na ? {x: ca(e - p) < Na ? t : h, y: p} : ca(r - h) < Na && u - g > Na ? {
+ x: h,
+ y: ca(t - h) < Na ? e : g
+ } : ca(u - g) < Na && r - f > Na ? {x: ca(e - g) < Na ? t : f, y: g} : null), i.site, null)), ++c)
+ }
+
+ function Ir(n, t){
+ return t.angle - n.angle
+ }
+
+ function Zr(){
+ tu(this), this.x = this.y = this.arc = this.site = this.cy = null
+ }
+
+ function Vr(n){
+ var t = n.P, e = n.N;
+ if (t && e) {
+ var r = t.site, u = n.site, i = e.site;
+ if (r !== i) {
+ var o = u.x, a = u.y, c = r.x - o, l = r.y - a, s = i.x - o, f = i.y - a, h = 2 * (c * f - l * s);
+ if (!(h >= -za)) {
+ var g = c * c + l * l, p = s * s + f * f, v = (f * g - l * p) / h, d = (c * p - s * g) / h, f = d + a, m = Qc.pop() || new Zr;
+ m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;
+ for (var y = null, x = Gc._; x;)if (m.y < x.y || m.y === x.y && m.x <= x.x) {
+ if (!x.L) {
+ y = x.P;
+ break
+ }
+ x = x.L
+ } else {
+ if (!x.R) {
+ y = x;
+ break
+ }
+ x = x.R
+ }
+ Gc.insert(y, m), y || (Jc = m)
+ }
+ }
+ }
+ }
+
+ function Xr(n){
+ var t = n.circle;
+ t && (t.P || (Jc = t.N), Gc.remove(t), Qc.push(t), tu(t), n.circle = null)
+ }
+
+ function $r(n){
+ for (var t, e = $c, r = He(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;)t = e[u], (!Br(t, n) || !r(t) || ca(t.a.x - t.b.x) < Na && ca(t.a.y - t.b.y) < Na) && (t.a = t.b = null, e.splice(u, 1))
+ }
+
+ function Br(n, t){
+ var e = n.b;
+ if (e)return !0;
+ var r, u, i = n.a, o = t[0][0], a = t[1][0], c = t[0][1], l = t[1][1], s = n.l, f = n.r, h = s.x, g = s.y, p = f.x, v = f.y, d = (h + p) / 2, m = (g + v) / 2;
+ if (v === g) {
+ if (o > d || d >= a)return;
+ if (h > p) {
+ if (i) {
+ if (i.y >= l)return
+ } else i = {x: d, y: c};
+ e = {x: d, y: l}
+ } else {
+ if (i) {
+ if (i.y < c)return
+ } else i = {x: d, y: l};
+ e = {x: d, y: c}
+ }
+ } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)if (h > p) {
+ if (i) {
+ if (i.y >= l)return
+ } else i = {x: (c - u) / r, y: c};
+ e = {x: (l - u) / r, y: l}
+ } else {
+ if (i) {
+ if (i.y < c)return
+ } else i = {x: (l - u) / r, y: l};
+ e = {x: (c - u) / r, y: c}
+ } else if (v > g) {
+ if (i) {
+ if (i.x >= a)return
+ } else i = {x: o, y: r * o + u};
+ e = {x: a, y: r * a + u}
+ } else {
+ if (i) {
+ if (i.x < o)return
+ } else i = {x: a, y: r * a + u};
+ e = {x: o, y: r * o + u}
+ }
+ return n.a = i, n.b = e, !0
+ }
+
+ function Wr(n, t){
+ this.l = n, this.r = t, this.a = this.b = null
+ }
+
+ function Jr(n, t, e, r){
+ var u = new Wr(n, t);
+ return $c.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Bc[n.i].edges.push(new Qr(u, n, t)), Bc[t.i].edges.push(new Qr(u, t, n)), u
+ }
+
+ function Gr(n, t, e){
+ var r = new Wr(n, null);
+ return r.a = t, r.b = e, $c.push(r), r
+ }
+
+ function Kr(n, t, e, r){
+ n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)
+ }
+
+ function Qr(n, t, e){
+ var r = n.a, u = n.b;
+ this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)
+ }
+
+ function nu(){
+ this._ = null
+ }
+
+ function tu(n){
+ n.U = n.C = n.L = n.R = n.P = n.N = null
+ }
+
+ function eu(n, t){
+ var e = t, r = t.R, u = e.U;
+ u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e
+ }
+
+ function ru(n, t){
+ var e = t, r = t.L, u = e.U;
+ u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e
+ }
+
+ function uu(n){
+ for (; n.L;)n = n.L;
+ return n
+ }
+
+ function iu(n, t){
+ var e, r, u, i = n.sort(ou).pop();
+ for ($c = [], Bc = new Array(n.length), Wc = new nu, Gc = new nu; ;)if (u = Jc, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Bc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop(); else {
+ if (!u)break;
+ Ur(u.arc)
+ }
+ t && ($r(t), Yr(t));
+ var o = {cells: Bc, edges: $c};
+ return Wc = Gc = $c = Bc = null, o
+ }
+
+ function ou(n, t){
+ return t.y - n.y || t.x - n.x
+ }
+
+ function au(n, t, e){
+ return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)
+ }
+
+ function cu(n){
+ return n.x
+ }
+
+ function lu(n){
+ return n.y
+ }
+
+ function su(){
+ return {leaf: !0, nodes: [], point: null, x: null, y: null}
+ }
+
+ function fu(n, t, e, r, u, i){
+ if (!n(t, e, r, u, i)) {
+ var o = .5 * (e + u), a = .5 * (r + i), c = t.nodes;
+ c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)
+ }
+ }
+
+ function hu(n, t){
+ n = Bo.rgb(n), t = Bo.rgb(t);
+ var e = n.r, r = n.g, u = n.b, i = t.r - e, o = t.g - r, a = t.b - u;
+ return function(n){
+ return "#" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))
+ }
+ }
+
+ function gu(n, t){
+ var e, r = {}, u = {};
+ for (e in n)e in t ? r[e] = du(n[e], t[e]) : u[e] = n[e];
+ for (e in t)e in n || (u[e] = t[e]);
+ return function(n){
+ for (e in r)u[e] = r[e](n);
+ return u
+ }
+ }
+
+ function pu(n, t){
+ return n = +n, t = +t, function(e){
+ return n * (1 - e) + t * e
+ }
+ }
+
+ function vu(n, t){
+ var e, r, u, i = tl.lastIndex = el.lastIndex = 0, o = -1, a = [], c = [];
+ for (n += "", t += ""; (e = tl.exec(n)) && (r = el.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({
+ i: o,
+ x: pu(e, r)
+ })), i = el.lastIndex;
+ return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n){
+ return t(n) + ""
+ }) : function(){
+ return t
+ } : (t = c.length, function(n){
+ for (var e, r = 0; t > r; ++r)a[(e = c[r]).i] = e.x(n);
+ return a.join("")
+ })
+ }
+
+ function du(n, t){
+ for (var e, r = Bo.interpolators.length; --r >= 0 && !(e = Bo.interpolators[r](n, t)););
+ return e
+ }
+
+ function mu(n, t){
+ var e, r = [], u = [], i = n.length, o = t.length, a = Math.min(n.length, t.length);
+ for (e = 0; a > e; ++e)r.push(du(n[e], t[e]));
+ for (; i > e; ++e)u[e] = n[e];
+ for (; o > e; ++e)u[e] = t[e];
+ return function(n){
+ for (e = 0; a > e; ++e)u[e] = r[e](n);
+ return u
+ }
+ }
+
+ function yu(n){
+ return function(t){
+ return 0 >= t ? 0 : t >= 1 ? 1 : n(t)
+ }
+ }
+
+ function xu(n){
+ return function(t){
+ return 1 - n(1 - t)
+ }
+ }
+
+ function Mu(n){
+ return function(t){
+ return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))
+ }
+ }
+
+ function _u(n){
+ return n * n
+ }
+
+ function bu(n){
+ return n * n * n
+ }
+
+ function wu(n){
+ if (0 >= n)return 0;
+ if (n >= 1)return 1;
+ var t = n * n, e = t * n;
+ return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)
+ }
+
+ function Su(n){
+ return function(t){
+ return Math.pow(t, n)
+ }
+ }
+
+ function ku(n){
+ return 1 - Math.cos(n * Ca)
+ }
+
+ function Eu(n){
+ return Math.pow(2, 10 * (n - 1))
+ }
+
+ function Au(n){
+ return 1 - Math.sqrt(1 - n * n)
+ }
+
+ function Cu(n, t){
+ var e;
+ return arguments.length < 2 && (t = .45), arguments.length ? e = t / Aa * Math.asin(1 / n) : (n = 1, e = t / 4), function(r){
+ return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * Aa / t)
+ }
+ }
+
+ function Nu(n){
+ return n || (n = 1.70158), function(t){
+ return t * t * ((n + 1) * t - n)
+ }
+ }
+
+ function zu(n){
+ return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375
+ }
+
+ function Lu(n, t){
+ n = Bo.hcl(n), t = Bo.hcl(t);
+ var e = n.h, r = n.c, u = n.l, i = t.h - e, o = t.c - r, a = t.l - u;
+ return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function(n){
+ return lt(e + i * n, r + o * n, u + a * n) + ""
+ }
+ }
+
+ function Tu(n, t){
+ n = Bo.hsl(n), t = Bo.hsl(t);
+ var e = n.h, r = n.s, u = n.l, i = t.h - e, o = t.s - r, a = t.l - u;
+ return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function(n){
+ return at(e + i * n, r + o * n, u + a * n) + ""
+ }
+ }
+
+ function qu(n, t){
+ n = Bo.lab(n), t = Bo.lab(t);
+ var e = n.l, r = n.a, u = n.b, i = t.l - e, o = t.a - r, a = t.b - u;
+ return function(n){
+ return ft(e + i * n, r + o * n, u + a * n) + ""
+ }
+ }
+
+ function Ru(n, t){
+ return t -= n, function(e){
+ return Math.round(n + t * e)
+ }
+ }
+
+ function Du(n){
+ var t = [n.a, n.b], e = [n.c, n.d], r = Uu(t), u = Pu(t, e), i = Uu(ju(e, t, -u)) || 0;
+ t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Ta, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Ta : 0
+ }
+
+ function Pu(n, t){
+ return n[0] * t[0] + n[1] * t[1]
+ }
+
+ function Uu(n){
+ var t = Math.sqrt(Pu(n, n));
+ return t && (n[0] /= t, n[1] /= t), t
+ }
+
+ function ju(n, t, e){
+ return n[0] += e * t[0], n[1] += e * t[1], n
+ }
+
+ function Fu(n, t){
+ var e, r = [], u = [], i = Bo.transform(n), o = Bo.transform(t), a = i.translate, c = o.translate, l = i.rotate, s = o.rotate, f = i.skew, h = o.skew, g = i.scale, p = o.scale;
+ return a[0] != c[0] || a[1] != c[1] ? (r.push("translate(", null, ",", null, ")"), u.push({
+ i: 1,
+ x: pu(a[0], c[0])
+ }, {
+ i: 3,
+ x: pu(a[1], c[1])
+ })) : c[0] || c[1] ? r.push("translate(" + c + ")") : r.push(""), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({
+ i: r.push(r.pop() + "rotate(", null, ")") - 2,
+ x: pu(l, s)
+ })) : s && r.push(r.pop() + "rotate(" + s + ")"), f != h ? u.push({
+ i: r.push(r.pop() + "skewX(", null, ")") - 2,
+ x: pu(f, h)
+ }) : h && r.push(r.pop() + "skewX(" + h + ")"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + "scale(", null, ",", null, ")"), u.push({
+ i: e - 4,
+ x: pu(g[0], p[0])
+ }, {
+ i: e - 2,
+ x: pu(g[1], p[1])
+ })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + "scale(" + p + ")"), e = u.length, function(n){
+ for (var t, i = -1; ++i < e;)r[(t = u[i]).i] = t.x(n);
+ return r.join("")
+ }
+ }
+
+ function Hu(n, t){
+ return t = (t -= n = +n) || 1 / t, function(e){
+ return (e - n) / t
+ }
+ }
+
+ function Ou(n, t){
+ return t = (t -= n = +n) || 1 / t, function(e){
+ return Math.max(0, Math.min(1, (e - n) / t))
+ }
+ }
+
+ function Yu(n){
+ for (var t = n.source, e = n.target, r = Zu(t, e), u = [t]; t !== r;)t = t.parent, u.push(t);
+ for (var i = u.length; e !== r;)u.splice(i, 0, e), e = e.parent;
+ return u
+ }
+
+ function Iu(n){
+ for (var t = [], e = n.parent; null != e;)t.push(n), n = e, e = e.parent;
+ return t.push(n), t
+ }
+
+ function Zu(n, t){
+ if (n === t)return n;
+ for (var e = Iu(n), r = Iu(t), u = e.pop(), i = r.pop(), o = null; u === i;)o = u, u = e.pop(), i = r.pop();
+ return o
+ }
+
+ function Vu(n){
+ n.fixed |= 2
+ }
+
+ function Xu(n){
+ n.fixed &= -7
+ }
+
+ function $u(n){
+ n.fixed |= 4, n.px = n.x, n.py = n.y
+ }
+
+ function Bu(n){
+ n.fixed &= -5
+ }
+
+ function Wu(n, t, e){
+ var r = 0, u = 0;
+ if (n.charge = 0, !n.leaf)for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;)i = o[c], null != i && (Wu(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);
+ if (n.point) {
+ n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);
+ var l = t * e[n.point.index];
+ n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y
+ }
+ n.cx = r / n.charge, n.cy = u / n.charge
+ }
+
+ function Ju(n, t){
+ return Bo.rebind(n, t, "sort", "children", "value"), n.nodes = n, n.links = ei, n
+ }
+
+ function Gu(n, t){
+ for (var e = [n]; null != (n = e.pop());)if (t(n), (u = n.children) && (r = u.length))for (var r, u; --r >= 0;)e.push(u[r])
+ }
+
+ function Ku(n, t){
+ for (var e = [n], r = []; null != (n = e.pop());)if (r.push(n), (i = n.children) && (u = i.length))for (var u, i, o = -1; ++o < u;)e.push(i[o]);
+ for (; null != (n = r.pop());)t(n)
+ }
+
+ function Qu(n){
+ return n.children
+ }
+
+ function ni(n){
+ return n.value
+ }
+
+ function ti(n, t){
+ return t.value - n.value
+ }
+
+ function ei(n){
+ return Bo.merge(n.map(function(n){
+ return (n.children || []).map(function(t){
+ return {source: n, target: t}
+ })
+ }))
+ }
+
+ function ri(n){
+ return n.x
+ }
+
+ function ui(n){
+ return n.y
+ }
+
+ function ii(n, t, e){
+ n.y0 = t, n.y = e
+ }
+
+ function oi(n){
+ return Bo.range(n.length)
+ }
+
+ function ai(n){
+ for (var t = -1, e = n[0].length, r = []; ++t < e;)r[t] = 0;
+ return r
+ }
+
+ function ci(n){
+ for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);
+ return r
+ }
+
+ function li(n){
+ return n.reduce(si, 0)
+ }
+
+ function si(n, t){
+ return n + t[1]
+ }
+
+ function fi(n, t){
+ return hi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))
+ }
+
+ function hi(n, t){
+ for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;)i[e] = u * e + r;
+ return i
+ }
+
+ function gi(n){
+ return [Bo.min(n), Bo.max(n)]
+ }
+
+ function pi(n, t){
+ return n.value - t.value
+ }
+
+ function vi(n, t){
+ var e = n._pack_next;
+ n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t
+ }
+
+ function di(n, t){
+ n._pack_next = t, t._pack_prev = n
+ }
+
+ function mi(n, t){
+ var e = t.x - n.x, r = t.y - n.y, u = n.r + t.r;
+ return .999 * u * u > e * e + r * r
+ }
+
+ function yi(n){
+ function t(n){
+ s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)
+ }
+
+ if ((e = n.children) && (l = e.length)) {
+ var e, r, u, i, o, a, c, l, s = 1 / 0, f = -1 / 0, h = 1 / 0, g = -1 / 0;
+ if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))for (i = e[2], bi(r, u, i), t(i), vi(r, i), r._pack_prev = i, vi(i, u), u = r._pack_next, o = 3; l > o; o++) {
+ bi(r, u, i = e[o]);
+ var p = 0, v = 1, d = 1;
+ for (a = u._pack_next; a !== u; a = a._pack_next, v++)if (mi(a, i)) {
+ p = 1;
+ break
+ }
+ if (1 == p)for (c = r._pack_prev; c !== a._pack_prev && !mi(c, i); c = c._pack_prev, d++);
+ p ? (d > v || v == d && u.r < r.r ? di(r, u = a) : di(r = c, u), o--) : (vi(r, i), u = i, t(i))
+ }
+ var m = (s + f) / 2, y = (h + g) / 2, x = 0;
+ for (o = 0; l > o; o++)i = e[o], i.x -= m, i.y -= y, x = Math.max(x, i.r + Math.sqrt(i.x * i.x + i.y * i.y));
+ n.r = x, e.forEach(Mi)
+ }
+ }
+
+ function xi(n){
+ n._pack_next = n._pack_prev = n
+ }
+
+ function Mi(n){
+ delete n._pack_next, delete n._pack_prev
+ }
+
+ function _i(n, t, e, r){
+ var u = n.children;
+ if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)for (var i = -1, o = u.length; ++i < o;)_i(u[i], t, e, r)
+ }
+
+ function bi(n, t, e){
+ var r = n.r + e.r, u = t.x - n.x, i = t.y - n.y;
+ if (r && (u || i)) {
+ var o = t.r + e.r, a = u * u + i * i;
+ o *= o, r *= r;
+ var c = .5 + (r - o) / (2 * a), l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);
+ e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u
+ } else e.x = n.x + r, e.y = n.y
+ }
+
+ function wi(n, t){
+ return n.parent == t.parent ? 1 : 2
+ }
+
+ function Si(n){
+ var t = n.children;
+ return t.length ? t[0] : n.t
+ }
+
+ function ki(n){
+ var t, e = n.children;
+ return (t = e.length) ? e[t - 1] : n.t
+ }
+
+ function Ei(n, t, e){
+ var r = e / (t.i - n.i);
+ t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e
+ }
+
+ function Ai(n){
+ for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;)t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)
+ }
+
+ function Ci(n, t, e){
+ return n.a.parent === t.parent ? n.a : e
+ }
+
+ function Ni(n){
+ return 1 + Bo.max(n, function(n){
+ return n.y
+ })
+ }
+
+ function zi(n){
+ return n.reduce(function(n, t){
+ return n + t.x
+ }, 0) / n.length
+ }
+
+ function Li(n){
+ var t = n.children;
+ return t && t.length ? Li(t[0]) : n
+ }
+
+ function Ti(n){
+ var t, e = n.children;
+ return e && (t = e.length) ? Ti(e[t - 1]) : n
+ }
+
+ function qi(n){
+ return {x: n.x, y: n.y, dx: n.dx, dy: n.dy}
+ }
+
+ function Ri(n, t){
+ var e = n.x + t[3], r = n.y + t[0], u = n.dx - t[1] - t[3], i = n.dy - t[0] - t[2];
+ return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {x: e, y: r, dx: u, dy: i}
+ }
+
+ function Di(n){
+ var t = n[0], e = n[n.length - 1];
+ return e > t ? [t, e] : [e, t]
+ }
+
+ function Pi(n){
+ return n.rangeExtent ? n.rangeExtent() : Di(n.range())
+ }
+
+ function Ui(n, t, e, r){
+ var u = e(n[0], n[1]), i = r(t[0], t[1]);
+ return function(n){
+ return i(u(n))
+ }
+ }
+
+ function ji(n, t){
+ var e, r = 0, u = n.length - 1, i = n[r], o = n[u];
+ return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n
+ }
+
+ function Fi(n){
+ return n ? {
+ floor : function(t){
+ return Math.floor(t / n) * n
+ }, ceil: function(t){
+ return Math.ceil(t / n) * n
+ }
+ } : gl
+ }
+
+ function Hi(n, t, e, r){
+ var u = [], i = [], o = 0, a = Math.min(n.length, t.length) - 1;
+ for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;)u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));
+ return function(t){
+ var e = Bo.bisect(n, t, 1, a) - 1;
+ return i[e](u[e](t))
+ }
+ }
+
+ function Oi(n, t, e, r){
+ function u(){
+ var u = Math.min(n.length, t.length) > 2 ? Hi : Ui, c = r ? Ou : Hu;
+ return o = u(n, t, c, e), a = u(t, n, c, du), i
+ }
+
+ function i(n){
+ return o(n)
+ }
+
+ var o, a;
+ return i.invert = function(n){
+ return a(n)
+ }, i.domain = function(t){
+ return arguments.length ? (n = t.map(Number), u()) : n
+ }, i.range = function(n){
+ return arguments.length ? (t = n, u()) : t
+ }, i.rangeRound = function(n){
+ return i.range(n).interpolate(Ru)
+ }, i.clamp = function(n){
+ return arguments.length ? (r = n, u()) : r
+ }, i.interpolate = function(n){
+ return arguments.length ? (e = n, u()) : e
+ }, i.ticks = function(t){
+ return Vi(n, t)
+ }, i.tickFormat = function(t, e){
+ return Xi(n, t, e)
+ }, i.nice = function(t){
+ return Ii(n, t), u()
+ }, i.copy = function(){
+ return Oi(n, t, e, r)
+ }, u()
+ }
+
+ function Yi(n, t){
+ return Bo.rebind(n, t, "range", "rangeRound", "interpolate", "clamp")
+ }
+
+ function Ii(n, t){
+ return ji(n, Fi(Zi(n, t)[2]))
+ }
+
+ function Zi(n, t){
+ null == t && (t = 10);
+ var e = Di(n), r = e[1] - e[0], u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)), i = t / r * u;
+ return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e
+ }
+
+ function Vi(n, t){
+ return Bo.range.apply(Bo, Zi(n, t))
+ }
+
+ function Xi(n, t, e){
+ var r = Zi(n, t);
+ if (e) {
+ var u = tc.exec(e);
+ if (u.shift(), "s" === u[8]) {
+ var i = Bo.formatPrefix(Math.max(ca(r[0]), ca(r[1])));
+ return u[7] || (u[7] = "." + $i(i.scale(r[2]))), u[8] = "f", e = Bo.format(u.join("")), function(n){
+ return e(i.scale(n)) + i.symbol
+ }
+ }
+ u[7] || (u[7] = "." + Bi(u[8], r)), e = u.join("")
+ } else e = ",." + $i(r[2]) + "f";
+ return Bo.format(e)
+ }
+
+ function $i(n){
+ return -Math.floor(Math.log(n) / Math.LN10 + .01)
+ }
+
+ function Bi(n, t){
+ var e = $i(t[2]);
+ return n in pl ? Math.abs(e - $i(Math.max(ca(t[0]), ca(t[1])))) + +("e" !== n) : e - 2 * ("%" === n)
+ }
+
+ function Wi(n, t, e, r){
+ function u(n){
+ return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)
+ }
+
+ function i(n){
+ return e ? Math.pow(t, n) : -Math.pow(t, -n)
+ }
+
+ function o(t){
+ return n(u(t))
+ }
+
+ return o.invert = function(t){
+ return i(n.invert(t))
+ }, o.domain = function(t){
+ return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r
+ }, o.base = function(e){
+ return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t
+ }, o.nice = function(){
+ var t = ji(r.map(u), e ? Math : dl);
+ return n.domain(t), r = t.map(i), o
+ }, o.ticks = function(){
+ var n = Di(r), o = [], a = n[0], c = n[1], l = Math.floor(u(a)), s = Math.ceil(u(c)), f = t % 1 ? 2 : t;
+ if (isFinite(s - l)) {
+ if (e) {
+ for (; s > l; l++)for (var h = 1; f > h; h++)o.push(i(l) * h);
+ o.push(i(l))
+ } else for (o.push(i(l)); l++ < s;)for (var h = f - 1; h > 0; h--)o.push(i(l) * h);
+ for (l = 0; o[l] < a; l++);
+ for (s = o.length; o[s - 1] > c; s--);
+ o = o.slice(l, s)
+ }
+ return o
+ }, o.tickFormat = function(n, t){
+ if (!arguments.length)return vl;
+ arguments.length < 2 ? t = vl : "function" != typeof t && (t = Bo.format(t));
+ var r, a = Math.max(.1, n / o.ticks().length), c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);
+ return function(n){
+ return n / i(c(u(n) + r)) <= a ? t(n) : ""
+ }
+ }, o.copy = function(){
+ return Wi(n.copy(), t, e, r)
+ }, Yi(o, n)
+ }
+
+ function Ji(n, t, e){
+ function r(t){
+ return n(u(t))
+ }
+
+ var u = Gi(t), i = Gi(1 / t);
+ return r.invert = function(t){
+ return i(n.invert(t))
+ }, r.domain = function(t){
+ return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e
+ }, r.ticks = function(n){
+ return Vi(e, n)
+ }, r.tickFormat = function(n, t){
+ return Xi(e, n, t)
+ }, r.nice = function(n){
+ return r.domain(Ii(e, n))
+ }, r.exponent = function(o){
+ return arguments.length ? (u = Gi(t = o), i = Gi(1 / t), n.domain(e.map(u)), r) : t
+ }, r.copy = function(){
+ return Ji(n.copy(), t, e)
+ }, Yi(r, n)
+ }
+
+ function Gi(n){
+ return function(t){
+ return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)
+ }
+ }
+
+ function Ki(n, t){
+ function e(e){
+ return i[((u.get(e) || ("range" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]
+ }
+
+ function r(t, e){
+ return Bo.range(n.length).map(function(n){
+ return t + e * n
+ })
+ }
+
+ var u, i, o;
+ return e.domain = function(r){
+ if (!arguments.length)return n;
+ n = [], u = new a;
+ for (var i, o = -1, c = r.length; ++o < c;)u.has(i = r[o]) || u.set(i, n.push(i));
+ return e[t.t].apply(e, t.a)
+ }, e.range = function(n){
+ return arguments.length ? (i = n, o = 0, t = {t: "range", a: arguments}, e) : i
+ }, e.rangePoints = function(u, a){
+ arguments.length < 2 && (a = 0);
+ var c = u[0], l = u[1], s = (l - c) / (Math.max(1, n.length - 1) + a);
+ return i = r(n.length < 2 ? (c + l) / 2 : c + s * a / 2, s), o = 0, t = {t: "rangePoints", a: arguments}, e
+ }, e.rangeBands = function(u, a, c){
+ arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);
+ var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = (f - s) / (n.length - a + 2 * c);
+ return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {t: "rangeBands", a: arguments}, e
+ }, e.rangeRoundBands = function(u, a, c){
+ arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);
+ var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = Math.floor((f - s) / (n.length - a + 2 * c)), g = f - s - (n.length - a) * h;
+ return i = r(s + Math.round(g / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {
+ t: "rangeRoundBands",
+ a: arguments
+ }, e
+ }, e.rangeBand = function(){
+ return o
+ }, e.rangeExtent = function(){
+ return Di(t.a[0])
+ }, e.copy = function(){
+ return Ki(n, t)
+ }, e.domain(n)
+ }
+
+ function Qi(r, u){
+ function i(){
+ var n = 0, t = u.length;
+ for (a = []; ++n < t;)a[n - 1] = Bo.quantile(r, n / t);
+ return o
+ }
+
+ function o(n){
+ return isNaN(n = +n) ? void 0 : u[Bo.bisect(a, n)]
+ }
+
+ var a;
+ return o.domain = function(u){
+ return arguments.length ? (r = u.map(t).filter(e).sort(n), i()) : r
+ }, o.range = function(n){
+ return arguments.length ? (u = n, i()) : u
+ }, o.quantiles = function(){
+ return a
+ }, o.invertExtent = function(n){
+ return n = u.indexOf(n), 0 > n ? [0 / 0, 0 / 0] : [n > 0 ? a[n - 1] : r[0], n < a.length ? a[n] : r[r.length - 1]]
+ }, o.copy = function(){
+ return Qi(r, u)
+ }, i()
+ }
+
+ function no(n, t, e){
+ function r(t){
+ return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]
+ }
+
+ function u(){
+ return i = e.length / (t - n), o = e.length - 1, r
+ }
+
+ var i, o;
+ return r.domain = function(e){
+ return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]
+ }, r.range = function(n){
+ return arguments.length ? (e = n, u()) : e
+ }, r.invertExtent = function(t){
+ return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]
+ }, r.copy = function(){
+ return no(n, t, e)
+ }, u()
+ }
+
+ function to(n, t){
+ function e(e){
+ return e >= e ? t[Bo.bisect(n, e)] : void 0
+ }
+
+ return e.domain = function(t){
+ return arguments.length ? (n = t, e) : n
+ }, e.range = function(n){
+ return arguments.length ? (t = n, e) : t
+ }, e.invertExtent = function(e){
+ return e = t.indexOf(e), [n[e - 1], n[e]]
+ }, e.copy = function(){
+ return to(n, t)
+ }, e
+ }
+
+ function eo(n){
+ function t(n){
+ return +n
+ }
+
+ return t.invert = t, t.domain = t.range = function(e){
+ return arguments.length ? (n = e.map(t), t) : n
+ }, t.ticks = function(t){
+ return Vi(n, t)
+ }, t.tickFormat = function(t, e){
+ return Xi(n, t, e)
+ }, t.copy = function(){
+ return eo(n)
+ }, t
+ }
+
+ function ro(n){
+ return n.innerRadius
+ }
+
+ function uo(n){
+ return n.outerRadius
+ }
+
+ function io(n){
+ return n.startAngle
+ }
+
+ function oo(n){
+ return n.endAngle
+ }
+
+ function ao(n){
+ function t(t){
+ function o(){
+ l.push("M", i(n(s), a))
+ }
+
+ for (var c, l = [], s = [], f = -1, h = t.length, g = kt(e), p = kt(r); ++f < h;)u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);
+ return s.length && o(), l.length ? l.join("") : null
+ }
+
+ var e = Ar, r = Cr, u = Ae, i = co, o = i.key, a = .7;
+ return t.x = function(n){
+ return arguments.length ? (e = n, t) : e
+ }, t.y = function(n){
+ return arguments.length ? (r = n, t) : r
+ }, t.defined = function(n){
+ return arguments.length ? (u = n, t) : u
+ }, t.interpolate = function(n){
+ return arguments.length ? (o = "function" == typeof n ? i = n : (i = wl.get(n) || co).key, t) : o
+ }, t.tension = function(n){
+ return arguments.length ? (a = n, t) : a
+ }, t
+ }
+
+ function co(n){
+ return n.join("L")
+ }
+
+ function lo(n){
+ return co(n) + "Z"
+ }
+
+ function so(n){
+ for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e;)u.push("H", (r[0] + (r = n[t])[0]) / 2, "V", r[1]);
+ return e > 1 && u.push("H", r[0]), u.join("")
+ }
+
+ function fo(n){
+ for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e;)u.push("V", (r = n[t])[1], "H", r[0]);
+ return u.join("")
+ }
+
+ function ho(n){
+ for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e;)u.push("H", (r = n[t])[0], "V", r[1]);
+ return u.join("")
+ }
+
+ function go(n, t){
+ return n.length < 4 ? co(n) : n[1] + mo(n.slice(1, n.length - 1), yo(n, t))
+ }
+
+ function po(n, t){
+ return n.length < 3 ? co(n) : n[0] + mo((n.push(n[0]), n), yo([n[n.length - 2]].concat(n, [n[1]]), t))
+ }
+
+ function vo(n, t){
+ return n.length < 3 ? co(n) : n[0] + mo(n, yo(n, t))
+ }
+
+ function mo(n, t){
+ if (t.length < 1 || n.length != t.length && n.length != t.length + 2)return co(n);
+ var e = n.length != t.length, r = "", u = n[0], i = n[1], o = t[0], a = o, c = 1;
+ if (e && (r += "Q" + (i[0] - 2 * o[0] / 3) + "," + (i[1] - 2 * o[1] / 3) + "," + i[0] + "," + i[1], u = n[1], c = 2), t.length > 1) {
+ a = t[1], i = n[c], c++, r += "C" + (u[0] + o[0]) + "," + (u[1] + o[1]) + "," + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1];
+ for (var l = 2; l < t.length; l++, c++)i = n[c], a = t[l], r += "S" + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1]
+ }
+ if (e) {
+ var s = n[c];
+ r += "Q" + (i[0] + 2 * a[0] / 3) + "," + (i[1] + 2 * a[1] / 3) + "," + s[0] + "," + s[1]
+ }
+ return r
+ }
+
+ function yo(n, t){
+ for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;)e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);
+ return r
+ }
+
+ function xo(n){
+ if (n.length < 3)return co(n);
+ var t = 1, e = n.length, r = n[0], u = r[0], i = r[1], o = [u, u, u, (r = n[1])[0]], a = [i, i, i, r[1]], c = [u, ",", i, "L", wo(El, o), ",", wo(El, a)];
+ for (n.push(n[e - 1]); ++t <= e;)r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), So(c, o, a);
+ return n.pop(), c.push("L", r), c.join("")
+ }
+
+ function Mo(n){
+ if (n.length < 4)return co(n);
+ for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;)t = n[r], i.push(t[0]), o.push(t[1]);
+ for (e.push(wo(El, i) + "," + wo(El, o)), --r; ++r < u;)t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), So(e, i, o);
+ return e.join("")
+ }
+
+ function _o(n){
+ for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;)e = n[r % u], o.push(e[0]), a.push(e[1]);
+ for (t = [wo(El, o), ",", wo(El, a)], --r; ++r < i;)e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), So(t, o, a);
+ return t.join("")
+ }
+
+ function bo(n, t){
+ var e = n.length - 1;
+ if (e)for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;)r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);
+ return xo(n)
+ }
+
+ function wo(n, t){
+ return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]
+ }
+
+ function So(n, t, e){
+ n.push("C", wo(Sl, t), ",", wo(Sl, e), ",", wo(kl, t), ",", wo(kl, e), ",", wo(El, t), ",", wo(El, e))
+ }
+
+ function ko(n, t){
+ return (t[1] - n[1]) / (t[0] - n[0])
+ }
+
+ function Eo(n){
+ for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = ko(u, i); ++t < e;)r[t] = (o + (o = ko(u = i, i = n[t + 1]))) / 2;
+ return r[t] = o, r
+ }
+
+ function Ao(n){
+ for (var t, e, r, u, i = [], o = Eo(n), a = -1, c = n.length - 1; ++a < c;)t = ko(n[a], n[a + 1]), ca(t) < Na ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));
+ for (a = -1; ++a <= c;)u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);
+ return i
+ }
+
+ function Co(n){
+ return n.length < 3 ? co(n) : n[0] + mo(n, Ao(n))
+ }
+
+ function No(n){
+ for (var t, e, r, u = -1, i = n.length; ++u < i;)t = n[u], e = t[0], r = t[1] + _l, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);
+ return n
+ }
+
+ function zo(n){
+ function t(t){
+ function c(){
+ v.push("M", a(n(m), f), s, l(n(d.reverse()), f), "Z")
+ }
+
+ for (var h, g, p, v = [], d = [], m = [], y = -1, x = t.length, M = kt(e), _ = kt(u), b = e === r ? function(){
+ return g
+ } : kt(r), w = u === i ? function(){
+ return p
+ } : kt(i); ++y < x;)o.call(this, h = t[y], y) ? (d.push([g = +M.call(this, h, y), p = +_.call(this, h, y)]), m.push([+b.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);
+ return d.length && c(), v.length ? v.join("") : null
+ }
+
+ var e = Ar, r = Ar, u = 0, i = Cr, o = Ae, a = co, c = a.key, l = a, s = "L", f = .7;
+ return t.x = function(n){
+ return arguments.length ? (e = r = n, t) : r
+ }, t.x0 = function(n){
+ return arguments.length ? (e = n, t) : e
+ }, t.x1 = function(n){
+ return arguments.length ? (r = n, t) : r
+ }, t.y = function(n){
+ return arguments.length ? (u = i = n, t) : i
+ }, t.y0 = function(n){
+ return arguments.length ? (u = n, t) : u
+ }, t.y1 = function(n){
+ return arguments.length ? (i = n, t) : i
+ }, t.defined = function(n){
+ return arguments.length ? (o = n, t) : o
+ }, t.interpolate = function(n){
+ return arguments.length ? (c = "function" == typeof n ? a = n : (a = wl.get(n) || co).key, l = a.reverse || a, s = a.closed ? "M" : "L", t) : c
+ }, t.tension = function(n){
+ return arguments.length ? (f = n, t) : f
+ }, t
+ }
+
+ function Lo(n){
+ return n.radius
+ }
+
+ function To(n){
+ return [n.x, n.y]
+ }
+
+ function qo(n){
+ return function(){
+ var t = n.apply(this, arguments), e = t[0], r = t[1] + _l;
+ return [e * Math.cos(r), e * Math.sin(r)]
+ }
+ }
+
+ function Ro(){
+ return 64
+ }
+
+ function Do(){
+ return "circle"
+ }
+
+ function Po(n){
+ var t = Math.sqrt(n / Ea);
+ return "M0," + t + "A" + t + "," + t + " 0 1,1 0," + -t + "A" + t + "," + t + " 0 1,1 0," + t + "Z"
+ }
+
+ function Uo(n, t){
+ return ga(n, Tl), n.id = t, n
+ }
+
+ function jo(n, t, e, r){
+ var u = n.id;
+ return F(n, "function" == typeof e ? function(n, i, o){
+ n.__transition__[u].tween.set(t, r(e.call(n, n.__data__, i, o)))
+ } : (e = r(e), function(n){
+ n.__transition__[u].tween.set(t, e)
+ }))
+ }
+
+ function Fo(n){
+ return null == n && (n = ""), function(){
+ this.textContent = n
+ }
+ }
+
+ function Ho(n, t, e, r){
+ var u = n.__transition__ || (n.__transition__ = {active: 0, count: 0}), i = u[e];
+ if (!i) {
+ var o = r.time;
+ i = u[e] = {
+ tween : new a,
+ time : o,
+ ease : r.ease,
+ delay : r.delay,
+ duration: r.duration
+ }, ++u.count, Bo.timer(function(r){
+ function a(r){
+ return u.active > e ? l() : (u.active = e, i.event && i.event.start.call(n, s, t), i.tween.forEach(function(e, r){
+ (r = r.call(n, s, t)) && v.push(r)
+ }), Bo.timer(function(){
+ return p.c = c(r || 1) ? Ae : c, 1
+ }, 0, o), void 0)
+ }
+
+ function c(r){
+ if (u.active !== e)return l();
+ for (var o = r / g, a = f(o), c = v.length; c > 0;)v[--c].call(n, a);
+ return o >= 1 ? (i.event && i.event.end.call(n, s, t), l()) : void 0
+ }
+
+ function l(){
+ return --u.count ? delete u[e] : delete n.__transition__, 1
+ }
+
+ var s = n.__data__, f = i.ease, h = i.delay, g = i.duration, p = Ka, v = [];
+ return p.t = h + o, r >= h ? a(r - h) : (p.c = a, void 0)
+ }, 0, o)
+ }
+ }
+
+ function Oo(n, t, e){
+ n.attr("transform", function(n){
+ var r = t(n);
+ return "translate(" + (isFinite(r) ? r : e(n)) + ",0)"
+ })
+ }
+
+ function Yo(n, t, e){
+ n.attr("transform", function(n){
+ var r = t(n);
+ return "translate(0," + (isFinite(r) ? r : e(n)) + ")"
+ })
+ }
+
+ function Io(n){
+ return n.toISOString()
+ }
+
+ function Zo(n, t, e){
+ function r(t){
+ return n(t)
+ }
+
+ function u(n, e){
+ var r = n[1] - n[0], u = r / e, i = Bo.bisect(Ol, u);
+ return i == Ol.length ? [t.year, Zi(n.map(function(n){
+ return n / 31536e6
+ }), e)[2]] : i ? t[u / Ol[i - 1] < Ol[i] / u ? i - 1 : i] : [Zl, Zi(n, e)[2]]
+ }
+
+ return r.invert = function(t){
+ return Vo(n.invert(t))
+ }, r.domain = function(t){
+ return arguments.length ? (n.domain(t), r) : n.domain().map(Vo)
+ }, r.nice = function(n, t){
+ function e(e){
+ return !isNaN(e) && !n.range(e, Vo(+e + 1), t).length
+ }
+
+ var i = r.domain(), o = Di(i), a = null == n ? u(o, 10) : "number" == typeof n && u(o, n);
+ return a && (n = a[0], t = a[1]), r.domain(ji(i, t > 1 ? {
+ floor : function(t){
+ for (; e(t = n.floor(t));)t = Vo(t - 1);
+ return t
+ }, ceil: function(t){
+ for (; e(t = n.ceil(t));)t = Vo(+t + 1);
+ return t
+ }
+ } : n))
+ }, r.ticks = function(n, t){
+ var e = Di(r.domain()), i = null == n ? u(e, 10) : "number" == typeof n ? u(e, n) : !n.range && [{range: n}, t];
+ return i && (n = i[0], t = i[1]), n.range(e[0], Vo(+e[1] + 1), 1 > t ? 1 : t)
+ }, r.tickFormat = function(){
+ return e
+ }, r.copy = function(){
+ return Zo(n.copy(), t, e)
+ }, Yi(r, n)
+ }
+
+ function Vo(n){
+ return new Date(n)
+ }
+
+ function Xo(n){
+ return JSON.parse(n.responseText)
+ }
+
+ function $o(n){
+ var t = Go.createRange();
+ return t.selectNode(Go.body), t.createContextualFragment(n.responseText)
+ }
+
+ var Bo = {version: "3.4.13"};
+ Date.now || (Date.now = function(){
+ return +new Date
+ });
+ var Wo = [].slice, Jo = function(n){
+ return Wo.call(n)
+ }, Go = document, Ko = Go.documentElement, Qo = window;
+ try {
+ Jo(Ko.childNodes)[0].nodeType
+ } catch (na) {
+ Jo = function(n){
+ for (var t = n.length, e = new Array(t); t--;)e[t] = n[t];
+ return e
+ }
+ }
+ try {
+ Go.createElement("div").style.setProperty("opacity", 0, "")
+ } catch (ta) {
+ var ea = Qo.Element.prototype, ra = ea.setAttribute, ua = ea.setAttributeNS, ia = Qo.CSSStyleDeclaration.prototype, oa = ia.setProperty;
+ ea.setAttribute = function(n, t){
+ ra.call(this, n, t + "")
+ }, ea.setAttributeNS = function(n, t, e){
+ ua.call(this, n, t, e + "")
+ }, ia.setProperty = function(n, t, e){
+ oa.call(this, n, t + "", e)
+ }
+ }
+ Bo.ascending = n, Bo.descending = function(n, t){
+ return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0
+ }, Bo.min = function(n, t){
+ var e, r, u = -1, i = n.length;
+ if (1 === arguments.length) {
+ for (; ++u < i && !(null != (e = n[u]) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = n[u]) && e > r && (e = r)
+ } else {
+ for (; ++u < i && !(null != (e = t.call(n, n[u], u)) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = t.call(n, n[u], u)) && e > r && (e = r)
+ }
+ return e
+ }, Bo.max = function(n, t){
+ var e, r, u = -1, i = n.length;
+ if (1 === arguments.length) {
+ for (; ++u < i && !(null != (e = n[u]) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = n[u]) && r > e && (e = r)
+ } else {
+ for (; ++u < i && !(null != (e = t.call(n, n[u], u)) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = t.call(n, n[u], u)) && r > e && (e = r)
+ }
+ return e
+ }, Bo.extent = function(n, t){
+ var e, r, u, i = -1, o = n.length;
+ if (1 === arguments.length) {
+ for (; ++i < o && !(null != (e = u = n[i]) && e >= e);)e = u = void 0;
+ for (; ++i < o;)null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))
+ } else {
+ for (; ++i < o && !(null != (e = u = t.call(n, n[i], i)) && e >= e);)e = void 0;
+ for (; ++i < o;)null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))
+ }
+ return [e, u]
+ }, Bo.sum = function(n, t){
+ var r, u = 0, i = n.length, o = -1;
+ if (1 === arguments.length)for (; ++o < i;)e(r = +n[o]) && (u += r); else for (; ++o < i;)e(r = +t.call(n, n[o], o)) && (u += r);
+ return u
+ }, Bo.mean = function(n, r){
+ var u, i = 0, o = n.length, a = -1, c = o;
+ if (1 === arguments.length)for (; ++a < o;)e(u = t(n[a])) ? i += u : --c; else for (; ++a < o;)e(u = t(r.call(n, n[a], a))) ? i += u : --c;
+ return c ? i / c : void 0
+ }, Bo.quantile = function(n, t){
+ var e = (n.length - 1) * t + 1, r = Math.floor(e), u = +n[r - 1], i = e - r;
+ return i ? u + i * (n[r] - u) : u
+ }, Bo.median = function(r, u){
+ var i, o = [], a = r.length, c = -1;
+ if (1 === arguments.length)for (; ++c < a;)e(i = t(r[c])) && o.push(i); else for (; ++c < a;)e(i = t(u.call(r, r[c], c))) && o.push(i);
+ return o.length ? Bo.quantile(o.sort(n), .5) : void 0
+ };
+ var aa = r(n);
+ Bo.bisectLeft = aa.left, Bo.bisect = Bo.bisectRight = aa.right, Bo.bisector = function(t){
+ return r(1 === t.length ? function(e, r){
+ return n(t(e), r)
+ } : t)
+ }, Bo.shuffle = function(n){
+ for (var t, e, r = n.length; r;)e = 0 | Math.random() * r--, t = n[r], n[r] = n[e], n[e] = t;
+ return n
+ }, Bo.permute = function(n, t){
+ for (var e = t.length, r = new Array(e); e--;)r[e] = n[t[e]];
+ return r
+ }, Bo.pairs = function(n){
+ for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;)i[e] = [t = u, u = n[++e]];
+ return i
+ }, Bo.zip = function(){
+ if (!(r = arguments.length))return [];
+ for (var n = -1, t = Bo.min(arguments, u), e = new Array(t); ++n < t;)for (var r, i = -1, o = e[n] = new Array(r); ++i < r;)o[i] = arguments[i][n];
+ return e
+ }, Bo.transpose = function(n){
+ return Bo.zip.apply(Bo, n)
+ }, Bo.keys = function(n){
+ var t = [];
+ for (var e in n)t.push(e);
+ return t
+ }, Bo.values = function(n){
+ var t = [];
+ for (var e in n)t.push(n[e]);
+ return t
+ }, Bo.entries = function(n){
+ var t = [];
+ for (var e in n)t.push({key: e, value: n[e]});
+ return t
+ }, Bo.merge = function(n){
+ for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;)o += n[i].length;
+ for (e = new Array(o); --u >= 0;)for (r = n[u], t = r.length; --t >= 0;)e[--o] = r[t];
+ return e
+ };
+ var ca = Math.abs;
+ Bo.range = function(n, t, e){
+ if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), 1 / 0 === (t - n) / e)throw new Error("infinite range");
+ var r, u = [], o = i(ca(e)), a = -1;
+ if (n *= o, t *= o, e *= o, 0 > e)for (; (r = n + e * ++a) > t;)u.push(r / o); else for (; (r = n + e * ++a) < t;)u.push(r / o);
+ return u
+ }, Bo.map = function(n){
+ var t = new a;
+ if (n instanceof a)n.forEach(function(n, e){
+ t.set(n, e)
+ }); else for (var e in n)t.set(e, n[e]);
+ return t
+ };
+ var la = "__proto__", sa = "\x00";
+ o(a, {
+ has : s, get: function(n){
+ return this._[c(n)]
+ }, set : function(n, t){
+ return this._[c(n)] = t
+ }, remove : f, keys: h, values: function(){
+ var n = [];
+ for (var t in this._)n.push(this._[t]);
+ return n
+ }, entries: function(){
+ var n = [];
+ for (var t in this._)n.push({key: l(t), value: this._[t]});
+ return n
+ }, size : g, empty: p, forEach: function(n){
+ for (var t in this._)n.call(this, l(t), this._[t])
+ }
+ }), Bo.nest = function(){
+ function n(t, o, c){
+ if (c >= i.length)return r ? r.call(u, o) : e ? o.sort(e) : o;
+ for (var l, s, f, h, g = -1, p = o.length, v = i[c++], d = new a; ++g < p;)(h = d.get(l = v(s = o[g]))) ? h.push(s) : d.set(l, [s]);
+ return t ? (s = t(), f = function(e, r){
+ s.set(e, n(t, r, c))
+ }) : (s = {}, f = function(e, r){
+ s[e] = n(t, r, c)
+ }), d.forEach(f), s
+ }
+
+ function t(n, e){
+ if (e >= i.length)return n;
+ var r = [], u = o[e++];
+ return n.forEach(function(n, u){
+ r.push({key: n, values: t(u, e)})
+ }), u ? r.sort(function(n, t){
+ return u(n.key, t.key)
+ }) : r
+ }
+
+ var e, r, u = {}, i = [], o = [];
+ return u.map = function(t, e){
+ return n(e, t, 0)
+ }, u.entries = function(e){
+ return t(n(Bo.map, e, 0), 0)
+ }, u.key = function(n){
+ return i.push(n), u
+ }, u.sortKeys = function(n){
+ return o[i.length - 1] = n, u
+ }, u.sortValues = function(n){
+ return e = n, u
+ }, u.rollup = function(n){
+ return r = n, u
+ }, u
+ }, Bo.set = function(n){
+ var t = new v;
+ if (n)for (var e = 0, r = n.length; r > e; ++e)t.add(n[e]);
+ return t
+ }, o(v, {
+ has : s, add: function(n){
+ return this._[c(n += "")] = !0, n
+ }, remove: f, values: h, size: g, empty: p, forEach: function(n){
+ for (var t in this._)n.call(this, l(t))
+ }
+ }), Bo.behavior = {}, Bo.rebind = function(n, t){
+ for (var e, r = 1, u = arguments.length; ++r < u;)n[e = arguments[r]] = d(n, t, t[e]);
+ return n
+ };
+ var fa = ["webkit", "ms", "moz", "Moz", "o", "O"];
+ Bo.dispatch = function(){
+ for (var n = new x, t = -1, e = arguments.length; ++t < e;)n[arguments[t]] = M(n);
+ return n
+ }, x.prototype.on = function(n, t){
+ var e = n.indexOf("."), r = "";
+ if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n)return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);
+ if (2 === arguments.length) {
+ if (null == t)for (n in this)this.hasOwnProperty(n) && this[n].on(r, null);
+ return this
+ }
+ }, Bo.event = null, Bo.requote = function(n){
+ return n.replace(ha, "\\$&")
+ };
+ var ha = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g, ga = {}.__proto__ ? function(n, t){
+ n.__proto__ = t
+ } : function(n, t){
+ for (var e in t)n[e] = t[e]
+ }, pa = function(n, t){
+ return t.querySelector(n)
+ }, va = function(n, t){
+ return t.querySelectorAll(n)
+ }, da = Ko.matches || Ko[m(Ko, "matchesSelector")], ma = function(n, t){
+ return da.call(n, t)
+ };
+ "function" == typeof Sizzle && (pa = function(n, t){
+ return Sizzle(n, t)[0] || null
+ }, va = Sizzle, ma = Sizzle.matchesSelector), Bo.selection = function(){
+ return _a
+ };
+ var ya = Bo.selection.prototype = [];
+ ya.select = function(n){
+ var t, e, r, u, i = [];
+ n = k(n);
+ for (var o = -1, a = this.length; ++o < a;) {
+ i.push(t = []), t.parentNode = (r = this[o]).parentNode;
+ for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && "__data__"in u && (e.__data__ = u.__data__)) : t.push(null)
+ }
+ return S(i)
+ }, ya.selectAll = function(n){
+ var t, e, r = [];
+ n = E(n);
+ for (var u = -1, i = this.length; ++u < i;)for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = Jo(n.call(e, e.__data__, a, u))), t.parentNode = e);
+ return S(r)
+ };
+ var xa = {
+ svg : "http://www.w3.org/2000/svg",
+ xhtml: "http://www.w3.org/1999/xhtml",
+ xlink: "http://www.w3.org/1999/xlink",
+ xml : "http://www.w3.org/XML/1998/namespace",
+ xmlns: "http://www.w3.org/2000/xmlns/"
+ };
+ Bo.ns = {
+ prefix: xa, qualify: function(n){
+ var t = n.indexOf(":"), e = n;
+ return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), xa.hasOwnProperty(e) ? {space: xa[e], local: n} : n
+ }
+ }, ya.attr = function(n, t){
+ if (arguments.length < 2) {
+ if ("string" == typeof n) {
+ var e = this.node();
+ return n = Bo.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)
+ }
+ for (t in n)this.each(A(t, n[t]));
+ return this
+ }
+ return this.each(A(n, t))
+ }, ya.classed = function(n, t){
+ if (arguments.length < 2) {
+ if ("string" == typeof n) {
+ var e = this.node(), r = (n = z(n)).length, u = -1;
+ if (t = e.classList) {
+ for (; ++u < r;)if (!t.contains(n[u]))return !1
+ } else for (t = e.getAttribute("class"); ++u < r;)if (!N(n[u]).test(t))return !1;
+ return !0
+ }
+ for (t in n)this.each(L(t, n[t]));
+ return this
+ }
+ return this.each(L(n, t))
+ }, ya.style = function(n, t, e){
+ var r = arguments.length;
+ if (3 > r) {
+ if ("string" != typeof n) {
+ 2 > r && (t = "");
+ for (e in n)this.each(q(e, n[e], t));
+ return this
+ }
+ if (2 > r)return Qo.getComputedStyle(this.node(), null).getPropertyValue(n);
+ e = ""
+ }
+ return this.each(q(n, t, e))
+ }, ya.property = function(n, t){
+ if (arguments.length < 2) {
+ if ("string" == typeof n)return this.node()[n];
+ for (t in n)this.each(R(t, n[t]));
+ return this
+ }
+ return this.each(R(n, t))
+ }, ya.text = function(n){
+ return arguments.length ? this.each("function" == typeof n ? function(){
+ var t = n.apply(this, arguments);
+ this.textContent = null == t ? "" : t
+ } : null == n ? function(){
+ this.textContent = ""
+ } : function(){
+ this.textContent = n
+ }) : this.node().textContent
+ }, ya.html = function(n){
+ return arguments.length ? this.each("function" == typeof n ? function(){
+ var t = n.apply(this, arguments);
+ this.innerHTML = null == t ? "" : t
+ } : null == n ? function(){
+ this.innerHTML = ""
+ } : function(){
+ this.innerHTML = n
+ }) : this.node().innerHTML
+ }, ya.append = function(n){
+ return n = D(n), this.select(function(){
+ return this.appendChild(n.apply(this, arguments))
+ })
+ }, ya.insert = function(n, t){
+ return n = D(n), t = k(t), this.select(function(){
+ return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)
+ })
+ }, ya.remove = function(){
+ return this.each(function(){
+ var n = this.parentNode;
+ n && n.removeChild(this)
+ })
+ }, ya.data = function(n, t){
+ function e(n, e){
+ var r, u, i, o = n.length, f = e.length, h = Math.min(o, f), g = new Array(f), p = new Array(f), v = new Array(o);
+ if (t) {
+ var d, m = new a, y = new Array(o);
+ for (r = -1; ++r < o;)m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;
+ for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = P(i), m.set(d, !0);
+ for (r = -1; ++r < o;)m.get(y[r]) !== !0 && (v[r] = n[r])
+ } else {
+ for (r = -1; ++r < h;)u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = P(i);
+ for (; f > r; ++r)p[r] = P(e[r]);
+ for (; o > r; ++r)v[r] = n[r]
+ }
+ p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, c.push(p), l.push(g), s.push(v)
+ }
+
+ var r, u, i = -1, o = this.length;
+ if (!arguments.length) {
+ for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);
+ return n
+ }
+ var c = H([]), l = S([]), s = S([]);
+ if ("function" == typeof n)for (; ++i < o;)e(r = this[i], n.call(r, r.parentNode.__data__, i)); else for (; ++i < o;)e(r = this[i], n);
+ return l.enter = function(){
+ return c
+ }, l.exit = function(){
+ return s
+ }, l
+ }, ya.datum = function(n){
+ return arguments.length ? this.property("__data__", n) : this.property("__data__")
+ }, ya.filter = function(n){
+ var t, e, r, u = [];
+ "function" != typeof n && (n = U(n));
+ for (var i = 0, o = this.length; o > i; i++) {
+ u.push(t = []), t.parentNode = (e = this[i]).parentNode;
+ for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)
+ }
+ return S(u)
+ }, ya.order = function(){
+ for (var n = -1, t = this.length; ++n < t;)for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);
+ return this
+ }, ya.sort = function(n){
+ n = j.apply(this, arguments);
+ for (var t = -1, e = this.length; ++t < e;)this[t].sort(n);
+ return this.order()
+ }, ya.each = function(n){
+ return F(this, function(t, e, r){
+ n.call(t, t.__data__, e, r)
+ })
+ }, ya.call = function(n){
+ var t = Jo(arguments);
+ return n.apply(t[0] = this, t), this
+ }, ya.empty = function(){
+ return !this.node()
+ }, ya.node = function(){
+ for (var n = 0, t = this.length; t > n; n++)for (var e = this[n], r = 0, u = e.length; u > r; r++) {
+ var i = e[r];
+ if (i)return i
+ }
+ return null
+ }, ya.size = function(){
+ var n = 0;
+ return F(this, function(){
+ ++n
+ }), n
+ };
+ var Ma = [];
+ Bo.selection.enter = H, Bo.selection.enter.prototype = Ma, Ma.append = ya.append, Ma.empty = ya.empty, Ma.node = ya.node, Ma.call = ya.call, Ma.size = ya.size, Ma.select = function(n){
+ for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {
+ r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;
+ for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)
+ }
+ return S(o)
+ }, Ma.insert = function(n, t){
+ return arguments.length < 2 && (t = O(this)), ya.insert.call(this, n, t)
+ }, ya.transition = function(){
+ for (var n, t, e = Cl || ++ql, r = [], u = Nl || {
+ time : Date.now(),
+ ease : wu,
+ delay : 0,
+ duration: 250
+ }, i = -1, o = this.length; ++i < o;) {
+ r.push(n = []);
+ for (var a = this[i], c = -1, l = a.length; ++c < l;)(t = a[c]) && Ho(t, c, e, u), n.push(t)
+ }
+ return Uo(r, e)
+ }, ya.interrupt = function(){
+ return this.each(Y)
+ }, Bo.select = function(n){
+ var t = ["string" == typeof n ? pa(n, Go) : n];
+ return t.parentNode = Ko, S([t])
+ }, Bo.selectAll = function(n){
+ var t = Jo("string" == typeof n ? va(n, Go) : n);
+ return t.parentNode = Ko, S([t])
+ };
+ var _a = Bo.select(Ko);
+ ya.on = function(n, t, e){
+ var r = arguments.length;
+ if (3 > r) {
+ if ("string" != typeof n) {
+ 2 > r && (t = !1);
+ for (e in n)this.each(I(e, n[e], t));
+ return this
+ }
+ if (2 > r)return (r = this.node()["__on" + n]) && r._;
+ e = !1
+ }
+ return this.each(I(n, t, e))
+ };
+ var ba = Bo.map({mouseenter: "mouseover", mouseleave: "mouseout"});
+ ba.forEach(function(n){
+ "on" + n in Go && ba.remove(n)
+ });
+ var wa = "onselectstart"in Go ? null : m(Ko.style, "userSelect"), Sa = 0;
+ Bo.mouse = function(n){
+ return $(n, b())
+ };
+ var ka = /WebKit/.test(Qo.navigator.userAgent) ? -1 : 0;
+ Bo.touch = function(n, t, e){
+ if (arguments.length < 3 && (e = t, t = b().changedTouches), t)for (var r, u = 0, i = t.length; i > u; ++u)if ((r = t[u]).identifier === e)return $(n, r)
+ }, Bo.behavior.drag = function(){
+ function n(){
+ this.on("mousedown.drag", u).on("touchstart.drag", i)
+ }
+
+ function t(n, t, u, i, o){
+ return function(){
+ function a(){
+ var n, e, r = t(h, v);
+ r && (n = r[0] - x[0], e = r[1] - x[1], p |= n | e, x = r, g({
+ type: "drag",
+ x : r[0] + l[0],
+ y : r[1] + l[1],
+ dx : n,
+ dy : e
+ }))
+ }
+
+ function c(){
+ t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && Bo.event.target === f), g({type: "dragend"}))
+ }
+
+ var l, s = this, f = Bo.event.target, h = s.parentNode, g = e.of(s, arguments), p = 0, v = n(), d = ".drag" + (null == v ? "" : "-" + v), m = Bo.select(u()).on(i + d, a).on(o + d, c), y = X(), x = t(h, v);
+ r ? (l = r.apply(s, arguments), l = [l.x - x[0], l.y - x[1]]) : l = [0, 0], g({type: "dragstart"})
+ }
+ }
+
+ var e = w(n, "drag", "dragstart", "dragend"), r = null, u = t(y, Bo.mouse, J, "mousemove", "mouseup"), i = t(B, Bo.touch, W, "touchmove", "touchend");
+ return n.origin = function(t){
+ return arguments.length ? (r = t, n) : r
+ }, Bo.rebind(n, e, "on")
+ }, Bo.touches = function(n, t){
+ return arguments.length < 2 && (t = b().touches), t ? Jo(t).map(function(t){
+ var e = $(n, t);
+ return e.identifier = t.identifier, e
+ }) : []
+ };
+ var Ea = Math.PI, Aa = 2 * Ea, Ca = Ea / 2, Na = 1e-6, za = Na * Na, La = Ea / 180, Ta = 180 / Ea, qa = Math.SQRT2, Ra = 2, Da = 4;
+ Bo.interpolateZoom = function(n, t){
+ function e(n){
+ var t = n * y;
+ if (m) {
+ var e = et(v), o = i / (Ra * h) * (e * rt(qa * t + v) - tt(v));
+ return [r + o * l, u + o * s, i * e / et(qa * t + v)]
+ }
+ return [r + n * l, u + n * s, i * Math.exp(qa * t)]
+ }
+
+ var r = n[0], u = n[1], i = n[2], o = t[0], a = t[1], c = t[2], l = o - r, s = a - u, f = l * l + s * s, h = Math.sqrt(f), g = (c * c - i * i + Da * f) / (2 * i * Ra * h), p = (c * c - i * i - Da * f) / (2 * c * Ra * h), v = Math.log(Math.sqrt(g * g + 1) - g), d = Math.log(Math.sqrt(p * p + 1) - p), m = d - v, y = (m || Math.log(c / i)) / qa;
+ return e.duration = 1e3 * y, e
+ }, Bo.behavior.zoom = function(){
+ function n(n){
+ n.on(A, l).on(ja + ".zoom", f).on("dblclick.zoom", h).on(z, s)
+ }
+
+ function t(n){
+ return [(n[0] - S.x) / S.k, (n[1] - S.y) / S.k]
+ }
+
+ function e(n){
+ return [n[0] * S.k + S.x, n[1] * S.k + S.y]
+ }
+
+ function r(n){
+ S.k = Math.max(E[0], Math.min(E[1], n))
+ }
+
+ function u(n, t){
+ t = e(t), S.x += n[0] - t[0], S.y += n[1] - t[1]
+ }
+
+ function i(){
+ x && x.domain(y.range().map(function(n){
+ return (n - S.x) / S.k
+ }).map(y.invert)), b && b.domain(M.range().map(function(n){
+ return (n - S.y) / S.k
+ }).map(M.invert))
+ }
+
+ function o(n){
+ n({type: "zoomstart"})
+ }
+
+ function a(n){
+ i(), n({type: "zoom", scale: S.k, translate: [S.x, S.y]})
+ }
+
+ function c(n){
+ n({type: "zoomend"})
+ }
+
+ function l(){
+ function n(){
+ s = 1, u(Bo.mouse(r), h), a(l)
+ }
+
+ function e(){
+ f.on(C, null).on(N, null), g(s && Bo.event.target === i), c(l)
+ }
+
+ var r = this, i = Bo.event.target, l = L.of(r, arguments), s = 0, f = Bo.select(Qo).on(C, n).on(N, e), h = t(Bo.mouse(r)), g = X();
+ Y.call(r), o(l)
+ }
+
+ function s(){
+ function n(){
+ var n = Bo.touches(g);
+ return h = S.k, n.forEach(function(n){
+ n.identifier in v && (v[n.identifier] = t(n))
+ }), n
+ }
+
+ function e(){
+ var t = Bo.event.target;
+ Bo.select(t).on(x, i).on(M, f), b.push(t);
+ for (var e = Bo.event.changedTouches, o = 0, c = e.length; c > o; ++o)v[e[o].identifier] = null;
+ var l = n(), s = Date.now();
+ if (1 === l.length) {
+ if (500 > s - m) {
+ var h = l[0], g = v[h.identifier];
+ r(2 * S.k), u(h, g), _(), a(p)
+ }
+ m = s
+ } else if (l.length > 1) {
+ var h = l[0], y = l[1], w = h[0] - y[0], k = h[1] - y[1];
+ d = w * w + k * k
+ }
+ }
+
+ function i(){
+ for (var n, t, e, i, o = Bo.touches(g), c = 0, l = o.length; l > c; ++c, i = null)if (e = o[c], i = v[e.identifier]) {
+ if (t)break;
+ n = e, t = i
+ }
+ if (i) {
+ var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s, f = d && Math.sqrt(s / d);
+ n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + i[0]) / 2, (t[1] + i[1]) / 2], r(f * h)
+ }
+ m = null, u(n, t), a(p)
+ }
+
+ function f(){
+ if (Bo.event.touches.length) {
+ for (var t = Bo.event.changedTouches, e = 0, r = t.length; r > e; ++e)delete v[t[e].identifier];
+ for (var u in v)return void n()
+ }
+ Bo.selectAll(b).on(y, null), w.on(A, l).on(z, s), k(), c(p)
+ }
+
+ var h, g = this, p = L.of(g, arguments), v = {}, d = 0, y = ".zoom-" + Bo.event.changedTouches[0].identifier, x = "touchmove" + y, M = "touchend" + y, b = [], w = Bo.select(g), k = X();
+ Y.call(g), e(), o(p), w.on(A, null).on(z, e)
+ }
+
+ function f(){
+ var n = L.of(this, arguments);
+ d ? clearTimeout(d) : (g = t(p = v || Bo.mouse(this)), Y.call(this), o(n)), d = setTimeout(function(){
+ d = null, c(n)
+ }, 50), _(), r(Math.pow(2, .002 * Pa()) * S.k), u(p, g), a(n)
+ }
+
+ function h(){
+ var n = L.of(this, arguments), e = Bo.mouse(this), i = t(e), l = Math.log(S.k) / Math.LN2;
+ o(n), r(Math.pow(2, Bo.event.shiftKey ? Math.ceil(l) - 1 : Math.floor(l) + 1)), u(e, i), a(n), c(n)
+ }
+
+ var g, p, v, d, m, y, x, M, b, S = {
+ x: 0,
+ y: 0,
+ k: 1
+ }, k = [960, 500], E = Ua, A = "mousedown.zoom", C = "mousemove.zoom", N = "mouseup.zoom", z = "touchstart.zoom", L = w(n, "zoomstart", "zoom", "zoomend");
+ return n.event = function(n){
+ n.each(function(){
+ var n = L.of(this, arguments), t = S;
+ Cl ? Bo.select(this).transition().each("start.zoom", function(){
+ S = this.__chart__ || {x: 0, y: 0, k: 1}, o(n)
+ }).tween("zoom:zoom", function(){
+ var e = k[0], r = k[1], u = e / 2, i = r / 2, o = Bo.interpolateZoom([(u - S.x) / S.k, (i - S.y) / S.k, e / S.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);
+ return function(t){
+ var r = o(t), c = e / r[2];
+ this.__chart__ = S = {x: u - r[0] * c, y: i - r[1] * c, k: c}, a(n)
+ }
+ }).each("end.zoom", function(){
+ c(n)
+ }) : (this.__chart__ = S, o(n), a(n), c(n))
+ })
+ }, n.translate = function(t){
+ return arguments.length ? (S = {x: +t[0], y: +t[1], k: S.k}, i(), n) : [S.x, S.y]
+ }, n.scale = function(t){
+ return arguments.length ? (S = {x: S.x, y: S.y, k: +t}, i(), n) : S.k
+ }, n.scaleExtent = function(t){
+ return arguments.length ? (E = null == t ? Ua : [+t[0], +t[1]], n) : E
+ }, n.center = function(t){
+ return arguments.length ? (v = t && [+t[0], +t[1]], n) : v
+ }, n.size = function(t){
+ return arguments.length ? (k = t && [+t[0], +t[1]], n) : k
+ }, n.x = function(t){
+ return arguments.length ? (x = t, y = t.copy(), S = {x: 0, y: 0, k: 1}, n) : x
+ }, n.y = function(t){
+ return arguments.length ? (b = t, M = t.copy(), S = {x: 0, y: 0, k: 1}, n) : b
+ }, Bo.rebind(n, L, "on")
+ };
+ var Pa, Ua = [0, 1 / 0], ja = "onwheel"in Go ? (Pa = function(){
+ return -Bo.event.deltaY * (Bo.event.deltaMode ? 120 : 1)
+ }, "wheel") : "onmousewheel"in Go ? (Pa = function(){
+ return Bo.event.wheelDelta
+ }, "mousewheel") : (Pa = function(){
+ return -Bo.event.detail
+ }, "MozMousePixelScroll");
+ Bo.color = it, it.prototype.toString = function(){
+ return this.rgb() + ""
+ }, Bo.hsl = ot;
+ var Fa = ot.prototype = new it;
+ Fa.brighter = function(n){
+ return n = Math.pow(.7, arguments.length ? n : 1), new ot(this.h, this.s, this.l / n)
+ }, Fa.darker = function(n){
+ return n = Math.pow(.7, arguments.length ? n : 1), new ot(this.h, this.s, n * this.l)
+ }, Fa.rgb = function(){
+ return at(this.h, this.s, this.l)
+ }, Bo.hcl = ct;
+ var Ha = ct.prototype = new it;
+ Ha.brighter = function(n){
+ return new ct(this.h, this.c, Math.min(100, this.l + Oa * (arguments.length ? n : 1)))
+ }, Ha.darker = function(n){
+ return new ct(this.h, this.c, Math.max(0, this.l - Oa * (arguments.length ? n : 1)))
+ }, Ha.rgb = function(){
+ return lt(this.h, this.c, this.l).rgb()
+ }, Bo.lab = st;
+ var Oa = 18, Ya = .95047, Ia = 1, Za = 1.08883, Va = st.prototype = new it;
+ Va.brighter = function(n){
+ return new st(Math.min(100, this.l + Oa * (arguments.length ? n : 1)), this.a, this.b)
+ }, Va.darker = function(n){
+ return new st(Math.max(0, this.l - Oa * (arguments.length ? n : 1)), this.a, this.b)
+ }, Va.rgb = function(){
+ return ft(this.l, this.a, this.b)
+ }, Bo.rgb = dt;
+ var Xa = dt.prototype = new it;
+ Xa.brighter = function(n){
+ n = Math.pow(.7, arguments.length ? n : 1);
+ var t = this.r, e = this.g, r = this.b, u = 30;
+ return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new dt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new dt(u, u, u)
+ }, Xa.darker = function(n){
+ return n = Math.pow(.7, arguments.length ? n : 1), new dt(n * this.r, n * this.g, n * this.b)
+ }, Xa.hsl = function(){
+ return _t(this.r, this.g, this.b)
+ }, Xa.toString = function(){
+ return "#" + xt(this.r) + xt(this.g) + xt(this.b)
+ };
+ var $a = Bo.map({
+ aliceblue : 15792383,
+ antiquewhite : 16444375,
+ aqua : 65535,
+ aquamarine : 8388564,
+ azure : 15794175,
+ beige : 16119260,
+ bisque : 16770244,
+ black : 0,
+ blanchedalmond : 16772045,
+ blue : 255,
+ blueviolet : 9055202,
+ brown : 10824234,
+ burlywood : 14596231,
+ cadetblue : 6266528,
+ chartreuse : 8388352,
+ chocolate : 13789470,
+ coral : 16744272,
+ cornflowerblue : 6591981,
+ cornsilk : 16775388,
+ crimson : 14423100,
+ cyan : 65535,
+ darkblue : 139,
+ darkcyan : 35723,
+ darkgoldenrod : 12092939,
+ darkgray : 11119017,
+ darkgreen : 25600,
+ darkgrey : 11119017,
+ darkkhaki : 12433259,
+ darkmagenta : 9109643,
+ darkolivegreen : 5597999,
+ darkorange : 16747520,
+ darkorchid : 10040012,
+ darkred : 9109504,
+ darksalmon : 15308410,
+ darkseagreen : 9419919,
+ darkslateblue : 4734347,
+ darkslategray : 3100495,
+ darkslategrey : 3100495,
+ darkturquoise : 52945,
+ darkviolet : 9699539,
+ deeppink : 16716947,
+ deepskyblue : 49151,
+ dimgray : 6908265,
+ dimgrey : 6908265,
+ dodgerblue : 2003199,
+ firebrick : 11674146,
+ floralwhite : 16775920,
+ forestgreen : 2263842,
+ fuchsia : 16711935,
+ gainsboro : 14474460,
+ ghostwhite : 16316671,
+ gold : 16766720,
+ goldenrod : 14329120,
+ gray : 8421504,
+ green : 32768,
+ greenyellow : 11403055,
+ grey : 8421504,
+ honeydew : 15794160,
+ hotpink : 16738740,
+ indianred : 13458524,
+ indigo : 4915330,
+ ivory : 16777200,
+ khaki : 15787660,
+ lavender : 15132410,
+ lavenderblush : 16773365,
+ lawngreen : 8190976,
+ lemonchiffon : 16775885,
+ lightblue : 11393254,
+ lightcoral : 15761536,
+ lightcyan : 14745599,
+ lightgoldenrodyellow: 16448210,
+ lightgray : 13882323,
+ lightgreen : 9498256,
+ lightgrey : 13882323,
+ lightpink : 16758465,
+ lightsalmon : 16752762,
+ lightseagreen : 2142890,
+ lightskyblue : 8900346,
+ lightslategray : 7833753,
+ lightslategrey : 7833753,
+ lightsteelblue : 11584734,
+ lightyellow : 16777184,
+ lime : 65280,
+ limegreen : 3329330,
+ linen : 16445670,
+ magenta : 16711935,
+ maroon : 8388608,
+ mediumaquamarine : 6737322,
+ mediumblue : 205,
+ mediumorchid : 12211667,
+ mediumpurple : 9662683,
+ mediumseagreen : 3978097,
+ mediumslateblue : 8087790,
+ mediumspringgreen : 64154,
+ mediumturquoise : 4772300,
+ mediumvioletred : 13047173,
+ midnightblue : 1644912,
+ mintcream : 16121850,
+ mistyrose : 16770273,
+ moccasin : 16770229,
+ navajowhite : 16768685,
+ navy : 128,
+ oldlace : 16643558,
+ olive : 8421376,
+ olivedrab : 7048739,
+ orange : 16753920,
+ orangered : 16729344,
+ orchid : 14315734,
+ palegoldenrod : 15657130,
+ palegreen : 10025880,
+ paleturquoise : 11529966,
+ palevioletred : 14381203,
+ papayawhip : 16773077,
+ peachpuff : 16767673,
+ peru : 13468991,
+ pink : 16761035,
+ plum : 14524637,
+ powderblue : 11591910,
+ purple : 8388736,
+ red : 16711680,
+ rosybrown : 12357519,
+ royalblue : 4286945,
+ saddlebrown : 9127187,
+ salmon : 16416882,
+ sandybrown : 16032864,
+ seagreen : 3050327,
+ seashell : 16774638,
+ sienna : 10506797,
+ silver : 12632256,
+ skyblue : 8900331,
+ slateblue : 6970061,
+ slategray : 7372944,
+ slategrey : 7372944,
+ snow : 16775930,
+ springgreen : 65407,
+ steelblue : 4620980,
+ tan : 13808780,
+ teal : 32896,
+ thistle : 14204888,
+ tomato : 16737095,
+ turquoise : 4251856,
+ violet : 15631086,
+ wheat : 16113331,
+ white : 16777215,
+ whitesmoke : 16119285,
+ yellow : 16776960,
+ yellowgreen : 10145074
+ });
+ $a.forEach(function(n, t){
+ $a.set(n, mt(t))
+ }), Bo.functor = kt, Bo.xhr = At(Et), Bo.dsv = function(n, t){
+ function e(n, e, i){
+ arguments.length < 3 && (i = e, e = null);
+ var o = Ct(n, t, null == e ? r : u(e), i);
+ return o.row = function(n){
+ return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e
+ }, o
+ }
+
+ function r(n){
+ return e.parse(n.responseText)
+ }
+
+ function u(n){
+ return function(t){
+ return e.parse(t.responseText, n)
+ }
+ }
+
+ function i(t){
+ return t.map(o).join(n)
+ }
+
+ function o(n){
+ return a.test(n) ? '"' + n.replace(/\"/g, '""') + '"' : n
+ }
+
+ var a = new RegExp('["' + n + "\n]"), c = n.charCodeAt(0);
+ return e.parse = function(n, t){
+ var r;
+ return e.parseRows(n, function(n, e){
+ if (r)return r(n, e - 1);
+ var u = new Function("d", "return {" + n.map(function(n, t){
+ return JSON.stringify(n) + ": d[" + t + "]"
+ }).join(",") + "}");
+ r = t ? function(n, e){
+ return t(u(n), e)
+ } : u
+ })
+ }, e.parseRows = function(n, t){
+ function e(){
+ if (s >= l)return o;
+ if (u)return u = !1, i;
+ var t = s;
+ if (34 === n.charCodeAt(t)) {
+ for (var e = t; e++ < l;)if (34 === n.charCodeAt(e)) {
+ if (34 !== n.charCodeAt(e + 1))break;
+ ++e
+ }
+ s = e + 2;
+ var r = n.charCodeAt(e + 1);
+ return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/""/g, '"')
+ }
+ for (; l > s;) {
+ var r = n.charCodeAt(s++), a = 1;
+ if (10 === r)u = !0; else if (13 === r)u = !0, 10 === n.charCodeAt(s) && (++s, ++a); else if (r !== c)continue;
+ return n.slice(t, s - a)
+ }
+ return n.slice(t)
+ }
+
+ for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0; (r = e()) !== o;) {
+ for (var h = []; r !== i && r !== o;)h.push(r), r = e();
+ t && null == (h = t(h, f++)) || a.push(h)
+ }
+ return a
+ }, e.format = function(t){
+ if (Array.isArray(t[0]))return e.formatRows(t);
+ var r = new v, u = [];
+ return t.forEach(function(n){
+ for (var t in n)r.has(t) || u.push(r.add(t))
+ }), [u.map(o).join(n)].concat(t.map(function(t){
+ return u.map(function(n){
+ return o(t[n])
+ }).join(n)
+ })).join("\n")
+ }, e.formatRows = function(n){
+ return n.map(i).join("\n")
+ }, e
+ }, Bo.csv = Bo.dsv(",", "text/csv"), Bo.tsv = Bo.dsv(" ", "text/tab-separated-values");
+ var Ba, Wa, Ja, Ga, Ka, Qa = Qo[m(Qo, "requestAnimationFrame")] || function(n){
+ setTimeout(n, 17)
+ };
+ Bo.timer = function(n, t, e){
+ var r = arguments.length;
+ 2 > r && (t = 0), 3 > r && (e = Date.now());
+ var u = e + t, i = {c: n, t: u, f: !1, n: null};
+ Wa ? Wa.n = i : Ba = i, Wa = i, Ja || (Ga = clearTimeout(Ga), Ja = 1, Qa(Lt))
+ }, Bo.timer.flush = function(){
+ Tt(), qt()
+ }, Bo.round = function(n, t){
+ return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)
+ };
+ var nc = ["y", "z", "a", "f", "p", "n", "\xb5", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"].map(Dt);
+ Bo.formatPrefix = function(n, t){
+ var e = 0;
+ return n && (0 > n && (n *= -1), t && (n = Bo.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), nc[8 + e / 3]
+ };
+ var tc = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i, ec = Bo.map({
+ b : function(n){
+ return n.toString(2)
+ }, c: function(n){
+ return String.fromCharCode(n)
+ }, o: function(n){
+ return n.toString(8)
+ }, x: function(n){
+ return n.toString(16)
+ }, X: function(n){
+ return n.toString(16).toUpperCase()
+ }, g: function(n, t){
+ return n.toPrecision(t)
+ }, e: function(n, t){
+ return n.toExponential(t)
+ }, f: function(n, t){
+ return n.toFixed(t)
+ }, r: function(n, t){
+ return (n = Bo.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))
+ }
+ }), rc = Bo.time = {}, uc = Date;
+ jt.prototype = {
+ getDate : function(){
+ return this._.getUTCDate()
+ }, getDay : function(){
+ return this._.getUTCDay()
+ }, getFullYear : function(){
+ return this._.getUTCFullYear()
+ }, getHours : function(){
+ return this._.getUTCHours()
+ }, getMilliseconds : function(){
+ return this._.getUTCMilliseconds()
+ }, getMinutes : function(){
+ return this._.getUTCMinutes()
+ }, getMonth : function(){
+ return this._.getUTCMonth()
+ }, getSeconds : function(){
+ return this._.getUTCSeconds()
+ }, getTime : function(){
+ return this._.getTime()
+ }, getTimezoneOffset: function(){
+ return 0
+ }, valueOf : function(){
+ return this._.valueOf()
+ }, setDate : function(){
+ ic.setUTCDate.apply(this._, arguments)
+ }, setDay : function(){
+ ic.setUTCDay.apply(this._, arguments)
+ }, setFullYear : function(){
+ ic.setUTCFullYear.apply(this._, arguments)
+ }, setHours : function(){
+ ic.setUTCHours.apply(this._, arguments)
+ }, setMilliseconds : function(){
+ ic.setUTCMilliseconds.apply(this._, arguments)
+ }, setMinutes : function(){
+ ic.setUTCMinutes.apply(this._, arguments)
+ }, setMonth : function(){
+ ic.setUTCMonth.apply(this._, arguments)
+ }, setSeconds : function(){
+ ic.setUTCSeconds.apply(this._, arguments)
+ }, setTime : function(){
+ ic.setTime.apply(this._, arguments)
+ }
+ };
+ var ic = Date.prototype;
+ rc.year = Ft(function(n){
+ return n = rc.day(n), n.setMonth(0, 1), n
+ }, function(n, t){
+ n.setFullYear(n.getFullYear() + t)
+ }, function(n){
+ return n.getFullYear()
+ }), rc.years = rc.year.range, rc.years.utc = rc.year.utc.range, rc.day = Ft(function(n){
+ var t = new uc(2e3, 0);
+ return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t
+ }, function(n, t){
+ n.setDate(n.getDate() + t)
+ }, function(n){
+ return n.getDate() - 1
+ }), rc.days = rc.day.range, rc.days.utc = rc.day.utc.range, rc.dayOfYear = function(n){
+ var t = rc.year(n);
+ return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)
+ }, ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"].forEach(function(n, t){
+ t = 7 - t;
+ var e = rc[n] = Ft(function(n){
+ return (n = rc.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n
+ }, function(n, t){
+ n.setDate(n.getDate() + 7 * Math.floor(t))
+ }, function(n){
+ var e = rc.year(n).getDay();
+ return Math.floor((rc.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)
+ });
+ rc[n + "s"] = e.range, rc[n + "s"].utc = e.utc.range, rc[n + "OfYear"] = function(n){
+ var e = rc.year(n).getDay();
+ return Math.floor((rc.dayOfYear(n) + (e + t) % 7) / 7)
+ }
+ }), rc.week = rc.sunday, rc.weeks = rc.sunday.range, rc.weeks.utc = rc.sunday.utc.range, rc.weekOfYear = rc.sundayOfYear;
+ var oc = {"-": "", _: " ", 0: "0"}, ac = /^\s*\d+/, cc = /^%/;
+ Bo.locale = function(n){
+ return {numberFormat: Pt(n), timeFormat: Ot(n)}
+ };
+ var lc = Bo.locale({
+ decimal : ".",
+ thousands : ",",
+ grouping : [3],
+ currency : ["$", ""],
+ dateTime : "%a %b %e %X %Y",
+ date : "%m/%d/%Y",
+ time : "%H:%M:%S",
+ periods : ["AM", "PM"],
+ days : ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ shortDays : ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+ months : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+ });
+ Bo.format = lc.numberFormat, Bo.geo = {}, ce.prototype = {
+ s : 0, t: 0, add: function(n){
+ le(n, this.t, sc), le(sc.s, this.s, this), this.s ? this.t += sc.t : this.s = sc.t
+ }, reset : function(){
+ this.s = this.t = 0
+ }, valueOf: function(){
+ return this.s
+ }
+ };
+ var sc = new ce;
+ Bo.geo.stream = function(n, t){
+ n && fc.hasOwnProperty(n.type) ? fc[n.type](n, t) : se(n, t)
+ };
+ var fc = {
+ Feature : function(n, t){
+ se(n.geometry, t)
+ }, FeatureCollection: function(n, t){
+ for (var e = n.features, r = -1, u = e.length; ++r < u;)se(e[r].geometry, t)
+ }
+ }, hc = {
+ Sphere : function(n, t){
+ t.sphere()
+ }, Point : function(n, t){
+ n = n.coordinates, t.point(n[0], n[1], n[2])
+ }, MultiPoint : function(n, t){
+ for (var e = n.coordinates, r = -1, u = e.length; ++r < u;)n = e[r], t.point(n[0], n[1], n[2])
+ }, LineString : function(n, t){
+ fe(n.coordinates, t, 0)
+ }, MultiLineString : function(n, t){
+ for (var e = n.coordinates, r = -1, u = e.length; ++r < u;)fe(e[r], t, 0)
+ }, Polygon : function(n, t){
+ he(n.coordinates, t)
+ }, MultiPolygon : function(n, t){
+ for (var e = n.coordinates, r = -1, u = e.length; ++r < u;)he(e[r], t)
+ }, GeometryCollection: function(n, t){
+ for (var e = n.geometries, r = -1, u = e.length; ++r < u;)se(e[r], t)
+ }
+ };
+ Bo.geo.area = function(n){
+ return gc = 0, Bo.geo.stream(n, vc), gc
+ };
+ var gc, pc = new ce, vc = {
+ sphere : function(){
+ gc += 4 * Ea
+ }, point : y, lineStart: y, lineEnd: y, polygonStart: function(){
+ pc.reset(), vc.lineStart = ge
+ }, polygonEnd: function(){
+ var n = 2 * pc;
+ gc += 0 > n ? 4 * Ea + n : n, vc.lineStart = vc.lineEnd = vc.point = y
+ }
+ };
+ Bo.geo.bounds = function(){
+ function n(n, t){
+ x.push(M = [s = n, h = n]), f > t && (f = t), t > g && (g = t)
+ }
+
+ function t(t, e){
+ var r = pe([t * La, e * La]);
+ if (m) {
+ var u = de(m, r), i = [u[1], -u[0], 0], o = de(i, u);
+ xe(o), o = Me(o);
+ var c = t - p, l = c > 0 ? 1 : -1, v = o[0] * Ta * l, d = ca(c) > 180;
+ if (d ^ (v > l * p && l * t > v)) {
+ var y = o[1] * Ta;
+ y > g && (g = y)
+ } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {
+ var y = -o[1] * Ta;
+ f > y && (f = y)
+ } else f > e && (f = e), e > g && (g = e);
+ d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)
+ } else n(t, e);
+ m = r, p = t
+ }
+
+ function e(){
+ _.point = t
+ }
+
+ function r(){
+ M[0] = s, M[1] = h, _.point = n, m = null
+ }
+
+ function u(n, e){
+ if (m) {
+ var r = n - p;
+ y += ca(r) > 180 ? r + (r > 0 ? 360 : -360) : r
+ } else v = n, d = e;
+ vc.point(n, e), t(n, e)
+ }
+
+ function i(){
+ vc.lineStart()
+ }
+
+ function o(){
+ u(v, d), vc.lineEnd(), ca(y) > Na && (s = -(h = 180)), M[0] = s, M[1] = h, m = null
+ }
+
+ function a(n, t){
+ return (t -= n) < 0 ? t + 360 : t
+ }
+
+ function c(n, t){
+ return n[0] - t[0]
+ }
+
+ function l(n, t){
+ return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n
+ }
+
+ var s, f, h, g, p, v, d, m, y, x, M, _ = {
+ point : n, lineStart: e, lineEnd: r, polygonStart: function(){
+ _.point = u, _.lineStart = i, _.lineEnd = o, y = 0, vc.polygonStart()
+ }, polygonEnd: function(){
+ vc.polygonEnd(), _.point = n, _.lineStart = e, _.lineEnd = r, 0 > pc ? (s = -(h = 180), f = -(g = 90)) : y > Na ? g = 90 : -Na > y && (f = -90), M[0] = s, M[1] = h
+ }
+ };
+ return function(n){
+ g = h = -(s = f = 1 / 0), x = [], Bo.geo.stream(n, _);
+ var t = x.length;
+ if (t) {
+ x.sort(c);
+ for (var e, r = 1, u = x[0], i = [u]; t > r; ++r)e = x[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);
+ for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r)e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])
+ }
+ return x = M = null, 1 / 0 === s || 1 / 0 === f ? [[0 / 0, 0 / 0], [0 / 0, 0 / 0]] : [[s, f], [h, g]]
+ }
+ }(), Bo.geo.centroid = function(n){
+ dc = mc = yc = xc = Mc = _c = bc = wc = Sc = kc = Ec = 0, Bo.geo.stream(n, Ac);
+ var t = Sc, e = kc, r = Ec, u = t * t + e * e + r * r;
+ return za > u && (t = _c, e = bc, r = wc, Na > mc && (t = yc, e = xc, r = Mc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Ta, nt(r / Math.sqrt(u)) * Ta]
+ };
+ var dc, mc, yc, xc, Mc, _c, bc, wc, Sc, kc, Ec, Ac = {
+ sphere : y,
+ point : be,
+ lineStart : Se,
+ lineEnd : ke,
+ polygonStart: function(){
+ Ac.lineStart = Ee
+ },
+ polygonEnd : function(){
+ Ac.lineStart = Se
+ }
+ }, Cc = Le(Ae, De, Ue, [-Ea, -Ea / 2]), Nc = 1e9;
+ Bo.geo.clipExtent = function(){
+ var n, t, e, r, u, i, o = {
+ stream : function(n){
+ return u && (u.valid = !1), u = i(n), u.valid = !0, u
+ }, extent: function(a){
+ return arguments.length ? (i = Oe(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [[n, t], [e, r]]
+ }
+ };
+ return o.extent([[0, 0], [960, 500]])
+ }, (Bo.geo.conicEqualArea = function(){
+ return Ie(Ze)
+ }).raw = Ze, Bo.geo.albers = function(){
+ return Bo.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)
+ }, Bo.geo.albersUsa = function(){
+ function n(n){
+ var i = n[0], o = n[1];
+ return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t
+ }
+
+ var t, e, r, u, i = Bo.geo.albers(), o = Bo.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), a = Bo.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), c = {
+ point: function(n, e){
+ t = [n, e]
+ }
+ };
+ return n.invert = function(n){
+ var t = i.scale(), e = i.translate(), r = (n[0] - e[0]) / t, u = (n[1] - e[1]) / t;
+ return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)
+ }, n.stream = function(n){
+ var t = i.stream(n), e = o.stream(n), r = a.stream(n);
+ return {
+ point : function(n, u){
+ t.point(n, u), e.point(n, u), r.point(n, u)
+ }, sphere : function(){
+ t.sphere(), e.sphere(), r.sphere()
+ }, lineStart : function(){
+ t.lineStart(), e.lineStart(), r.lineStart()
+ }, lineEnd : function(){
+ t.lineEnd(), e.lineEnd(), r.lineEnd()
+ }, polygonStart: function(){
+ t.polygonStart(), e.polygonStart(), r.polygonStart()
+ }, polygonEnd : function(){
+ t.polygonEnd(), e.polygonEnd(), r.polygonEnd()
+ }
+ }
+ }, n.precision = function(t){
+ return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()
+ }, n.scale = function(t){
+ return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()
+ }, n.translate = function(t){
+ if (!arguments.length)return i.translate();
+ var l = i.scale(), s = +t[0], f = +t[1];
+ return e = i.translate(t).clipExtent([[s - .455 * l, f - .238 * l], [s + .455 * l, f + .238 * l]]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([[s - .425 * l + Na, f + .12 * l + Na], [s - .214 * l - Na, f + .234 * l - Na]]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([[s - .214 * l + Na, f + .166 * l + Na], [s - .115 * l - Na, f + .234 * l - Na]]).stream(c).point, n
+ }, n.scale(1070)
+ };
+ var zc, Lc, Tc, qc, Rc, Dc, Pc = {
+ point : y, lineStart: y, lineEnd: y, polygonStart: function(){
+ Lc = 0, Pc.lineStart = Ve
+ }, polygonEnd: function(){
+ Pc.lineStart = Pc.lineEnd = Pc.point = y, zc += ca(Lc / 2)
+ }
+ }, Uc = {point: Xe, lineStart: y, lineEnd: y, polygonStart: y, polygonEnd: y}, jc = {
+ point : We,
+ lineStart : Je,
+ lineEnd : Ge,
+ polygonStart: function(){
+ jc.lineStart = Ke
+ },
+ polygonEnd : function(){
+ jc.point = We, jc.lineStart = Je, jc.lineEnd = Ge
+ }
+ };
+ Bo.geo.path = function(){
+ function n(n){
+ return n && ("function" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), Bo.geo.stream(n, o)), i.result()
+ }
+
+ function t(){
+ return o = null, n
+ }
+
+ var e, r, u, i, o, a = 4.5;
+ return n.area = function(n){
+ return zc = 0, Bo.geo.stream(n, u(Pc)), zc
+ }, n.centroid = function(n){
+ return yc = xc = Mc = _c = bc = wc = Sc = kc = Ec = 0, Bo.geo.stream(n, u(jc)), Ec ? [Sc / Ec, kc / Ec] : wc ? [_c / wc, bc / wc] : Mc ? [yc / Mc, xc / Mc] : [0 / 0, 0 / 0]
+ }, n.bounds = function(n){
+ return Rc = Dc = -(Tc = qc = 1 / 0), Bo.geo.stream(n, u(Uc)), [[Tc, qc], [Rc, Dc]]
+ }, n.projection = function(n){
+ return arguments.length ? (u = (e = n) ? n.stream || tr(n) : Et, t()) : e
+ }, n.context = function(n){
+ return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), "function" != typeof a && i.pointRadius(a), t()) : r
+ }, n.pointRadius = function(t){
+ return arguments.length ? (a = "function" == typeof t ? t : (i.pointRadius(+t), +t), n) : a
+ }, n.projection(Bo.geo.albersUsa()).context(null)
+ }, Bo.geo.transform = function(n){
+ return {
+ stream: function(t){
+ var e = new er(t);
+ for (var r in n)e[r] = n[r];
+ return e
+ }
+ }
+ }, er.prototype = {
+ point : function(n, t){
+ this.stream.point(n, t)
+ }, sphere : function(){
+ this.stream.sphere()
+ }, lineStart : function(){
+ this.stream.lineStart()
+ }, lineEnd : function(){
+ this.stream.lineEnd()
+ }, polygonStart: function(){
+ this.stream.polygonStart()
+ }, polygonEnd : function(){
+ this.stream.polygonEnd()
+ }
+ }, Bo.geo.projection = ur, Bo.geo.projectionMutator = ir, (Bo.geo.equirectangular = function(){
+ return ur(ar)
+ }).raw = ar.invert = ar, Bo.geo.rotation = function(n){
+ function t(t){
+ return t = n(t[0] * La, t[1] * La), t[0] *= Ta, t[1] *= Ta, t
+ }
+
+ return n = lr(n[0] % 360 * La, n[1] * La, n.length > 2 ? n[2] * La : 0), t.invert = function(t){
+ return t = n.invert(t[0] * La, t[1] * La), t[0] *= Ta, t[1] *= Ta, t
+ }, t
+ }, cr.invert = ar, Bo.geo.circle = function(){
+ function n(){
+ var n = "function" == typeof r ? r.apply(this, arguments) : r, t = lr(-n[0] * La, -n[1] * La, 0).invert, u = [];
+ return e(null, null, 1, {
+ point: function(n, e){
+ u.push(n = t(n, e)), n[0] *= Ta, n[1] *= Ta
+ }
+ }), {type: "Polygon", coordinates: [u]}
+ }
+
+ var t, e, r = [0, 0], u = 6;
+ return n.origin = function(t){
+ return arguments.length ? (r = t, n) : r
+ }, n.angle = function(r){
+ return arguments.length ? (e = gr((t = +r) * La, u * La), n) : t
+ }, n.precision = function(r){
+ return arguments.length ? (e = gr(t * La, (u = +r) * La), n) : u
+ }, n.angle(90)
+ }, Bo.geo.distance = function(n, t){
+ var e, r = (t[0] - n[0]) * La, u = n[1] * La, i = t[1] * La, o = Math.sin(r), a = Math.cos(r), c = Math.sin(u), l = Math.cos(u), s = Math.sin(i), f = Math.cos(i);
+ return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)
+ }, Bo.geo.graticule = function(){
+ function n(){
+ return {type: "MultiLineString", coordinates: t()}
+ }
+
+ function t(){
+ return Bo.range(Math.ceil(i / d) * d, u, d).map(h).concat(Bo.range(Math.ceil(l / m) * m, c, m).map(g)).concat(Bo.range(Math.ceil(r / p) * p, e, p).filter(function(n){
+ return ca(n % d) > Na
+ }).map(s)).concat(Bo.range(Math.ceil(a / v) * v, o, v).filter(function(n){
+ return ca(n % m) > Na
+ }).map(f))
+ }
+
+ var e, r, u, i, o, a, c, l, s, f, h, g, p = 10, v = p, d = 90, m = 360, y = 2.5;
+ return n.lines = function(){
+ return t().map(function(n){
+ return {type: "LineString", coordinates: n}
+ })
+ }, n.outline = function(){
+ return {
+ type : "Polygon",
+ coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]
+ }
+ }, n.extent = function(t){
+ return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()
+ }, n.majorExtent = function(t){
+ return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [[i, l], [u, c]]
+ }, n.minorExtent = function(t){
+ return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [[r, a], [e, o]]
+ }, n.step = function(t){
+ return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()
+ }, n.majorStep = function(t){
+ return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]
+ }, n.minorStep = function(t){
+ return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]
+ }, n.precision = function(t){
+ return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y
+ }, n.majorExtent([[-180, -90 + Na], [180, 90 - Na]]).minorExtent([[-180, -80 - Na], [180, 80 + Na]])
+ }, Bo.geo.greatArc = function(){
+ function n(){
+ return {type: "LineString", coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]}
+ }
+
+ var t, e, r = mr, u = yr;
+ return n.distance = function(){
+ return Bo.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))
+ }, n.source = function(e){
+ return arguments.length ? (r = e, t = "function" == typeof e ? null : e, n) : r
+ }, n.target = function(t){
+ return arguments.length ? (u = t, e = "function" == typeof t ? null : t, n) : u
+ }, n.precision = function(){
+ return arguments.length ? n : 0
+ }, n
+ }, Bo.geo.interpolate = function(n, t){
+ return xr(n[0] * La, n[1] * La, t[0] * La, t[1] * La)
+ }, Bo.geo.length = function(n){
+ return Fc = 0, Bo.geo.stream(n, Hc), Fc
+ };
+ var Fc, Hc = {sphere: y, point: y, lineStart: Mr, lineEnd: y, polygonStart: y, polygonEnd: y}, Oc = _r(function(n){
+ return Math.sqrt(2 / (1 + n))
+ }, function(n){
+ return 2 * Math.asin(n / 2)
+ });
+ (Bo.geo.azimuthalEqualArea = function(){
+ return ur(Oc)
+ }).raw = Oc;
+ var Yc = _r(function(n){
+ var t = Math.acos(n);
+ return t && t / Math.sin(t)
+ }, Et);
+ (Bo.geo.azimuthalEquidistant = function(){
+ return ur(Yc)
+ }).raw = Yc, (Bo.geo.conicConformal = function(){
+ return Ie(br)
+ }).raw = br, (Bo.geo.conicEquidistant = function(){
+ return Ie(wr)
+ }).raw = wr;
+ var Ic = _r(function(n){
+ return 1 / n
+ }, Math.atan);
+ (Bo.geo.gnomonic = function(){
+ return ur(Ic)
+ }).raw = Ic, Sr.invert = function(n, t){
+ return [n, 2 * Math.atan(Math.exp(t)) - Ca]
+ }, (Bo.geo.mercator = function(){
+ return kr(Sr)
+ }).raw = Sr;
+ var Zc = _r(function(){
+ return 1
+ }, Math.asin);
+ (Bo.geo.orthographic = function(){
+ return ur(Zc)
+ }).raw = Zc;
+ var Vc = _r(function(n){
+ return 1 / (1 + n)
+ }, function(n){
+ return 2 * Math.atan(n)
+ });
+ (Bo.geo.stereographic = function(){
+ return ur(Vc)
+ }).raw = Vc, Er.invert = function(n, t){
+ return [-t, 2 * Math.atan(Math.exp(n)) - Ca]
+ }, (Bo.geo.transverseMercator = function(){
+ var n = kr(Er), t = n.center, e = n.rotate;
+ return n.center = function(n){
+ return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])
+ }, n.rotate = function(n){
+ return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])
+ }, e([0, 0, 90])
+ }).raw = Er, Bo.geom = {}, Bo.geom.hull = function(n){
+ function t(n){
+ if (n.length < 3)return [];
+ var t, u = kt(e), i = kt(r), o = n.length, a = [], c = [];
+ for (t = 0; o > t; t++)a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);
+ for (a.sort(zr), t = 0; o > t; t++)c.push([a[t][0], -a[t][1]]);
+ var l = Nr(a), s = Nr(c), f = s[0] === l[0], h = s[s.length - 1] === l[l.length - 1], g = [];
+ for (t = l.length - 1; t >= 0; --t)g.push(n[a[l[t]][2]]);
+ for (t = +f; t < s.length - h; ++t)g.push(n[a[s[t]][2]]);
+ return g
+ }
+
+ var e = Ar, r = Cr;
+ return arguments.length ? t(n) : (t.x = function(n){
+ return arguments.length ? (e = n, t) : e
+ }, t.y = function(n){
+ return arguments.length ? (r = n, t) : r
+ }, t)
+ }, Bo.geom.polygon = function(n){
+ return ga(n, Xc), n
+ };
+ var Xc = Bo.geom.polygon.prototype = [];
+ Xc.area = function(){
+ for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;)n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];
+ return .5 * u
+ }, Xc.centroid = function(n){
+ var t, e, r = -1, u = this.length, i = 0, o = 0, a = this[u - 1];
+ for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;)t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;
+ return [i * n, o * n]
+ }, Xc.clip = function(n){
+ for (var t, e, r, u, i, o, a = qr(n), c = -1, l = this.length - qr(this), s = this[l - 1]; ++c < l;) {
+ for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;)o = t[e], Lr(o, s, u) ? (Lr(i, s, u) || n.push(Tr(i, o, s, u)), n.push(o)) : Lr(i, s, u) && n.push(Tr(i, o, s, u)), i = o;
+ a && n.push(n[0]), s = u
+ }
+ return n
+ };
+ var $c, Bc, Wc, Jc, Gc, Kc = [], Qc = [];
+ Or.prototype.prepare = function(){
+ for (var n, t = this.edges, e = t.length; e--;)n = t[e].edge, n.b && n.a || t.splice(e, 1);
+ return t.sort(Ir), t.length
+ }, Qr.prototype = {
+ start : function(){
+ return this.edge.l === this.site ? this.edge.a : this.edge.b
+ }, end: function(){
+ return this.edge.l === this.site ? this.edge.b : this.edge.a
+ }
+ }, nu.prototype = {
+ insert : function(n, t){
+ var e, r, u;
+ if (n) {
+ if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {
+ for (n = n.R; n.L;)n = n.L;
+ n.L = t
+ } else n.R = t;
+ e = n
+ } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);
+ for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;)r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;
+ this._.C = !1
+ }, remove: function(n){
+ n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;
+ var t, e, r, u = n.U, i = n.L, o = n.R;
+ if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {
+ if (n && n.C)return n.C = !1, void 0;
+ do {
+ if (n === this._)break;
+ if (n === u.L) {
+ if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {
+ t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;
+ break
+ }
+ } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {
+ t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;
+ break
+ }
+ t.C = !0, n = u, u = u.U
+ } while (!n.C);
+ n && (n.C = !1)
+ }
+ }
+ }, Bo.geom.voronoi = function(n){
+ function t(n){
+ var t = new Array(n.length), r = a[0][0], u = a[0][1], i = a[1][0], o = a[1][1];
+ return iu(e(n), a).cells.forEach(function(e, a){
+ var c = e.edges, l = e.site, s = t[a] = c.length ? c.map(function(n){
+ var t = n.start();
+ return [t.x, t.y]
+ }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [[r, o], [i, o], [i, u], [r, u]] : [];
+ s.point = n[a]
+ }), t
+ }
+
+ function e(n){
+ return n.map(function(n, t){
+ return {x: Math.round(i(n, t) / Na) * Na, y: Math.round(o(n, t) / Na) * Na, i: t}
+ })
+ }
+
+ var r = Ar, u = Cr, i = r, o = u, a = nl;
+ return n ? t(n) : (t.links = function(n){
+ return iu(e(n)).edges.filter(function(n){
+ return n.l && n.r
+ }).map(function(t){
+ return {source: n[t.l.i], target: n[t.r.i]}
+ })
+ }, t.triangles = function(n){
+ var t = [];
+ return iu(e(n)).cells.forEach(function(e, r){
+ for (var u, i, o = e.site, a = e.edges.sort(Ir), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;)u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])
+ }), t
+ }, t.x = function(n){
+ return arguments.length ? (i = kt(r = n), t) : r
+ }, t.y = function(n){
+ return arguments.length ? (o = kt(u = n), t) : u
+ }, t.clipExtent = function(n){
+ return arguments.length ? (a = null == n ? nl : n, t) : a === nl ? null : a
+ }, t.size = function(n){
+ return arguments.length ? t.clipExtent(n && [[0, 0], n]) : a === nl ? null : a && a[1]
+ }, t)
+ };
+ var nl = [[-1e6, -1e6], [1e6, 1e6]];
+ Bo.geom.delaunay = function(n){
+ return Bo.geom.voronoi().triangles(n)
+ }, Bo.geom.quadtree = function(n, t, e, r, u){
+ function i(n){
+ function i(n, t, e, r, u, i, o, a){
+ if (!isNaN(e) && !isNaN(r))if (n.leaf) {
+ var c = n.x, s = n.y;
+ if (null != c)if (ca(c - e) + ca(s - r) < .01)l(n, t, e, r, u, i, o, a); else {
+ var f = n.point;
+ n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)
+ } else n.x = e, n.y = r, n.point = t
+ } else l(n, t, e, r, u, i, o, a)
+ }
+
+ function l(n, t, e, r, u, o, a, c){
+ var l = .5 * (u + a), s = .5 * (o + c), f = e >= l, h = r >= s, g = (h << 1) + f;
+ n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)
+ }
+
+ var s, f, h, g, p, v, d, m, y, x = kt(a), M = kt(c);
+ if (null != t)v = t, d = e, m = r, y = u; else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)for (g = 0; p > g; ++g)s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y); else for (g = 0; p > g; ++g) {
+ var _ = +x(s = n[g], g), b = +M(s, g);
+ v > _ && (v = _), d > b && (d = b), _ > m && (m = _), b > y && (y = b), f.push(_), h.push(b)
+ }
+ var w = m - v, S = y - d;
+ w > S ? y = d + w : m = v + S;
+ var k = su();
+ if (k.add = function(n){
+ i(k, n, +x(n, ++g), +M(n, g), v, d, m, y)
+ }, k.visit = function(n){
+ fu(n, k, v, d, m, y)
+ }, g = -1, null == t) {
+ for (; ++g < p;)i(k, n[g], f[g], h[g], v, d, m, y);
+ --g
+ } else n.forEach(k.add);
+ return f = h = n = s = null, k
+ }
+
+ var o, a = Ar, c = Cr;
+ return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n){
+ return arguments.length ? (a = n, i) : a
+ }, i.y = function(n){
+ return arguments.length ? (c = n, i) : c
+ }, i.extent = function(n){
+ return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [[t, e], [r, u]]
+ }, i.size = function(n){
+ return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]
+ }, i)
+ }, Bo.interpolateRgb = hu, Bo.interpolateObject = gu, Bo.interpolateNumber = pu, Bo.interpolateString = vu;
+ var tl = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, el = new RegExp(tl.source, "g");
+ Bo.interpolate = du, Bo.interpolators = [function(n, t){
+ var e = typeof t;
+ return ("string" === e ? $a.has(t) || /^(#|rgb\(|hsl\()/.test(t) ? hu : vu : t instanceof it ? hu : Array.isArray(t) ? mu : "object" === e && isNaN(t) ? gu : pu)(n, t)
+ }], Bo.interpolateArray = mu;
+ var rl = function(){
+ return Et
+ }, ul = Bo.map({
+ linear : rl, poly: Su, quad: function(){
+ return _u
+ }, cubic : function(){
+ return bu
+ }, sin : function(){
+ return ku
+ }, exp : function(){
+ return Eu
+ }, circle : function(){
+ return Au
+ }, elastic: Cu, back: Nu, bounce: function(){
+ return zu
+ }
+ }), il = Bo.map({
+ "in": Et, out: xu, "in-out": Mu, "out-in": function(n){
+ return Mu(xu(n))
+ }
+ });
+ Bo.ease = function(n){
+ var t = n.indexOf("-"), e = t >= 0 ? n.slice(0, t) : n, r = t >= 0 ? n.slice(t + 1) : "in";
+ return e = ul.get(e) || rl, r = il.get(r) || Et, yu(r(e.apply(null, Wo.call(arguments, 1))))
+ }, Bo.interpolateHcl = Lu, Bo.interpolateHsl = Tu, Bo.interpolateLab = qu, Bo.interpolateRound = Ru, Bo.transform = function(n){
+ var t = Go.createElementNS(Bo.ns.prefix.svg, "g");
+ return (Bo.transform = function(n){
+ if (null != n) {
+ t.setAttribute("transform", n);
+ var e = t.transform.baseVal.consolidate()
+ }
+ return new Du(e ? e.matrix : ol)
+ })(n)
+ }, Du.prototype.toString = function(){
+ return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"
+ };
+ var ol = {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0};
+ Bo.interpolateTransform = Fu, Bo.layout = {}, Bo.layout.bundle = function(){
+ return function(n){
+ for (var t = [], e = -1, r = n.length; ++e < r;)t.push(Yu(n[e]));
+ return t
+ }
+ }, Bo.layout.chord = function(){
+ function n(){
+ var n, l, f, h, g, p = {}, v = [], d = Bo.range(i), m = [];
+ for (e = [], r = [], n = 0, h = -1; ++h < i;) {
+ for (l = 0, g = -1; ++g < i;)l += u[h][g];
+ v.push(l), m.push(Bo.range(i)), n += l
+ }
+ for (o && d.sort(function(n, t){
+ return o(v[n], v[t])
+ }), a && m.forEach(function(n, t){
+ n.sort(function(n, e){
+ return a(u[t][n], u[t][e])
+ })
+ }), n = (Aa - s * i) / n, l = 0, h = -1; ++h < i;) {
+ for (f = l, g = -1; ++g < i;) {
+ var y = d[h], x = m[y][g], M = u[y][x], _ = l, b = l += M * n;
+ p[y + "-" + x] = {index: y, subindex: x, startAngle: _, endAngle: b, value: M}
+ }
+ r[y] = {index: y, startAngle: f, endAngle: l, value: (l - f) / n}, l += s
+ }
+ for (h = -1; ++h < i;)for (g = h - 1; ++g < i;) {
+ var w = p[h + "-" + g], S = p[g + "-" + h];
+ (w.value || S.value) && e.push(w.value < S.value ? {source: S, target: w} : {source: w, target: S})
+ }
+ c && t()
+ }
+
+ function t(){
+ e.sort(function(n, t){
+ return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)
+ })
+ }
+
+ var e, r, u, i, o, a, c, l = {}, s = 0;
+ return l.matrix = function(n){
+ return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u
+ }, l.padding = function(n){
+ return arguments.length ? (s = n, e = r = null, l) : s
+ }, l.sortGroups = function(n){
+ return arguments.length ? (o = n, e = r = null, l) : o
+ }, l.sortSubgroups = function(n){
+ return arguments.length ? (a = n, e = null, l) : a
+ }, l.sortChords = function(n){
+ return arguments.length ? (c = n, e && t(), l) : c
+ }, l.chords = function(){
+ return e || n(), e
+ }, l.groups = function(){
+ return r || n(), r
+ }, l
+ }, Bo.layout.force = function(){
+ function n(n){
+ return function(t, e, r, u){
+ if (t.point !== n) {
+ var i = t.cx - n.x, o = t.cy - n.y, a = u - e, c = i * i + o * o;
+ if (c > a * a / d) {
+ if (p > c) {
+ var l = t.charge / c;
+ n.px -= i * l, n.py -= o * l
+ }
+ return !0
+ }
+ if (t.point && c && p > c) {
+ var l = t.pointCharge / c;
+ n.px -= i * l, n.py -= o * l
+ }
+ }
+ return !t.charge
+ }
+ }
+
+ function t(n){
+ n.px = Bo.event.x, n.py = Bo.event.y, a.resume()
+ }
+
+ var e, r, u, i, o, a = {}, c = Bo.dispatch("start", "tick", "end"), l = [1, 1], s = .9, f = al, h = cl, g = -30, p = ll, v = .1, d = .64, m = [], y = [];
+ return a.tick = function(){
+ if ((r *= .99) < .005)return c.end({type: "end", alpha: r = 0}), !0;
+ var t, e, a, f, h, p, d, x, M, _ = m.length, b = y.length;
+ for (e = 0; b > e; ++e)a = y[e], f = a.source, h = a.target, x = h.x - f.x, M = h.y - f.y, (p = x * x + M * M) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, x *= p, M *= p, h.x -= x * (d = f.weight / (h.weight + f.weight)), h.y -= M * d, f.x += x * (d = 1 - d), f.y += M * d);
+ if ((d = r * v) && (x = l[0] / 2, M = l[1] / 2, e = -1, d))for (; ++e < _;)a = m[e], a.x += (x - a.x) * d, a.y += (M - a.y) * d;
+ if (g)for (Wu(t = Bo.geom.quadtree(m), r, o), e = -1; ++e < _;)(a = m[e]).fixed || t.visit(n(a));
+ for (e = -1; ++e < _;)a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);
+ c.tick({type: "tick", alpha: r})
+ }, a.nodes = function(n){
+ return arguments.length ? (m = n, a) : m
+ }, a.links = function(n){
+ return arguments.length ? (y = n, a) : y
+ }, a.size = function(n){
+ return arguments.length ? (l = n, a) : l
+ }, a.linkDistance = function(n){
+ return arguments.length ? (f = "function" == typeof n ? n : +n, a) : f
+ }, a.distance = a.linkDistance, a.linkStrength = function(n){
+ return arguments.length ? (h = "function" == typeof n ? n : +n, a) : h
+ }, a.friction = function(n){
+ return arguments.length ? (s = +n, a) : s
+ }, a.charge = function(n){
+ return arguments.length ? (g = "function" == typeof n ? n : +n, a) : g
+ }, a.chargeDistance = function(n){
+ return arguments.length ? (p = n * n, a) : Math.sqrt(p)
+ }, a.gravity = function(n){
+ return arguments.length ? (v = +n, a) : v
+ }, a.theta = function(n){
+ return arguments.length ? (d = n * n, a) : Math.sqrt(d)
+ }, a.alpha = function(n){
+ return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({
+ type : "start",
+ alpha: r = n
+ }), Bo.timer(a.tick)), a) : r
+ }, a.start = function(){
+ function n(n, r){
+ if (!e) {
+ for (e = new Array(c), a = 0; c > a; ++a)e[a] = [];
+ for (a = 0; l > a; ++a) {
+ var u = y[a];
+ e[u.source.index].push(u.target), e[u.target.index].push(u.source)
+ }
+ }
+ for (var i, o = e[t], a = -1, l = o.length; ++a < l;)if (!isNaN(i = o[a][n]))return i;
+ return Math.random() * r
+ }
+
+ var t, e, r, c = m.length, s = y.length, p = l[0], v = l[1];
+ for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;
+ for (t = 0; s > t; ++t)r = y[t], "number" == typeof r.source && (r.source = m[r.source]), "number" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;
+ for (t = 0; c > t; ++t)r = m[t], isNaN(r.x) && (r.x = n("x", p)), isNaN(r.y) && (r.y = n("y", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);
+ if (u = [], "function" == typeof f)for (t = 0; s > t; ++t)u[t] = +f.call(this, y[t], t); else for (t = 0; s > t; ++t)u[t] = f;
+ if (i = [], "function" == typeof h)for (t = 0; s > t; ++t)i[t] = +h.call(this, y[t], t); else for (t = 0; s > t; ++t)i[t] = h;
+ if (o = [], "function" == typeof g)for (t = 0; c > t; ++t)o[t] = +g.call(this, m[t], t); else for (t = 0; c > t; ++t)o[t] = g;
+ return a.resume()
+ }, a.resume = function(){
+ return a.alpha(.1)
+ }, a.stop = function(){
+ return a.alpha(0)
+ }, a.drag = function(){
+ return e || (e = Bo.behavior.drag().origin(Et).on("dragstart.force", Vu).on("drag.force", t).on("dragend.force", Xu)), arguments.length ? (this.on("mouseover.force", $u).on("mouseout.force", Bu).call(e), void 0) : e
+ }, Bo.rebind(a, c, "on")
+ };
+ var al = 20, cl = 1, ll = 1 / 0;
+ Bo.layout.hierarchy = function(){
+ function n(u){
+ var i, o = [u], a = [];
+ for (u.depth = 0; null != (i = o.pop());)if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {
+ for (var c, l, s; --c >= 0;)o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;
+ r && (i.value = 0), i.children = l
+ } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;
+ return Ku(u, function(n){
+ var e, u;
+ t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)
+ }), a
+ }
+
+ var t = ti, e = Qu, r = ni;
+ return n.sort = function(e){
+ return arguments.length ? (t = e, n) : t
+ }, n.children = function(t){
+ return arguments.length ? (e = t, n) : e
+ }, n.value = function(t){
+ return arguments.length ? (r = t, n) : r
+ }, n.revalue = function(t){
+ return r && (Gu(t, function(n){
+ n.children && (n.value = 0)
+ }), Ku(t, function(t){
+ var e;
+ t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)
+ })), t
+ }, n
+ }, Bo.layout.partition = function(){
+ function n(t, e, r, u){
+ var i = t.children;
+ if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {
+ var o, a, c, l = -1;
+ for (r = t.value ? r / t.value : 0; ++l < o;)n(a = i[l], e, c = a.value * r, u), e += c
+ }
+ }
+
+ function t(n){
+ var e = n.children, r = 0;
+ if (e && (u = e.length))for (var u, i = -1; ++i < u;)r = Math.max(r, t(e[i]));
+ return 1 + r
+ }
+
+ function e(e, i){
+ var o = r.call(this, e, i);
+ return n(o[0], 0, u[0], u[1] / t(o[0])), o
+ }
+
+ var r = Bo.layout.hierarchy(), u = [1, 1];
+ return e.size = function(n){
+ return arguments.length ? (u = n, e) : u
+ }, Ju(e, r)
+ }, Bo.layout.pie = function(){
+ function n(i){
+ var o = i.map(function(e, r){
+ return +t.call(n, e, r)
+ }), a = +("function" == typeof r ? r.apply(this, arguments) : r), c = (("function" == typeof u ? u.apply(this, arguments) : u) - a) / Bo.sum(o), l = Bo.range(i.length);
+ null != e && l.sort(e === sl ? function(n, t){
+ return o[t] - o[n]
+ } : function(n, t){
+ return e(i[n], i[t])
+ });
+ var s = [];
+ return l.forEach(function(n){
+ var t;
+ s[n] = {data: i[n], value: t = o[n], startAngle: a, endAngle: a += t * c}
+ }), s
+ }
+
+ var t = Number, e = sl, r = 0, u = Aa;
+ return n.value = function(e){
+ return arguments.length ? (t = e, n) : t
+ }, n.sort = function(t){
+ return arguments.length ? (e = t, n) : e
+ }, n.startAngle = function(t){
+ return arguments.length ? (r = t, n) : r
+ }, n.endAngle = function(t){
+ return arguments.length ? (u = t, n) : u
+ }, n
+ };
+ var sl = {};
+ Bo.layout.stack = function(){
+ function n(a, c){
+ if (!(h = a.length))return a;
+ var l = a.map(function(e, r){
+ return t.call(n, e, r)
+ }), s = l.map(function(t){
+ return t.map(function(t, e){
+ return [i.call(n, t, e), o.call(n, t, e)]
+ })
+ }), f = e.call(n, s, c);
+ l = Bo.permute(l, f), s = Bo.permute(s, f);
+ var h, g, p, v, d = r.call(n, s, c), m = l[0].length;
+ for (p = 0; m > p; ++p)for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g)u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);
+ return a
+ }
+
+ var t = Et, e = oi, r = ai, u = ii, i = ri, o = ui;
+ return n.values = function(e){
+ return arguments.length ? (t = e, n) : t
+ }, n.order = function(t){
+ return arguments.length ? (e = "function" == typeof t ? t : fl.get(t) || oi, n) : e
+ }, n.offset = function(t){
+ return arguments.length ? (r = "function" == typeof t ? t : hl.get(t) || ai, n) : r
+ }, n.x = function(t){
+ return arguments.length ? (i = t, n) : i
+ }, n.y = function(t){
+ return arguments.length ? (o = t, n) : o
+ }, n.out = function(t){
+ return arguments.length ? (u = t, n) : u
+ }, n
+ };
+ var fl = Bo.map({
+ "inside-out": function(n){
+ var t, e, r = n.length, u = n.map(ci), i = n.map(li), o = Bo.range(r).sort(function(n, t){
+ return u[n] - u[t]
+ }), a = 0, c = 0, l = [], s = [];
+ for (t = 0; r > t; ++t)e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));
+ return s.reverse().concat(l)
+ }, reverse : function(n){
+ return Bo.range(n.length).reverse()
+ }, "default": oi
+ }), hl = Bo.map({
+ silhouette: function(n){
+ var t, e, r, u = n.length, i = n[0].length, o = [], a = 0, c = [];
+ for (e = 0; i > e; ++e) {
+ for (t = 0, r = 0; u > t; t++)r += n[t][e][1];
+ r > a && (a = r), o.push(r)
+ }
+ for (e = 0; i > e; ++e)c[e] = (a - o[e]) / 2;
+ return c
+ }, wiggle : function(n){
+ var t, e, r, u, i, o, a, c, l, s = n.length, f = n[0], h = f.length, g = [];
+ for (g[0] = c = l = 0, e = 1; h > e; ++e) {
+ for (t = 0, u = 0; s > t; ++t)u += n[t][e][1];
+ for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {
+ for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r)o += (n[r][e][1] - n[r][e - 1][1]) / a;
+ i += o * n[t][e][1]
+ }
+ g[e] = c -= u ? i / u * a : 0, l > c && (l = c)
+ }
+ for (e = 0; h > e; ++e)g[e] -= l;
+ return g
+ }, expand : function(n){
+ var t, e, r, u = n.length, i = n[0].length, o = 1 / u, a = [];
+ for (e = 0; i > e; ++e) {
+ for (t = 0, r = 0; u > t; t++)r += n[t][e][1];
+ if (r)for (t = 0; u > t; t++)n[t][e][1] /= r; else for (t = 0; u > t; t++)n[t][e][1] = o
+ }
+ for (e = 0; i > e; ++e)a[e] = 0;
+ return a
+ }, zero : ai
+ });
+ Bo.layout.histogram = function(){
+ function n(n, i){
+ for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;)o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;
+ if (g > 0)for (i = -1; ++i < h;)a = l[i], a >= s[0] && a <= s[1] && (o = c[Bo.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));
+ return c
+ }
+
+ var t = !0, e = Number, r = gi, u = fi;
+ return n.value = function(t){
+ return arguments.length ? (e = t, n) : e
+ }, n.range = function(t){
+ return arguments.length ? (r = kt(t), n) : r
+ }, n.bins = function(t){
+ return arguments.length ? (u = "number" == typeof t ? function(n){
+ return hi(n, t)
+ } : kt(t), n) : u
+ }, n.frequency = function(e){
+ return arguments.length ? (t = !!e, n) : t
+ }, n
+ }, Bo.layout.pack = function(){
+ function n(n, i){
+ var o = e.call(this, n, i), a = o[0], c = u[0], l = u[1], s = null == t ? Math.sqrt : "function" == typeof t ? t : function(){
+ return t
+ };
+ if (a.x = a.y = 0, Ku(a, function(n){
+ n.r = +s(n.value)
+ }), Ku(a, yi), r) {
+ var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;
+ Ku(a, function(n){
+ n.r += f
+ }), Ku(a, yi), Ku(a, function(n){
+ n.r -= f
+ })
+ }
+ return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o
+ }
+
+ var t, e = Bo.layout.hierarchy().sort(pi), r = 0, u = [1, 1];
+ return n.size = function(t){
+ return arguments.length ? (u = t, n) : u
+ }, n.radius = function(e){
+ return arguments.length ? (t = null == e || "function" == typeof e ? e : +e, n) : t
+ }, n.padding = function(t){
+ return arguments.length ? (r = +t, n) : r
+ }, Ju(n, e)
+ }, Bo.layout.tree = function(){
+ function n(n, u){
+ var s = o.call(this, n, u), f = s[0], h = t(f);
+ if (Ku(h, e), h.parent.m = -h.z, Gu(h, r), l)Gu(f, i); else {
+ var g = f, p = f, v = f;
+ Gu(f, function(n){
+ n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)
+ });
+ var d = a(g, p) / 2 - g.x, m = c[0] / (p.x + a(p, g) / 2 + d), y = c[1] / (v.depth || 1);
+ Gu(f, function(n){
+ n.x = (n.x + d) * m, n.y = n.depth * y
+ })
+ }
+ return s
+ }
+
+ function t(n){
+ for (var t, e = {
+ A : null,
+ children: [n]
+ }, r = [e]; null != (t = r.pop());)for (var u, i = t.children, o = 0, a = i.length; a > o; ++o)r.push((i[o] = u = {
+ _ : i[o],
+ parent : t,
+ children: (u = i[o].children) && u.slice() || [],
+ A : null,
+ a : null,
+ z : 0,
+ m : 0,
+ c : 0,
+ s : 0,
+ t : null,
+ i : o
+ }).a = u);
+ return e.children[0]
+ }
+
+ function e(n){
+ var t = n.children, e = n.parent.children, r = n.i ? e[n.i - 1] : null;
+ if (t.length) {
+ Ai(n);
+ var i = (t[0].z + t[t.length - 1].z) / 2;
+ r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i
+ } else r && (n.z = r.z + a(n._, r._));
+ n.parent.A = u(n, r, n.parent.A || e[0])
+ }
+
+ function r(n){
+ n._.x = n.z + n.parent.m, n.m += n.parent.m
+ }
+
+ function u(n, t, e){
+ if (t) {
+ for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = ki(o), u = Si(u), o && u;)c = Si(c), i = ki(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ei(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;
+ o && !ki(i) && (i.t = o, i.m += f - s), u && !Si(c) && (c.t = u, c.m += l - h, e = n)
+ }
+ return e
+ }
+
+ function i(n){
+ n.x *= c[0], n.y = n.depth * c[1]
+ }
+
+ var o = Bo.layout.hierarchy().sort(null).value(null), a = wi, c = [1, 1], l = null;
+ return n.separation = function(t){
+ return arguments.length ? (a = t, n) : a
+ }, n.size = function(t){
+ return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c
+ }, n.nodeSize = function(t){
+ return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null
+ }, Ju(n, o)
+ }, Bo.layout.cluster = function(){
+ function n(n, i){
+ var o, a = t.call(this, n, i), c = a[0], l = 0;
+ Ku(c, function(n){
+ var t = n.children;
+ t && t.length ? (n.x = zi(t), n.y = Ni(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)
+ });
+ var s = Li(c), f = Ti(c), h = s.x - e(s, f) / 2, g = f.x + e(f, s) / 2;
+ return Ku(c, u ? function(n){
+ n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]
+ } : function(n){
+ n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]
+ }), a
+ }
+
+ var t = Bo.layout.hierarchy().sort(null).value(null), e = wi, r = [1, 1], u = !1;
+ return n.separation = function(t){
+ return arguments.length ? (e = t, n) : e
+ }, n.size = function(t){
+ return arguments.length ? (u = null == (r = t), n) : u ? null : r
+ }, n.nodeSize = function(t){
+ return arguments.length ? (u = null != (r = t), n) : u ? r : null
+ }, Ju(n, t)
+ }, Bo.layout.treemap = function(){
+ function n(n, t){
+ for (var e, r, u = -1, i = n.length; ++u < i;)r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r
+ }
+
+ function t(e){
+ var i = e.children;
+ if (i && i.length) {
+ var o, a, c, l = f(e), s = [], h = i.slice(), p = 1 / 0, v = "slice" === g ? l.dx : "dice" === g ? l.dy : "slice-dice" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);
+ for (n(h, l.dx * l.dy / e.value), s.area = 0; (c = h.length) > 0;)s.push(o = h[c - 1]), s.area += o.area, "squarify" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);
+ s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)
+ }
+ }
+
+ function e(t){
+ var r = t.children;
+ if (r && r.length) {
+ var i, o = f(t), a = r.slice(), c = [];
+ for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();)c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);
+ r.forEach(e)
+ }
+ }
+
+ function r(n, t){
+ for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));
+ return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0
+ }
+
+ function u(n, t, e, r){
+ var u, i = -1, o = n.length, a = e.x, l = e.y, s = t ? c(n.area / t) : 0;
+ if (t == e.dx) {
+ for ((r || s > e.dy) && (s = e.dy); ++i < o;)u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);
+ u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s
+ } else {
+ for ((r || s > e.dx) && (s = e.dx); ++i < o;)u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);
+ u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s
+ }
+ }
+
+ function i(r){
+ var u = o || a(r), i = u[0];
+ return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u
+ }
+
+ var o, a = Bo.layout.hierarchy(), c = Math.round, l = [1, 1], s = null, f = qi, h = !1, g = "squarify", p = .5 * (1 + Math.sqrt(5));
+ return i.size = function(n){
+ return arguments.length ? (l = n, i) : l
+ }, i.padding = function(n){
+ function t(t){
+ var e = n.call(i, t, t.depth);
+ return null == e ? qi(t) : Ri(t, "number" == typeof e ? [e, e, e, e] : e)
+ }
+
+ function e(t){
+ return Ri(t, n)
+ }
+
+ if (!arguments.length)return s;
+ var r;
+ return f = null == (s = n) ? qi : "function" == (r = typeof n) ? t : "number" === r ? (n = [n, n, n, n], e) : e, i
+ }, i.round = function(n){
+ return arguments.length ? (c = n ? Math.round : Number, i) : c != Number
+ }, i.sticky = function(n){
+ return arguments.length ? (h = n, o = null, i) : h
+ }, i.ratio = function(n){
+ return arguments.length ? (p = n, i) : p
+ }, i.mode = function(n){
+ return arguments.length ? (g = n + "", i) : g
+ }, Ju(i, a)
+ }, Bo.random = {
+ normal : function(n, t){
+ var e = arguments.length;
+ return 2 > e && (t = 1), 1 > e && (n = 0), function(){
+ var e, r, u;
+ do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);
+ return n + t * e * Math.sqrt(-2 * Math.log(u) / u)
+ }
+ }, logNormal: function(){
+ var n = Bo.random.normal.apply(Bo, arguments);
+ return function(){
+ return Math.exp(n())
+ }
+ }, bates : function(n){
+ var t = Bo.random.irwinHall(n);
+ return function(){
+ return t() / n
+ }
+ }, irwinHall: function(n){
+ return function(){
+ for (var t = 0, e = 0; n > e; e++)t += Math.random();
+ return t
+ }
+ }
+ }, Bo.scale = {};
+ var gl = {floor: Et, ceil: Et};
+ Bo.scale.linear = function(){
+ return Oi([0, 1], [0, 1], du, !1)
+ };
+ var pl = {s: 1, g: 1, p: 1, r: 1, e: 1};
+ Bo.scale.log = function(){
+ return Wi(Bo.scale.linear().domain([0, 1]), 10, !0, [1, 10])
+ };
+ var vl = Bo.format(".0e"), dl = {
+ floor : function(n){
+ return -Math.ceil(-n)
+ }, ceil: function(n){
+ return -Math.floor(-n)
+ }
+ };
+ Bo.scale.pow = function(){
+ return Ji(Bo.scale.linear(), 1, [0, 1])
+ }, Bo.scale.sqrt = function(){
+ return Bo.scale.pow().exponent(.5)
+ }, Bo.scale.ordinal = function(){
+ return Ki([], {t: "range", a: [[]]})
+ }, Bo.scale.category10 = function(){
+ return Bo.scale.ordinal().range(ml)
+ }, Bo.scale.category20 = function(){
+ return Bo.scale.ordinal().range(yl)
+ }, Bo.scale.category20b = function(){
+ return Bo.scale.ordinal().range(xl)
+ }, Bo.scale.category20c = function(){
+ return Bo.scale.ordinal().range(Ml)
+ };
+ var ml = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(yt), yl = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(yt), xl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(yt), Ml = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(yt);
+ Bo.scale.quantile = function(){
+ return Qi([], [])
+ }, Bo.scale.quantize = function(){
+ return no(0, 1, [0, 1])
+ }, Bo.scale.threshold = function(){
+ return to([.5], [0, 1])
+ }, Bo.scale.identity = function(){
+ return eo([0, 1])
+ }, Bo.svg = {}, Bo.svg.arc = function(){
+ function n(){
+ var n = t.apply(this, arguments), i = e.apply(this, arguments), o = r.apply(this, arguments) + _l, a = u.apply(this, arguments) + _l, c = (o > a && (c = o, o = a, a = c), a - o), l = Ea > c ? "0" : "1", s = Math.cos(o), f = Math.sin(o), h = Math.cos(a), g = Math.sin(a);
+ return c >= bl ? n ? "M0," + i + "A" + i + "," + i + " 0 1,1 0," + -i + "A" + i + "," + i + " 0 1,1 0," + i + "M0," + n + "A" + n + "," + n + " 0 1,0 0," + -n + "A" + n + "," + n + " 0 1,0 0," + n + "Z" : "M0," + i + "A" + i + "," + i + " 0 1,1 0," + -i + "A" + i + "," + i + " 0 1,1 0," + i + "Z" : n ? "M" + i * s + "," + i * f + "A" + i + "," + i + " 0 " + l + ",1 " + i * h + "," + i * g + "L" + n * h + "," + n * g + "A" + n + "," + n + " 0 " + l + ",0 " + n * s + "," + n * f + "Z" : "M" + i * s + "," + i * f + "A" + i + "," + i + " 0 " + l + ",1 " + i * h + "," + i * g + "L0,0" + "Z"
+ }
+
+ var t = ro, e = uo, r = io, u = oo;
+ return n.innerRadius = function(e){
+ return arguments.length ? (t = kt(e), n) : t
+ }, n.outerRadius = function(t){
+ return arguments.length ? (e = kt(t), n) : e
+ }, n.startAngle = function(t){
+ return arguments.length ? (r = kt(t), n) : r
+ }, n.endAngle = function(t){
+ return arguments.length ? (u = kt(t), n) : u
+ }, n.centroid = function(){
+ var n = (t.apply(this, arguments) + e.apply(this, arguments)) / 2, i = (r.apply(this, arguments) + u.apply(this, arguments)) / 2 + _l;
+ return [Math.cos(i) * n, Math.sin(i) * n]
+ }, n
+ };
+ var _l = -Ca, bl = Aa - Na;
+ Bo.svg.line = function(){
+ return ao(Et)
+ };
+ var wl = Bo.map({
+ linear : co,
+ "linear-closed" : lo,
+ step : so,
+ "step-before" : fo,
+ "step-after" : ho,
+ basis : xo,
+ "basis-open" : Mo,
+ "basis-closed" : _o,
+ bundle : bo,
+ cardinal : vo,
+ "cardinal-open" : go,
+ "cardinal-closed": po,
+ monotone : Co
+ });
+ wl.forEach(function(n, t){
+ t.key = n, t.closed = /-closed$/.test(n)
+ });
+ var Sl = [0, 2 / 3, 1 / 3, 0], kl = [0, 1 / 3, 2 / 3, 0], El = [0, 1 / 6, 2 / 3, 1 / 6];
+ Bo.svg.line.radial = function(){
+ var n = ao(No);
+ return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n
+ }, fo.reverse = ho, ho.reverse = fo, Bo.svg.area = function(){
+ return zo(Et)
+ }, Bo.svg.area.radial = function(){
+ var n = zo(No);
+ return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n
+ }, Bo.svg.chord = function(){
+ function n(n, a){
+ var c = t(this, i, n, a), l = t(this, o, n, a);
+ return "M" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + "Z"
+ }
+
+ function t(n, t, e, r){
+ var u = t.call(n, e, r), i = a.call(n, u, r), o = c.call(n, u, r) + _l, s = l.call(n, u, r) + _l;
+ return {r: i, a0: o, a1: s, p0: [i * Math.cos(o), i * Math.sin(o)], p1: [i * Math.cos(s), i * Math.sin(s)]}
+ }
+
+ function e(n, t){
+ return n.a0 == t.a0 && n.a1 == t.a1
+ }
+
+ function r(n, t, e){
+ return "A" + n + "," + n + " 0 " + +(e > Ea) + ",1 " + t
+ }
+
+ function u(n, t, e, r){
+ return "Q 0,0 " + r
+ }
+
+ var i = mr, o = yr, a = Lo, c = io, l = oo;
+ return n.radius = function(t){
+ return arguments.length ? (a = kt(t), n) : a
+ }, n.source = function(t){
+ return arguments.length ? (i = kt(t), n) : i
+ }, n.target = function(t){
+ return arguments.length ? (o = kt(t), n) : o
+ }, n.startAngle = function(t){
+ return arguments.length ? (c = kt(t), n) : c
+ }, n.endAngle = function(t){
+ return arguments.length ? (l = kt(t), n) : l
+ }, n
+ }, Bo.svg.diagonal = function(){
+ function n(n, u){
+ var i = t.call(this, n, u), o = e.call(this, n, u), a = (i.y + o.y) / 2, c = [i, {x: i.x, y: a}, {
+ x: o.x,
+ y: a
+ }, o];
+ return c = c.map(r), "M" + c[0] + "C" + c[1] + " " + c[2] + " " + c[3]
+ }
+
+ var t = mr, e = yr, r = To;
+ return n.source = function(e){
+ return arguments.length ? (t = kt(e), n) : t
+ }, n.target = function(t){
+ return arguments.length ? (e = kt(t), n) : e
+ }, n.projection = function(t){
+ return arguments.length ? (r = t, n) : r
+ }, n
+ }, Bo.svg.diagonal.radial = function(){
+ var n = Bo.svg.diagonal(), t = To, e = n.projection;
+ return n.projection = function(n){
+ return arguments.length ? e(qo(t = n)) : t
+ }, n
+ }, Bo.svg.symbol = function(){
+ function n(n, r){
+ return (Al.get(t.call(this, n, r)) || Po)(e.call(this, n, r))
+ }
+
+ var t = Do, e = Ro;
+ return n.type = function(e){
+ return arguments.length ? (t = kt(e), n) : t
+ }, n.size = function(t){
+ return arguments.length ? (e = kt(t), n) : e
+ }, n
+ };
+ var Al = Bo.map({
+ circle : Po, cross: function(n){
+ var t = Math.sqrt(n / 5) / 2;
+ return "M" + -3 * t + "," + -t + "H" + -t + "V" + -3 * t + "H" + t + "V" + -t + "H" + 3 * t + "V" + t + "H" + t + "V" + 3 * t + "H" + -t + "V" + t + "H" + -3 * t + "Z"
+ }, diamond : function(n){
+ var t = Math.sqrt(n / (2 * Ll)), e = t * Ll;
+ return "M0," + -t + "L" + e + ",0" + " 0," + t + " " + -e + ",0" + "Z"
+ }, square : function(n){
+ var t = Math.sqrt(n) / 2;
+ return "M" + -t + "," + -t + "L" + t + "," + -t + " " + t + "," + t + " " + -t + "," + t + "Z"
+ }, "triangle-down": function(n){
+ var t = Math.sqrt(n / zl), e = t * zl / 2;
+ return "M0," + e + "L" + t + "," + -e + " " + -t + "," + -e + "Z"
+ }, "triangle-up" : function(n){
+ var t = Math.sqrt(n / zl), e = t * zl / 2;
+ return "M0," + -e + "L" + t + "," + e + " " + -t + "," + e + "Z"
+ }
+ });
+ Bo.svg.symbolTypes = Al.keys();
+ var Cl, Nl, zl = Math.sqrt(3), Ll = Math.tan(30 * La), Tl = [], ql = 0;
+ Tl.call = ya.call, Tl.empty = ya.empty, Tl.node = ya.node, Tl.size = ya.size, Bo.transition = function(n){
+ return arguments.length ? Cl ? n.transition() : n : _a.transition()
+ }, Bo.transition.prototype = Tl, Tl.select = function(n){
+ var t, e, r, u = this.id, i = [];
+ n = k(n);
+ for (var o = -1, a = this.length; ++o < a;) {
+ i.push(t = []);
+ for (var c = this[o], l = -1, s = c.length; ++l < s;)(r = c[l]) && (e = n.call(r, r.__data__, l, o)) ? ("__data__"in r && (e.__data__ = r.__data__), Ho(e, l, u, r.__transition__[u]), t.push(e)) : t.push(null)
+ }
+ return Uo(i, u)
+ }, Tl.selectAll = function(n){
+ var t, e, r, u, i, o = this.id, a = [];
+ n = E(n);
+ for (var c = -1, l = this.length; ++c < l;)for (var s = this[c], f = -1, h = s.length; ++f < h;)if (r = s[f]) {
+ i = r.__transition__[o], e = n.call(r, r.__data__, f, c), a.push(t = []);
+ for (var g = -1, p = e.length; ++g < p;)(u = e[g]) && Ho(u, g, o, i), t.push(u)
+ }
+ return Uo(a, o)
+ }, Tl.filter = function(n){
+ var t, e, r, u = [];
+ "function" != typeof n && (n = U(n));
+ for (var i = 0, o = this.length; o > i; i++) {
+ u.push(t = []);
+ for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)
+ }
+ return Uo(u, this.id)
+ }, Tl.tween = function(n, t){
+ var e = this.id;
+ return arguments.length < 2 ? this.node().__transition__[e].tween.get(n) : F(this, null == t ? function(t){
+ t.__transition__[e].tween.remove(n)
+ } : function(r){
+ r.__transition__[e].tween.set(n, t)
+ })
+ }, Tl.attr = function(n, t){
+ function e(){
+ this.removeAttribute(a)
+ }
+
+ function r(){
+ this.removeAttributeNS(a.space, a.local)
+ }
+
+ function u(n){
+ return null == n ? e : (n += "", function(){
+ var t, e = this.getAttribute(a);
+ return e !== n && (t = o(e, n), function(n){
+ this.setAttribute(a, t(n))
+ })
+ })
+ }
+
+ function i(n){
+ return null == n ? r : (n += "", function(){
+ var t, e = this.getAttributeNS(a.space, a.local);
+ return e !== n && (t = o(e, n), function(n){
+ this.setAttributeNS(a.space, a.local, t(n))
+ })
+ })
+ }
+
+ if (arguments.length < 2) {
+ for (t in n)this.attr(t, n[t]);
+ return this
+ }
+ var o = "transform" == n ? Fu : du, a = Bo.ns.qualify(n);
+ return jo(this, "attr." + n, t, a.local ? i : u)
+ }, Tl.attrTween = function(n, t){
+ function e(n, e){
+ var r = t.call(this, n, e, this.getAttribute(u));
+ return r && function(n){
+ this.setAttribute(u, r(n))
+ }
+ }
+
+ function r(n, e){
+ var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));
+ return r && function(n){
+ this.setAttributeNS(u.space, u.local, r(n))
+ }
+ }
+
+ var u = Bo.ns.qualify(n);
+ return this.tween("attr." + n, u.local ? r : e)
+ }, Tl.style = function(n, t, e){
+ function r(){
+ this.style.removeProperty(n)
+ }
+
+ function u(t){
+ return null == t ? r : (t += "", function(){
+ var r, u = Qo.getComputedStyle(this, null).getPropertyValue(n);
+ return u !== t && (r = du(u, t), function(t){
+ this.style.setProperty(n, r(t), e)
+ })
+ })
+ }
+
+ var i = arguments.length;
+ if (3 > i) {
+ if ("string" != typeof n) {
+ 2 > i && (t = "");
+ for (e in n)this.style(e, n[e], t);
+ return this
+ }
+ e = ""
+ }
+ return jo(this, "style." + n, t, u)
+ }, Tl.styleTween = function(n, t, e){
+ function r(r, u){
+ var i = t.call(this, r, u, Qo.getComputedStyle(this, null).getPropertyValue(n));
+ return i && function(t){
+ this.style.setProperty(n, i(t), e)
+ }
+ }
+
+ return arguments.length < 3 && (e = ""), this.tween("style." + n, r)
+ }, Tl.text = function(n){
+ return jo(this, "text", n, Fo)
+ }, Tl.remove = function(){
+ return this.each("end.transition", function(){
+ var n;
+ this.__transition__.count < 2 && (n = this.parentNode) && n.removeChild(this)
+ })
+ }, Tl.ease = function(n){
+ var t = this.id;
+ return arguments.length < 1 ? this.node().__transition__[t].ease : ("function" != typeof n && (n = Bo.ease.apply(Bo, arguments)), F(this, function(e){
+ e.__transition__[t].ease = n
+ }))
+ }, Tl.delay = function(n){
+ var t = this.id;
+ return arguments.length < 1 ? this.node().__transition__[t].delay : F(this, "function" == typeof n ? function(e, r, u){
+ e.__transition__[t].delay = +n.call(e, e.__data__, r, u)
+ } : (n = +n, function(e){
+ e.__transition__[t].delay = n
+ }))
+ }, Tl.duration = function(n){
+ var t = this.id;
+ return arguments.length < 1 ? this.node().__transition__[t].duration : F(this, "function" == typeof n ? function(e, r, u){
+ e.__transition__[t].duration = Math.max(1, n.call(e, e.__data__, r, u))
+ } : (n = Math.max(1, n), function(e){
+ e.__transition__[t].duration = n
+ }))
+ }, Tl.each = function(n, t){
+ var e = this.id;
+ if (arguments.length < 2) {
+ var r = Nl, u = Cl;
+ Cl = e, F(this, function(t, r, u){
+ Nl = t.__transition__[e], n.call(t, t.__data__, r, u)
+ }), Nl = r, Cl = u
+ } else F(this, function(r){
+ var u = r.__transition__[e];
+ (u.event || (u.event = Bo.dispatch("start", "end"))).on(n, t)
+ });
+ return this
+ }, Tl.transition = function(){
+ for (var n, t, e, r, u = this.id, i = ++ql, o = [], a = 0, c = this.length; c > a; a++) {
+ o.push(n = []);
+ for (var t = this[a], l = 0, s = t.length; s > l; l++)(e = t[l]) && (r = Object.create(e.__transition__[u]), r.delay += r.duration, Ho(e, l, i, r)), n.push(e)
+ }
+ return Uo(o, i)
+ }, Bo.svg.axis = function(){
+ function n(n){
+ n.each(function(){
+ var n, l = Bo.select(this), s = this.__chart__ || e, f = this.__chart__ = e.copy(), h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c, g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : Et : t, p = l.selectAll(".tick").data(h, f), v = p.enter().insert("g", ".domain").attr("class", "tick").style("opacity", Na), d = Bo.transition(p.exit()).style("opacity", Na).remove(), m = Bo.transition(p.order()).style("opacity", 1), y = Math.max(u, 0) + o, x = Pi(f), M = l.selectAll(".domain").data([0]), _ = (M.enter().append("path").attr("class", "domain"), Bo.transition(M));
+ v.append("line"), v.append("text");
+ var b, w, S, k, E = v.select("line"), A = m.select("line"), C = p.select("text").text(g), N = v.select("text"), z = m.select("text"), L = "top" === r || "left" === r ? -1 : 1;
+ if ("bottom" === r || "top" === r ? (n = Oo, b = "x", S = "y", w = "x2", k = "y2", C.attr("dy", 0 > L ? "0em" : ".71em").style("text-anchor", "middle"), _.attr("d", "M" + x[0] + "," + L * i + "V0H" + x[1] + "V" + L * i)) : (n = Yo, b = "y", S = "x", w = "y2", k = "x2", C.attr("dy", ".32em").style("text-anchor", 0 > L ? "end" : "start"), _.attr("d", "M" + L * i + "," + x[0] + "H0V" + x[1] + "H" + L * i)), E.attr(k, L * u), N.attr(S, L * y), A.attr(w, 0).attr(k, L * u), z.attr(b, 0).attr(S, L * y), f.rangeBand) {
+ var T = f, q = T.rangeBand() / 2;
+ s = f = function(n){
+ return T(n) + q
+ }
+ } else s.rangeBand ? s = f : d.call(n, f, s);
+ v.call(n, s, f), m.call(n, f, f)
+ })
+ }
+
+ var t, e = Bo.scale.linear(), r = Rl, u = 6, i = 6, o = 3, a = [10], c = null;
+ return n.scale = function(t){
+ return arguments.length ? (e = t, n) : e
+ }, n.orient = function(t){
+ return arguments.length ? (r = t in Dl ? t + "" : Rl, n) : r
+ }, n.ticks = function(){
+ return arguments.length ? (a = arguments, n) : a
+ }, n.tickValues = function(t){
+ return arguments.length ? (c = t, n) : c
+ }, n.tickFormat = function(e){
+ return arguments.length ? (t = e, n) : t
+ }, n.tickSize = function(t){
+ var e = arguments.length;
+ return e ? (u = +t, i = +arguments[e - 1], n) : u
+ }, n.innerTickSize = function(t){
+ return arguments.length ? (u = +t, n) : u
+ }, n.outerTickSize = function(t){
+ return arguments.length ? (i = +t, n) : i
+ }, n.tickPadding = function(t){
+ return arguments.length ? (o = +t, n) : o
+ }, n.tickSubdivide = function(){
+ return arguments.length && n
+ }, n
+ };
+ var Rl = "bottom", Dl = {top: 1, right: 1, bottom: 1, left: 1};
+ Bo.svg.brush = function(){
+ function n(i){
+ i.each(function(){
+ var i = Bo.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", u).on("touchstart.brush", u), o = i.selectAll(".background").data([0]);
+ o.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"), i.selectAll(".extent").data([0]).enter().append("rect").attr("class", "extent").style("cursor", "move");
+ var a = i.selectAll(".resize").data(p, Et);
+ a.exit().remove(), a.enter().append("g").attr("class", function(n){
+ return "resize " + n
+ }).style("cursor", function(n){
+ return Pl[n]
+ }).append("rect").attr("x", function(n){
+ return /[ew]$/.test(n) ? -3 : null
+ }).attr("y", function(n){
+ return /^[ns]/.test(n) ? -3 : null
+ }).attr("width", 6).attr("height", 6).style("visibility", "hidden"), a.style("display", n.empty() ? "none" : null);
+ var s, f = Bo.transition(i), h = Bo.transition(o);
+ c && (s = Pi(c), h.attr("x", s[0]).attr("width", s[1] - s[0]), e(f)), l && (s = Pi(l), h.attr("y", s[0]).attr("height", s[1] - s[0]), r(f)), t(f)
+ })
+ }
+
+ function t(n){
+ n.selectAll(".resize").attr("transform", function(n){
+ return "translate(" + s[+/e$/.test(n)] + "," + f[+/^s/.test(n)] + ")"
+ })
+ }
+
+ function e(n){
+ n.select(".extent").attr("x", s[0]), n.selectAll(".extent,.n>rect,.s>rect").attr("width", s[1] - s[0])
+ }
+
+ function r(n){
+ n.select(".extent").attr("y", f[0]), n.selectAll(".extent,.e>rect,.w>rect").attr("height", f[1] - f[0])
+ }
+
+ function u(){
+ function u(){
+ 32 == Bo.event.keyCode && (C || (y = null, z[0] -= s[1], z[1] -= f[1], C = 2), _())
+ }
+
+ function p(){
+ 32 == Bo.event.keyCode && 2 == C && (z[0] += s[1], z[1] += f[1], C = 0, _())
+ }
+
+ function v(){
+ var n = Bo.mouse(M), u = !1;
+ x && (n[0] += x[0], n[1] += x[1]), C || (Bo.event.altKey ? (y || (y = [(s[0] + s[1]) / 2, (f[0] + f[1]) / 2]), z[0] = s[+(n[0] < y[0])], z[1] = f[+(n[1] < y[1])]) : y = null), E && d(n, c, 0) && (e(S), u = !0), A && d(n, l, 1) && (r(S), u = !0), u && (t(S), w({
+ type: "brush",
+ mode: C ? "move" : "resize"
+ }))
+ }
+
+ function d(n, t, e){
+ var r, u, a = Pi(t), c = a[0], l = a[1], p = z[e], v = e ? f : s, d = v[1] - v[0];
+ return C && (c -= p, l -= d + p), r = (e ? g : h) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += p) + d : (y && (p = Math.max(c, Math.min(l, 2 * y[e] - r))), r > p ? (u = r, r = p) : u = p), v[0] != r || v[1] != u ? (e ? o = null : i = null, v[0] = r, v[1] = u, !0) : void 0
+ }
+
+ function m(){
+ v(), S.style("pointer-events", "all").selectAll(".resize").style("display", n.empty() ? "none" : null), Bo.select("body").style("cursor", null), L.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null), N(), w({type: "brushend"})
+ }
+
+ var y, x, M = this, b = Bo.select(Bo.event.target), w = a.of(M, arguments), S = Bo.select(M), k = b.datum(), E = !/^(n|s)$/.test(k) && c, A = !/^(e|w)$/.test(k) && l, C = b.classed("extent"), N = X(), z = Bo.mouse(M), L = Bo.select(Qo).on("keydown.brush", u).on("keyup.brush", p);
+ if (Bo.event.changedTouches ? L.on("touchmove.brush", v).on("touchend.brush", m) : L.on("mousemove.brush", v).on("mouseup.brush", m), S.interrupt().selectAll("*").interrupt(), C)z[0] = s[0] - z[0], z[1] = f[0] - z[1]; else if (k) {
+ var T = +/w$/.test(k), q = +/^n/.test(k);
+ x = [s[1 - T] - z[0], f[1 - q] - z[1]], z[0] = s[T], z[1] = f[q]
+ } else Bo.event.altKey && (y = z.slice());
+ S.style("pointer-events", "none").selectAll(".resize").style("display", null), Bo.select("body").style("cursor", b.style("cursor")), w({type: "brushstart"}), v()
+ }
+
+ var i, o, a = w(n, "brushstart", "brush", "brushend"), c = null, l = null, s = [0, 0], f = [0, 0], h = !0, g = !0, p = Ul[0];
+ return n.event = function(n){
+ n.each(function(){
+ var n = a.of(this, arguments), t = {x: s, y: f, i: i, j: o}, e = this.__chart__ || t;
+ this.__chart__ = t, Cl ? Bo.select(this).transition().each("start.brush", function(){
+ i = e.i, o = e.j, s = e.x, f = e.y, n({type: "brushstart"})
+ }).tween("brush:brush", function(){
+ var e = mu(s, t.x), r = mu(f, t.y);
+ return i = o = null, function(u){
+ s = t.x = e(u), f = t.y = r(u), n({type: "brush", mode: "resize"})
+ }
+ }).each("end.brush", function(){
+ i = t.i, o = t.j, n({type: "brush", mode: "resize"}), n({type: "brushend"})
+ }) : (n({type: "brushstart"}), n({type: "brush", mode: "resize"}), n({type: "brushend"}))
+ })
+ }, n.x = function(t){
+ return arguments.length ? (c = t, p = Ul[!c << 1 | !l], n) : c
+ }, n.y = function(t){
+ return arguments.length ? (l = t, p = Ul[!c << 1 | !l], n) : l
+ }, n.clamp = function(t){
+ return arguments.length ? (c && l ? (h = !!t[0], g = !!t[1]) : c ? h = !!t : l && (g = !!t), n) : c && l ? [h, g] : c ? h : l ? g : null
+ }, n.extent = function(t){
+ var e, r, u, a, h;
+ return arguments.length ? (c && (e = t[0], r = t[1], l && (e = e[0], r = r[0]), i = [e, r], c.invert && (e = c(e), r = c(r)), e > r && (h = e, e = r, r = h), (e != s[0] || r != s[1]) && (s = [e, r])), l && (u = t[0], a = t[1], c && (u = u[1], a = a[1]), o = [u, a], l.invert && (u = l(u), a = l(a)), u > a && (h = u, u = a, a = h), (u != f[0] || a != f[1]) && (f = [u, a])), n) : (c && (i ? (e = i[0], r = i[1]) : (e = s[0], r = s[1], c.invert && (e = c.invert(e), r = c.invert(r)), e > r && (h = e, e = r, r = h))), l && (o ? (u = o[0], a = o[1]) : (u = f[0], a = f[1], l.invert && (u = l.invert(u), a = l.invert(a)), u > a && (h = u, u = a, a = h))), c && l ? [[e, u], [r, a]] : c ? [e, r] : l && [u, a])
+ }, n.clear = function(){
+ return n.empty() || (s = [0, 0], f = [0, 0], i = o = null), n
+ }, n.empty = function(){
+ return !!c && s[0] == s[1] || !!l && f[0] == f[1]
+ }, Bo.rebind(n, a, "on")
+ };
+ var Pl = {
+ n : "ns-resize",
+ e : "ew-resize",
+ s : "ns-resize",
+ w : "ew-resize",
+ nw: "nwse-resize",
+ ne: "nesw-resize",
+ se: "nwse-resize",
+ sw: "nesw-resize"
+ }, Ul = [["n", "e", "s", "w", "nw", "ne", "se", "sw"], ["e", "w"], ["n", "s"], []], jl = rc.format = lc.timeFormat, Fl = jl.utc, Hl = Fl("%Y-%m-%dT%H:%M:%S.%LZ");
+ jl.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? Io : Hl, Io.parse = function(n){
+ var t = new Date(n);
+ return isNaN(t) ? null : t
+ }, Io.toString = Hl.toString, rc.second = Ft(function(n){
+ return new uc(1e3 * Math.floor(n / 1e3))
+ }, function(n, t){
+ n.setTime(n.getTime() + 1e3 * Math.floor(t))
+ }, function(n){
+ return n.getSeconds()
+ }), rc.seconds = rc.second.range, rc.seconds.utc = rc.second.utc.range, rc.minute = Ft(function(n){
+ return new uc(6e4 * Math.floor(n / 6e4))
+ }, function(n, t){
+ n.setTime(n.getTime() + 6e4 * Math.floor(t))
+ }, function(n){
+ return n.getMinutes()
+ }), rc.minutes = rc.minute.range, rc.minutes.utc = rc.minute.utc.range, rc.hour = Ft(function(n){
+ var t = n.getTimezoneOffset() / 60;
+ return new uc(36e5 * (Math.floor(n / 36e5 - t) + t))
+ }, function(n, t){
+ n.setTime(n.getTime() + 36e5 * Math.floor(t))
+ }, function(n){
+ return n.getHours()
+ }), rc.hours = rc.hour.range, rc.hours.utc = rc.hour.utc.range, rc.month = Ft(function(n){
+ return n = rc.day(n), n.setDate(1), n
+ }, function(n, t){
+ n.setMonth(n.getMonth() + t)
+ }, function(n){
+ return n.getMonth()
+ }), rc.months = rc.month.range, rc.months.utc = rc.month.utc.range;
+ var Ol = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6], Yl = [[rc.second, 1], [rc.second, 5], [rc.second, 15], [rc.second, 30], [rc.minute, 1], [rc.minute, 5], [rc.minute, 15], [rc.minute, 30], [rc.hour, 1], [rc.hour, 3], [rc.hour, 6], [rc.hour, 12], [rc.day, 1], [rc.day, 2], [rc.week, 1], [rc.month, 1], [rc.month, 3], [rc.year, 1]], Il = jl.multi([[".%L", function(n){
+ return n.getMilliseconds()
+ }], [":%S", function(n){
+ return n.getSeconds()
+ }], ["%I:%M", function(n){
+ return n.getMinutes()
+ }], ["%I %p", function(n){
+ return n.getHours()
+ }], ["%a %d", function(n){
+ return n.getDay() && 1 != n.getDate()
+ }], ["%b %d", function(n){
+ return 1 != n.getDate()
+ }], ["%B", function(n){
+ return n.getMonth()
+ }], ["%Y", Ae]]), Zl = {
+ range : function(n, t, e){
+ return Bo.range(Math.ceil(n / e) * e, +t, e).map(Vo)
+ }, floor: Et, ceil: Et
+ };
+ Yl.year = rc.year, rc.scale = function(){
+ return Zo(Bo.scale.linear(), Yl, Il)
+ };
+ var Vl = Yl.map(function(n){
+ return [n[0].utc, n[1]]
+ }), Xl = Fl.multi([[".%L", function(n){
+ return n.getUTCMilliseconds()
+ }], [":%S", function(n){
+ return n.getUTCSeconds()
+ }], ["%I:%M", function(n){
+ return n.getUTCMinutes()
+ }], ["%I %p", function(n){
+ return n.getUTCHours()
+ }], ["%a %d", function(n){
+ return n.getUTCDay() && 1 != n.getUTCDate()
+ }], ["%b %d", function(n){
+ return 1 != n.getUTCDate()
+ }], ["%B", function(n){
+ return n.getUTCMonth()
+ }], ["%Y", Ae]]);
+ Vl.year = rc.year.utc, rc.scale.utc = function(){
+ return Zo(Bo.scale.linear(), Vl, Xl)
+ }, Bo.text = At(function(n){
+ return n.responseText
+ }), Bo.json = function(n, t){
+ return Ct(n, "application/json", Xo, t)
+ }, Bo.html = function(n, t){
+ return Ct(n, "text/html", $o, t)
+ }, Bo.xml = At(function(n){
+ return n.responseXML
+ }), "function" == typeof define && define.amd ? define(Bo) : "object" == typeof module && module.exports && (module.exports = Bo), this.d3 = Bo
+}();
\ No newline at end of file
diff --git a/web/public/js/index.html.js b/web/public/js/index.html.js
new file mode 100644
index 0000000..ab783d0
--- /dev/null
+++ b/web/public/js/index.html.js
@@ -0,0 +1,903 @@
+"use strict";
+
+var sysStat, socket, pageIndex = 1, pageLoaded, procAnimated, procs, prevProcs, tmps = {}, eles = {}, timer, popupShown, popupProc, tailBeatTimer;
+
+/**
+ * Initialization.
+ */
+$(window).ready(function(){
+
+ prepareDOM();
+
+ initFullPage();
+
+ listenSocket();
+
+});
+
+/**
+ * Prepare DOM, cache elements, templates...
+ */
+function prepareDOM(){
+ eles = {
+ fpNav : $('#fp-nav'),
+ procs : $('.procs').eq(0),
+ procsHintContainer: $('.procs-hint-container').eq(0)
+ };
+
+ eles.procsHint = eles.procsHintContainer.find('div').eq(0);
+ eles.procsHintNum = eles.procsHintContainer.find('span').eq(0);
+
+ // Enable/Disable when mouseenter/mouseleave processes list.
+ eles.procs.hover(function(){
+ !popupShown && setFPEnable(false, true);
+ }, function(){
+ !popupShown && setFPEnable(true, true);
+ });
+
+ tmps = {
+ proc : _.template($('#procTmp').html()),
+ noproc: $('#noProcTmp').html(),
+ popup : _.template($('#popupTmp').html())
+ };
+}
+
+/**
+ * Initialize fullPage plugin.
+ */
+function initFullPage(){
+ $('#fullpage').fullpage({
+ sectionsColor : ['#303552', '#3b4163'],
+ navigation : true,
+ navigationPosition: 'right',
+ navigationTooltips: ['System Stat', 'Processes'],
+ afterLoad : function(){
+ pageLoaded = true;
+ },
+ onLeave : function(index, nextIndex, direction){
+ pageIndex = nextIndex;
+ pageLoaded = false;
+
+ if (nextIndex == 2) {
+ // Update processes' layout without animation.
+ updateProcsLayout(true);
+
+ if (!procAnimated) {
+ // Animate processes' layout with bounceInDown.
+ procAnimated = true;
+ animate(eles.procs, 'bounceInDown');
+ }
+ }
+ }
+ });
+
+ // Disable fullPage.
+ setFPEnable(false);
+}
+
+/**
+ * Set fullPage enable or disable.
+ * @param {Boolean} enable
+ * @param {Boolean} exceptScroll
+ */
+function setFPEnable(enable, exceptScroll){
+ $.fn.fullpage.setAllowScrolling(enable);
+ if (!exceptScroll) {
+ $.fn.fullpage.setKeyboardScrolling(enable);
+ eles.fpNav[enable ? 'fadeIn' : 'fadeOut']();
+ }
+}
+
+/**
+ * Initialize socket.io client and add listeners.
+ */
+function listenSocket(){
+ socket = io();
+
+ // error handler.
+ socket.on('error', function(err){
+ info(err.message);
+ });
+ // information from server.
+ socket.on('info', info);
+ // processes
+ socket.on('procs', onProcsChange);
+
+ // The first time to request system state.
+ socket.on('system_stat', onSysStat);
+
+ function onSysStat(data){
+ // Remove listen immediately.
+ socket.removeEventListener('system_stat', onSysStat);
+
+ // Store system states.
+ sysStat = data;
+
+ // Render polar chart.
+ polarUsage();
+
+ // Bind system information.
+ var tmp = _.template($('#sysInfoTmp').html());
+ $('.system_info').html(tmp({
+ data: {
+ cpu : sysStat.cpus.length,
+ arch : sysStat.arch,
+ uptime: fromNow(sysStat.uptime),
+ memory: getMem(sysStat.memory.total)
+ }
+ })).css('opacity', 0.01).show().animate({
+ opacity : 1,
+ marginTop: -40
+ });
+
+ // Enable fullPage.
+ setFPEnable(true);
+
+ // Remove loading.
+ $('.spinner').remove();
+ }
+
+ socket.on('pm2_ver', function(ver){
+ $('.repo > span').text('PM2 v' + ver);
+ });
+
+ // Show alert when stopping process by pm_id failed.
+ socket.on('action', function(id, errMsg){
+ info(errMsg);
+ $('#proc_' + id).find('.proc-ops').find('.load').fadeOut(function(){
+ $(this).prev().fadeIn().end().fadeOut(function(){
+ $(this).remove();
+ });
+ });
+ });
+}
+
+/**
+ * Render polar charset of usage (CPU and memory).
+ */
+function polarUsage(){
+ if (!sysStat) {
+ return;
+ }
+ var width = 520,
+ height = 520,
+ radius = Math.min(width, height) / 2,
+ spacing = .15;
+
+ // Usage colors - green to red.
+ var color = d3.scale.linear()
+ .range(['hsl(-270,50%,50%)', 'hsl(0,50%,50%)'])
+ .interpolate(function(a, b){
+ var i = d3.interpolateString(a, b);
+ return function(t){
+ return d3.hsl(i(t));
+ };
+ });
+
+ // Transform percentage to angle.
+ var arc = d3.svg.arc()
+ .startAngle(0)
+ .endAngle(function(d){
+ return d.value * 2 * Math.PI;
+ })
+ .innerRadius(function(d){
+ return d.index * radius;
+ })
+ .outerRadius(function(d){
+ return (d.index + spacing) * radius;
+ });
+
+ // Initialize polar.
+ var svg = d3.select('.polar_usage').style({
+ height: height + 'px',
+ width : width + 'px'
+ }).append('svg')
+ .attr('width', width)
+ .attr('height', height)
+ .append('g')
+ .attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')');
+
+ // Text of hostname.
+ svg.append('text')
+ .attr('dy', 0)
+ .text(sysStat.hostname);
+
+ // Text of platform and release
+ svg.append('text')
+ .attr('dy', 20)
+ .style('fill', '#ccc')
+ .text(sysStat.platform + ' ' + sysStat.release);
+
+ // Initialize CPU and Memory fields.
+ var field = svg.selectAll('g')
+ .data(fields)
+ .enter().append('g');
+
+ field.append('path');
+ field.append('text');
+
+ // Render it.
+ d3.transition().duration(0).each(refresh);
+
+ // arcTween
+ function arcTween(d){
+ var i = d3.interpolateNumber(d.previousValue, d.value);
+ return function(t){
+ d.value = i(t);
+ return arc(d);
+ };
+ }
+
+ // Real-time.
+ function fields(){
+ return [
+ {index: .7, text: 'CPU ' + sysStat.cpu + '%', value: sysStat.cpu / 100},
+ {index: .4, text: 'MEM ' + sysStat.memory.percentage + '%', value: sysStat.memory.percentage / 100}
+ ];
+ }
+
+ // Refresh system states.
+ function refresh(){
+ field = field
+ .each(function(d){
+ this._value = d.value;
+ })
+ .data(fields)
+ .each(function(d){
+ d.previousValue = this._value;
+ });
+
+ field.select('path')
+ .transition()
+ .ease('elastic')
+ .attrTween('d', arcTween)
+ .style('fill', function(d){
+ return color(d.value);
+ });
+
+ field.select('text')
+ .attr('dy', function(d){
+ return d.value < .5 ? '0' : '10px';
+ })
+ .text(function(d){
+ return d.text;
+ })
+ .transition()
+ .ease('elastic')
+ .attr('transform', function(d){
+ return 'rotate(' + 360 * d.value + ') ' +
+ 'translate(0,' + -(d.index + spacing / 2) * radius + ') ' +
+ 'rotate(' + (d.value < .5 ? -90 : 90) + ')'
+ });
+ }
+
+ // When receiving data from server, refresh polar.
+ socket.on('system_stat', function(data){
+ if (pageIndex != 1) {
+ return;
+ }
+ var changed = sysStat.cpu != data.cpu || sysStat.memory.percentage != data.memory.percentage;
+ sysStat = data;
+
+ changed && refresh();
+ });
+}
+
+/**
+ * Be triggered after processes have been changed.
+ * @param _procs
+ */
+function onProcsChange(_procs){
+ // Stora processes.
+ procs = {
+ data: _procs.filter(function(p){
+ return !!p;
+ }),
+ tick: Date.now()
+ };
+
+ // Compare ticks to make sure there has any change.
+ var isProcsChanged = eles.procsHint.data('tick') != procs.tick;
+
+ if (!isProcsChanged) {
+ return;
+ }
+
+ if (pageIndex == 1) {
+ // Update processes count only on fullPage 1 (with animation).
+ updateProcsCount(true);
+ } else if (pageIndex == 2) {
+ // Update processes count on fullPage 1 (without animation).
+ updateProcsCount();
+ // Update processes' layout on fullPage 2.
+ updateProcsLayout();
+ }
+}
+
+/**
+ * Update processes count.
+ * @param {Boolean} withAnimation
+ */
+function updateProcsCount(withAnimation){
+ var len = procs.data.length;
+ // If there has no change, return it.
+ if (eles.procsHintContainer.data('count') == len) {
+ return;
+ }
+ // Store count to element.
+ eles.procsHintContainer.data('count', len).removeClass('hide');
+ // Reset count.
+ eles.procsHintNum.text(len);
+ // Shake it if necessary.
+ withAnimation && animate(eles.procsHint, 'shake');
+}
+
+/**
+ * Update the processes' layout.
+ * @param {Boolean} noAnimation
+ * @returns {*}
+ */
+function updateProcsLayout(noAnimation){
+ // If has no change, return it.
+ if (!procs || eles.procs.data('tick') == procs.tick) {
+ return cloneProcs();
+ }
+
+ // Store tick.
+ eles.procs.data('tick', procs.tick);
+
+ // Has process or not.
+ var noprocRendered = eles.procs.data('empty'),
+ isEmpty = eles.procs.is(':empty');
+
+ // If there has no process.
+ if (procs.data.length == 0) {
+ // And the `empty tip` is rendered, return it.
+ if (noprocRendered) {
+ return cloneProcs();
+ }
+ // It's an empty list.
+ eles.procs.data('empty', true);
+
+ // destroy slimScroll if necessary.
+ destroySlimScroll();
+
+ // Render `empty tip`.
+ $(tmps.noproc).prependTo(eles.procs);
+
+ // Remove previous processes list.
+ if (!isEmpty) {
+ !noAnimation && animate(eles.procs, 'flip');
+ eles.procs.find('.proc,.proc-div').not('.proc-empty').remove();
+ }
+ return cloneProcs();
+ }
+
+ // If there have processes and the `empty tip` is rendered.
+ if (noprocRendered) {
+ // Remove empty data.
+ eles.procs.removeData('empty');
+ // Create processes' layout.
+ createProcs(procs.data, noprocRendered, noAnimation);
+ return cloneProcs();
+ }
+
+ // If there has no process and never render `empty tip`.
+ if (isEmpty) {
+ // Create processes' layout.
+ createProcs(procs.data, noprocRendered, noAnimation);
+ return cloneProcs();
+ }
+
+ // Read existing processes' Uids.
+ var rps = [];
+ eles.procs.find('div.proc').each(function(){
+ rps.push(parseInt(this.id.substr(5)));
+ });
+ // Processes that waiting to be created.
+ var cps = procs.data;
+ // Processes that should be deleted.
+ var dps = _.difference(rps, cps.map(function(p){
+ return p.pm_id;
+ }));
+ // Processes that should be updated.
+ var ups = [];
+
+ // Remove the processes to be deleted.
+ rps = _.difference(rps, dps);
+
+ if (rps.length > 0) {
+ // Remove existing.
+ cps = cps.filter(function(p){
+ return !~rps.indexOf(p.pm_id);
+ });
+
+ // Compare with previous processes to grep `ups`.
+ if (prevProcs) {
+ rps.forEach(function(pm_id){
+ var proc1 = _.find(prevProcs.data, function(p){
+ return p.pm_id == pm_id;
+ }),
+ proc2 = _.find(procs.data, function(p){
+ return p.pm_id == pm_id;
+ });
+
+ if (proc1 && proc2 &&
+ (proc1.pm2_env.status != proc2.pm2_env.status ||
+ proc1.pm2_env.pm_uptime != proc2.pm2_env.pm_uptime ||
+ proc1.pm2_env.restart_time != proc2.pm2_env.restart_time)) {
+ ups.push(proc2);
+ }
+ });
+ }
+ }
+
+ var animated = false;
+ // Create.
+ if (cps.length > 0) {
+ animated = true;
+ createProcs(cps, noprocRendered, noAnimation);
+ }
+ // Delete
+ if (dps.length > 0) {
+ removeProcs(dps, animated || noAnimation);
+ animated = true;
+ }
+ // Update
+ if (ups.length > 0) {
+ updateProcs(ups, animated || noAnimation);
+ }
+ cloneProcs();
+}
+
+/**
+ * Create processes' layout.
+ * @param {Array} _procs
+ * @param {Boolean} noproc `empty tip` is rendered before.
+ * @param {Boolean} noAnimation
+ */
+function createProcs(_procs, noproc, noAnimation){
+ var html = '';
+ _procs.forEach(function(p){
+ html += tmps.proc({proc: p, noDiv: false});
+ });
+
+ // Attach events of process.
+ attachProcEvents($(html).appendTo(eles.procs));
+
+ // Flip in if necessary.
+ !noAnimation && flipProcs();
+
+ // Remove `empty tip` if necessary.
+ noproc && eles.procs.find('.proc-empty').remove();
+
+ // slimScroll if processes length is greater than 10.
+ if (eles.procs.find('div.proc').length > 10) {
+ if (eles.procs.data('slimScroll')) {
+ return;
+ }
+ eles.procs.data('slimScroll', true);
+ eles.procs.slimScroll({
+ height : '600px',
+ width : '600px',
+ color : '#fff',
+ opacity : 0.8,
+ railVisible: true,
+ railColor : '#fff'
+ });
+ } else {
+ destroySlimScroll();
+ }
+}
+
+/**
+ * Update processes' layout.
+ * @param {Array} _procs
+ * @param {Boolean} noAnimation
+ */
+function updateProcs(_procs, noAnimation){
+ // Find elements and replace them new ones.
+ eles.procs.find(_procs.map(function(p){
+ return '#proc_' + p.pm_id;
+ }).join(',')).each(function(){
+ var _id = parseInt(this.id.substr(5)),
+ proc = _.find(_procs, function(p){
+ return p.pm_id == _id;
+ });
+
+ // HTML
+ var procHTML = tmps.proc({proc: proc, noDiv: true});
+
+ var ele = $(this);
+ // Animate it or not.
+ if (!noAnimation) {
+ animate(ele, 'flipOutX', function(){
+ var newProc = $(procHTML);
+ ele.replaceWith(newProc);
+ animate(newProc, 'flipInX', startTimer);
+ attachProcEvents(newProc);
+ });
+ } else {
+ ele.replaceWith(procHTML);
+ }
+ });
+}
+
+/**
+ * Remove processes from layout.
+ * @param {Array} pm_ids pm_ids of processes.
+ * @param {Boolean} noAnimation
+ */
+function removeProcs(pm_ids, noAnimation){
+ // Find elements and remove them directly.
+ eles.procs.find(pm_ids.map(function(id){
+ return '#proc_' + id;
+ }).join(',')).each(function(){
+ var ele = $(this);
+ ele.next().remove();
+ ele.remove();
+ });
+
+ // Flip it if necessary.
+ !noAnimation && flipProcs();
+
+ // Destroy slimScroll if necessary.
+ if (eles.procs.find('div.proc').length <= 10) {
+ destroySlimScroll();
+ }
+}
+
+/**
+ * Clone processes and count uptime from now.
+ */
+function cloneProcs(){
+ // Clone processes.
+ prevProcs = _.clone(procs);
+
+ // Timer of uptime.
+ startTimer();
+}
+
+/**
+ * Timer of uptime.
+ */
+function startTimer(){
+ timer && clearTimeout(timer);
+ updateUptime();
+}
+
+/**
+ * Update the uptimes of processes.
+ */
+function updateUptime(){
+ var spans = eles.procs.find('span[data-ctime][data-running=YES]');
+ if (spans.length == 0) {
+ return;
+ }
+ var now = Date.now();
+ spans.each(function(){
+ var ele = $(this);
+ ele.text(fromNow(Math.ceil((now - ele.data('ctime')) / 1000), true));
+ });
+
+ // Only do this job on fullPage 2.
+ (pageIndex == 2) && (timer = setTimeout(updateUptime, 1000));
+}
+
+/**
+ * Flip processes' layout.
+ */
+function flipProcs(){
+ var p = eles.procs.parent();
+ animate(p.hasClass('slimScrollDiv') ? p : eles.procs, 'flip');
+}
+
+/**
+ * Destroy slimScroll of processes' layout.
+ */
+function destroySlimScroll(){
+ if (!eles.procs.data('slimScroll')) {
+ return;
+ }
+ eles.procs.slimScroll({
+ destroy: true
+ });
+ eles.procs.data('slimScroll', false).css('height', 'auto');
+}
+
+/**
+ * Bind process events.
+ * @param {jQuery} o
+ */
+function procEvents(o){
+ o.find('.proc-ops').on('click', 'i', function(){
+ var ele = $(this),
+ method = ele.data('original-title').toLowerCase(),
+ pm_id = parseInt(ele.closest('.proc').attr('id').substr(5));
+
+ var ops = ele.closest('.proc-ops');
+ $('
').css({opacity: 0.01}).appendTo(ops);
+
+ ops.find('ul').fadeOut().next().animate({opacity: 1});
+
+ socket.emit('action', method, pm_id);
+ }).end().find('[data-toggle="tooltip"]').tooltip();
+}
+
+/**
+ * Attach events to process layout.
+ * @param {jQuery} o
+ */
+function attachProcEvents(o){
+ bindPopup(o);
+ procEvents(o);
+}
+
+/**
+ * Popup dialog to display full information of processes.
+ * @param {jQuery} o
+ */
+function bindPopup(o){
+ o.find('.proc-name').avgrund({
+ width : 640,
+ height : 350,
+ showClose : true,
+ holderClass : 'proc-popup',
+ showCloseText : 'CLOSE',
+ onBlurContainer: '.section',
+ onLoad : function(ele){
+ popupShown = true;
+ setFPEnable(false, false);
+ showPopupTab(getProcByEle(ele));
+ },
+ onUnload : function(ele){
+ popupShown = false;
+ setFPEnable(true, false);
+ destroyTailBeat(popupProc && popupProc.pm_id);
+ popupProc = null;
+ },
+ template : ''
+ });
+}
+
+/**
+ * Reset tabcontent of popup.
+ * @param {Object} proc
+ * @returns {*}
+ */
+function showPopupTab(proc, delayed){
+ if (!proc) {
+ return info('Process does not exist, try to refresh current page manually (F5 or COMMAND+R)');
+ }
+ // Do this after popup is shown.
+ if (!delayed) {
+ return setTimeout(showPopupTab, 800, proc, true);
+ }
+
+ // Resort keys.
+ var clonedProc = {};
+ Object.keys(proc).sort(function(a, b){
+ return a.charCodeAt(0) - b.charCodeAt(0);
+ }).forEach(function(key){
+ // Omit memory, just keep the original data.
+ if (key == 'monit') {
+ var monit = proc[key];
+ monit.memory = getMem(monit.memory);
+ return clonedProc[key] = monit;
+ }
+ clonedProc[key] = proc[key];
+ });
+
+ // Reset content HTML.
+ var popup = $('#popup').html(tmps.popup({info: highlight(clonedProc)}));
+ // Find tabcontent.
+ var tabContent = popup.find('.tab-content').eq(0);
+ // Bind slimScroll.
+ tabContent.slimScroll({
+ height : '300px',
+ color : '#000',
+ opacity : 0.8,
+ railVisible: true,
+ railColor : '#f0f0f0'
+ });
+
+ // Bing tab change event.
+ popup.find('li').click(function(){
+ var ele = $(this);
+ if (ele.hasClass('active')) {
+ return;
+ }
+
+ // Scroll to y: 0
+ tabContent.slimScroll({
+ scrollTo: 0
+ });
+
+ // Tail logs.
+ if ($(this).text().trim() == 'Log') {
+ popupProc = proc;
+ return tailLogs();
+ }
+ // Reset log tab to `loading` status
+ $('#log').html('
');
+ // Destroy tail heartbeat immediately.
+ destroyTailBeat(popupProc && popupProc.pm_id);
+ popupProc = null;
+ })
+}
+
+/**
+ * Tail log of process
+ * @returns {*}
+ */
+function tailLogs(){
+ // Heart beat of tail.
+ tailBeat();
+
+ if (!popupProc) {
+ return destroyTailBeat();
+ }
+ socket.on('tail', appendLogs);
+}
+
+/**
+ * Append logs to DOM.
+ * @param {Object} log
+ */
+function appendLogs(log){
+ // Check process and pm_id should be equalled.
+ if (!popupProc || popupProc.pm_id != log.pm_id) {
+ return;
+ }
+
+ // Remove `loading` status.
+ $('#log>.load').remove();
+
+ var lo = $('#log');
+ $(log.msg).appendTo(lo);
+
+ var offset = lo.get(0).scrollHeight - 300,
+ poffset = lo.parent().scrollTop() || 0;
+
+ // Scroll down if necessary.
+ if (poffset >= offset - 30) {
+ lo.parent().slimScroll({
+ scrollTo: offset
+ });
+ }
+}
+
+/**
+ * Heart beat of tail.
+ */
+function tailBeat(){
+ tailBeatTimer && clearTimeout(tailBeatTimer);
+ if (!popupProc) {
+ return;
+ }
+ socket.emit('tail_beat', popupProc.pm_id);
+ tailBeatTimer = setTimeout(tailBeat, 3000);
+}
+
+/**
+ * Destroy heart beat of tail.
+ * @param {String} pm_id
+ */
+function destroyTailBeat(pm_id){
+ if (pm_id) {
+ socket.emit('tail_destroy', pm_id);
+ }
+ // Remove listener.
+ socket.removeEventListener('tail', appendLogs);
+}
+
+/**
+ * Get process by Uid span element.
+ * @param {jQuery} ele
+ * @returns {*}
+ */
+function getProcByEle(ele){
+ var id = parseInt(ele.data('pmid'));
+ return _.find(procs.data, function(p){
+ return p.pm_id == id;
+ });
+}
+
+/**
+ * Animate element with animation from animate.css
+ * @param {jQuery} o element
+ * @param {String} a animation name
+ * @param {Function} cb callback
+ */
+function animate(o, a, cb){
+ a += ' animated';
+ o.removeClass(a).addClass(a).one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
+ var ele = $(this);
+ ele.removeClass(a)
+ cb && cb.call(ele);
+ });
+}
+
+/**
+ * Show sticky information
+ * @param {String} msg
+ */
+function info(msg){
+ $.sticky({
+ body : msg,
+ icon : './img/info.png',
+ useAnimateCss: true
+ });
+}
+
+/**
+ * Wrap memory.
+ * @param {Float} mem
+ * @returns {string}
+ */
+function getMem(mem){
+ if (typeof mem == 'string') {
+ return mem;
+ }
+
+ if (mem < 1024) {
+ return mem + 'B';
+ }
+ if (mem < 1048576) {
+ return Math.round(mem / 1024) + 'K';
+ }
+ if (mem < 1073741824) {
+ return Math.round(mem / 1048576) + 'M';
+ }
+ return Math.round(mem / 1073741824) + 'G';
+}
+
+/**
+ * Wrap tick from now.
+ * @param {Float} tick
+ * @param {Boolean} tiny show all of it.
+ * @returns {string}
+ */
+function fromNow(tick, tiny){
+ if (tick < 60) {
+ return tick + 's';
+ }
+ var s = tick % 60 + 's';
+ if (tick < 3600) {
+ return parseInt(tick / 60) + 'm ' + s;
+ }
+ var m = parseInt((tick % 3600) / 60) + 'm ';
+ if (tick < 86400) {
+ return parseInt(tick / 3600) + 'h ' + m + (!tiny ? '' : s);
+ }
+ var h = parseInt((tick % 86400) / 3600) + 'h ';
+ return parseInt(tick / 86400) + 'd ' + h + (!tiny ? '' : m + s);
+}
+
+/**
+ * Hightlight JSON
+ * @param {JSON} data
+ * @param {Int} indent
+ * @returns {string}
+ */
+function highlight(data, indent){
+ indent = indent || 2;
+
+ data = JSON.stringify(typeof data != 'string' ? data : JSON.parse(data), undefined, indent);
+
+ [[/&/g, '&'], [//g, '>']].forEach(function(rep){
+ data = String.prototype.replace.apply(data, rep);
+ });
+
+ return data.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function(m){
+ var color = '1e297e';
+ if (/^"/.test(m)) {
+ color = ['440a4d', '0d660a'][/:$/.test(m) ? 0 : 1];
+ } else if (/true|false/.test(m)) {
+ color = '1e297e';
+ } else if (/null|undefined/.test(m)) {
+ color = '14193c';
+ }
+ return '' + m + ' ';
+ }).replace(/\n/, ' ');
+};
\ No newline at end of file
diff --git a/web/public/js/jquery-1.11.1.min.js b/web/public/js/jquery-1.11.1.min.js
new file mode 100644
index 0000000..f4445a6
--- /dev/null
+++ b/web/public/js/jquery-1.11.1.min.js
@@ -0,0 +1,2635 @@
+/*! jQuery v1.11.1 | (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.1", 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) >= 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" + -new Date, v = a.document, w = 0, x = 0, y = gb(), z = gb(), A = gb(), B = function(a, b){
+ return a === b && (l = !0), 0
+ }, C = "undefined", D = 1 << 31, E = {}.hasOwnProperty, F = [], G = F.pop, H = F.push, I = F.push, J = F.slice, K = F.indexOf || function(a){
+ for (var b = 0, c = this.length; c > b; b++)if (this[b] === a)return b;
+ return -1
+ }, L = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", M = "[\\x20\\t\\r\\n\\f]", N = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", O = N.replace("w", "w#"), P = "\\[" + M + "*(" + N + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + O + "))|)" + M + "*\\]", Q = ":(" + N + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + P + ")*)|.*)\\)|)", R = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"), S = new RegExp("^" + M + "*," + M + "*"), T = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"), U = new RegExp("=" + M + "*([^\\]'\"]*?)" + M + "*\\]", "g"), V = new RegExp(Q), W = new RegExp("^" + O + "$"), X = {
+ ID : new RegExp("^#(" + N + ")"),
+ CLASS : new RegExp("^\\.(" + N + ")"),
+ TAG : new RegExp("^(" + N.replace("w", "w*") + ")"),
+ ATTR : new RegExp("^" + P),
+ PSEUDO : new RegExp("^" + Q),
+ CHILD : new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"),
+ bool : new RegExp("^(?:" + L + ")$", "i"),
+ needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "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}" + M + "?|(" + M + ")|.)", "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)
+ };
+ try {
+ I.apply(F = J.call(v.childNodes), v.childNodes), F[v.childNodes.length].nodeType
+ } catch (eb) {
+ I = {
+ apply: F.length ? function(a, b){
+ H.apply(a, J.call(b))
+ } : function(a, b){
+ var c = a.length, d = 0;
+ while (a[c++] = b[d++]);
+ a.length = c - 1
+ }
+ }
+ }
+ function fb(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 || [], !a || "string" != typeof a)return d;
+ if (1 !== (k = b.nodeType) && 9 !== k)return [];
+ if (p && !e) {
+ if (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 I.apply(d, b.getElementsByTagName(a)), d;
+ if ((j = f[3]) && c.getElementsByClassName && b.getElementsByClassName)return I.apply(d, b.getElementsByClassName(j)), d
+ }
+ if (c.qsa && (!q || !q.test(a))) {
+ if (s = r = u, w = b, x = 9 === 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 + qb(o[l]);
+ w = ab.test(a) && ob(b.parentNode) || b, x = o.join(",")
+ }
+ if (x)try {
+ return I.apply(d, w.querySelectorAll(x)), d
+ } catch (y) {
+ } finally {
+ r || b.removeAttribute("id")
+ }
+ }
+ }
+ return i(a.replace(R, "$1"), b, d, e)
+ }
+
+ function gb(){
+ var a = [];
+
+ function b(c, e){
+ return a.push(c + " ") > d.cacheLength && delete b[a.shift()], b[c + " "] = e
+ }
+
+ return b
+ }
+
+ function hb(a){
+ return a[u] = !0, a
+ }
+
+ function ib(a){
+ var b = n.createElement("div");
+ try {
+ return !!a(b)
+ } catch (c) {
+ return !1
+ } finally {
+ b.parentNode && b.parentNode.removeChild(b), b = null
+ }
+ }
+
+ function jb(a, b){
+ var c = a.split("|"), e = a.length;
+ while (e--)d.attrHandle[c[e]] = b
+ }
+
+ function kb(a, b){
+ var c = b && a, d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || D) - (~a.sourceIndex || D);
+ if (d)return d;
+ if (c)while (c = c.nextSibling)if (c === b)return -1;
+ return a ? 1 : -1
+ }
+
+ function lb(a){
+ return function(b){
+ var c = b.nodeName.toLowerCase();
+ return "input" === c && b.type === a
+ }
+ }
+
+ function mb(a){
+ return function(b){
+ var c = b.nodeName.toLowerCase();
+ return ("input" === c || "button" === c) && b.type === a
+ }
+ }
+
+ function nb(a){
+ return hb(function(b){
+ return b = +b, hb(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 ob(a){
+ return a && typeof a.getElementsByTagName !== C && a
+ }
+
+ c = fb.support = {}, f = fb.isXML = function(a){
+ var b = a && (a.ownerDocument || a).documentElement;
+ return b ? "HTML" !== b.nodeName : !1
+ }, m = fb.setDocument = function(a){
+ var b, e = a ? a.ownerDocument || a : v, g = e.defaultView;
+ return e !== n && 9 === e.nodeType && e.documentElement ? (n = e, o = e.documentElement, p = !f(e), g && g !== g.top && (g.addEventListener ? g.addEventListener("unload", function(){
+ m()
+ }, !1) : g.attachEvent && g.attachEvent("onunload", function(){
+ m()
+ })), c.attributes = ib(function(a){
+ return a.className = "i", !a.getAttribute("className")
+ }), c.getElementsByTagName = ib(function(a){
+ return a.appendChild(e.createComment("")), !a.getElementsByTagName("*").length
+ }), c.getElementsByClassName = $.test(e.getElementsByClassName) && ib(function(a){
+ return a.innerHTML = "
", a.firstChild.className = "i", 2 === a.getElementsByClassName("i").length
+ }), c.getById = ib(function(a){
+ return o.appendChild(a).id = u, !e.getElementsByName || !e.getElementsByName(u).length
+ }), c.getById ? (d.find.ID = function(a, b){
+ if (typeof b.getElementById !== C && 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 = typeof a.getAttributeNode !== C && a.getAttributeNode("id");
+ return c && c.value === b
+ }
+ }), d.find.TAG = c.getElementsByTagName ? function(a, b){
+ return typeof b.getElementsByTagName !== C ? b.getElementsByTagName(a) : void 0
+ } : function(a, b){
+ var c, d = [], e = 0, f = b.getElementsByTagName(a);
+ if ("*" === a) {
+ while (c = f[e++])1 === c.nodeType && d.push(c);
+ return d
+ }
+ return f
+ }, d.find.CLASS = c.getElementsByClassName && function(a, b){
+ return typeof b.getElementsByClassName !== C && p ? b.getElementsByClassName(a) : void 0
+ }, r = [], q = [], (c.qsa = $.test(e.querySelectorAll)) && (ib(function(a){
+ a.innerHTML = " ", a.querySelectorAll("[msallowclip^='']").length && q.push("[*^$]=" + M + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || q.push("\\[" + M + "*(?:value|" + L + ")"), a.querySelectorAll(":checked").length || q.push(":checked")
+ }), ib(function(a){
+ var b = e.createElement("input");
+ b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && q.push("name" + M + "*[*^$|!~]?="), 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)) && ib(function(a){
+ c.disconnectedMatch = s.call(a, "div"), s.call(a, "[s!='']:x"), r.push("!=", Q)
+ }), 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 === e || a.ownerDocument === v && t(v, a) ? -1 : b === e || b.ownerDocument === v && t(v, b) ? 1 : k ? K.call(k, a) - K.call(k, b) : 0 : 4 & d ? -1 : 1)
+ } : function(a, b){
+ if (a === b)return l = !0, 0;
+ var c, d = 0, f = a.parentNode, g = b.parentNode, h = [a], i = [b];
+ if (!f || !g)return a === e ? -1 : b === e ? 1 : f ? -1 : g ? 1 : k ? K.call(k, a) - K.call(k, b) : 0;
+ if (f === g)return kb(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 ? kb(h[d], i[d]) : h[d] === v ? -1 : i[d] === v ? 1 : 0
+ }, e) : n
+ }, fb.matches = function(a, b){
+ return fb(a, null, null, b)
+ }, fb.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 fb(b, n, null, [a]).length > 0
+ }, fb.contains = function(a, b){
+ return (a.ownerDocument || a) !== n && m(a), t(a, b)
+ }, fb.attr = function(a, b){
+ (a.ownerDocument || a) !== n && m(a);
+ var e = d.attrHandle[b.toLowerCase()], f = e && E.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
+ }, fb.error = function(a){
+ throw new Error("Syntax error, unrecognized expression: " + a)
+ }, fb.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 = fb.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 = fb.selectors = {
+ cacheLength : 50,
+ createPseudo: hb,
+ 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] || fb.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] && fb.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("(^|" + M + ")" + a + "(" + M + "|$)")) && y(a, function(a){
+ return b.test("string" == typeof a.className && a.className || typeof a.getAttribute !== C && a.getAttribute("class") || "")
+ })
+ }, ATTR : function(a, b, c){
+ return function(d){
+ var e = fb.attr(d, a);
+ return null == e ? "!=" === b : b ? (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e + " ").indexOf(c) > -1 : "|=" === b ? e === c || e.slice(0, c.length + 1) === c + "-" : !1) : !0
+ }
+ }, CHILD : function(a, b, c, d, e){
+ var f = "nth" !== a.slice(0, 3), g = "last" !== a.slice(-4), h = "of-type" === b;
+ return 1 === d && 0 === e ? function(a){
+ return !!a.parentNode
+ } : function(b, c, i){
+ var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling", q = b.parentNode, r = h && b.nodeName.toLowerCase(), 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()] || fb.error("unsupported pseudo: " + a);
+ return e[u] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? hb(function(a, c){
+ var d, f = e(a, b), g = f.length;
+ while (g--)d = K.call(a, f[g]), a[d] = !(c[d] = f[g])
+ }) : function(a){
+ return e(a, 0, c)
+ }) : e
+ }
+ },
+ pseudos : {
+ not : hb(function(a){
+ var b = [], c = [], d = h(a.replace(R, "$1"));
+ return d[u] ? hb(function(a, b, c, e){
+ var f, g = d(a, null, e, []), h = a.length;
+ while (h--)(f = g[h]) && (a[h] = !(b[h] = f))
+ }) : function(a, e, f){
+ return b[0] = a, d(b, null, f, c), !c.pop()
+ }
+ }), has : hb(function(a){
+ return function(b){
+ return fb(a, b).length > 0
+ }
+ }), contains: hb(function(a){
+ return function(b){
+ return (b.textContent || b.innerText || e(b)).indexOf(a) > -1
+ }
+ }), lang : hb(function(a){
+ return W.test(a || "") || fb.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 : nb(function(){
+ return [0]
+ }), last : nb(function(a, b){
+ return [b - 1]
+ }), eq : nb(function(a, b, c){
+ return [0 > c ? c + b : c]
+ }), even : nb(function(a, b){
+ for (var c = 0; b > c; c += 2)a.push(c);
+ return a
+ }), odd : nb(function(a, b){
+ for (var c = 1; b > c; c += 2)a.push(c);
+ return a
+ }), lt : nb(function(a, b, c){
+ for (var d = 0 > c ? c + b : c; --d >= 0;)a.push(d);
+ return a
+ }), gt : nb(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] = lb(b);
+ for (b in{submit: !0, reset: !0})d.pseudos[b] = mb(b);
+ function pb(){
+ }
+
+ pb.prototype = d.filters = d.pseudos, d.setFilters = new pb, g = fb.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 ? fb.error(a) : z(a, i).slice(0)
+ };
+ function qb(a){
+ for (var b = 0, c = a.length, d = ""; c > b; b++)d += a[b].value;
+ return d
+ }
+
+ function rb(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 sb(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 tb(a, b, c){
+ for (var d = 0, e = b.length; e > d; d++)fb(a, b[d], c);
+ return c
+ }
+
+ function ub(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 vb(a, b, c, d, e, f){
+ return d && !d[u] && (d = vb(d)), e && !e[u] && (e = vb(e, f)), hb(function(f, g, h, i){
+ var j, k, l, m = [], n = [], o = g.length, p = f || tb(b || "*", h.nodeType ? [h] : h, []), q = !a || !f && b ? p : ub(p, m, a, h, i), r = c ? e || (f ? a : o || d) ? [] : g : q;
+ if (c && c(q, r, h, i), d) {
+ j = ub(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 ? K.call(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l))
+ }
+ } else r = ub(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : I.apply(g, r)
+ })
+ }
+
+ function wb(a){
+ for (var b, c, e, f = a.length, g = d.relative[a[0].type], h = g || d.relative[" "], i = g ? 1 : 0, k = rb(function(a){
+ return a === b
+ }, h, !0), l = rb(function(a){
+ return K.call(b, a) > -1
+ }, h, !0), m = [function(a, c, d){
+ return !g && (d || c !== j) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d))
+ }]; f > i; i++)if (c = d.relative[a[i].type])m = [rb(sb(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 vb(i > 1 && sb(m), i > 1 && qb(a.slice(0, i - 1).concat({value: " " === a[i - 2].type ? "*" : ""})).replace(R, "$1"), c, e > i && wb(a.slice(i, e)), f > e && wb(a = a.slice(e)), f > e && qb(a))
+ }
+ m.push(c)
+ }
+ return sb(m)
+ }
+
+ function xb(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] = G.call(i));
+ s = ub(s)
+ }
+ I.apply(i, s), k && !f && s.length > 0 && p + b.length > 1 && fb.uniqueSort(i)
+ }
+ return k && (w = v, j = t), r
+ };
+ return c ? hb(f) : f
+ }
+
+ return h = fb.compile = function(a, b){
+ var c, d = [], e = [], f = A[a + " "];
+ if (!f) {
+ b || (b = g(a)), c = b.length;
+ while (c--)f = wb(b[c]), f[u] ? d.push(f) : e.push(f);
+ f = A(a, xb(e, d)), f.selector = a
+ }
+ return f
+ }, i = fb.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) && ob(b.parentNode) || b))) {
+ if (j.splice(i, 1), a = f.length && qb(j), !a)return I.apply(e, f), e;
+ break
+ }
+ }
+ }
+ return (n || h(a, o))(f, b, !p, e, ab.test(a) && ob(b.parentNode) || b), e
+ }, c.sortStable = u.split("").sort(B).join("") === u, c.detectDuplicates = !!l, m(), c.sortDetached = ib(function(a){
+ return 1 & a.compareDocumentPosition(n.createElement("div"))
+ }), ib(function(a){
+ return a.innerHTML = " ", "#" === a.firstChild.getAttribute("href")
+ }) || jb("type|href|height|width", function(a, b, c){
+ return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2)
+ }), c.attributes && ib(function(a){
+ return a.innerHTML = " ", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value")
+ }) || jb("value", function(a, b, c){
+ return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue
+ }), ib(function(a){
+ return null == a.getAttribute("disabled")
+ }) || jb(L, function(a, b, c){
+ var d;
+ return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null
+ }), fb
+ }(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 = " a ", k.leadingWhitespace = 3 === b.firstChild.nodeType, k.tbody = !b.getElementsByTagName("tbody").length, k.htmlSerialize = !!b.getElementsByTagName("link").length, k.html5Clone = "<:nav>" !== y.createElement("nav").cloneNode(!0).outerHTML, a.type = "checkbox", a.checked = !0, c.appendChild(a), k.appendChecked = a.checked, b.innerHTML = "", k.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue, c.appendChild(b), b.innerHTML = " ", 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 = /\s*$/g, rb = {
+ option : [1, "", " "],
+ legend : [1, "", " "],
+ area : [1, "", " "],
+ param : [1, "", " "],
+ thead : [1, ""],
+ tr : [2, ""],
+ col : [2, ""],
+ td : [3, ""],
+ _default: k.htmlSerialize ? [0, "", ""] : [1, "X", "
"]
+ }, 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) ? "" !== 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("")).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(a){
+ return a.ownerDocument.defaultView.getComputedStyle(a, 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 = " a ", 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.innerHTML = "", 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 = " a ", 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 = 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.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(a, b){
+ m.fn[b] = function(a){
+ return this.on(b, a)
+ }
+ }), 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.ActiveXObject && m(a).on("unload", 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("").append(m.parseHTML(a)).find(d) : a)
+ }).complete(c && function(a, b){
+ g.each(c, e || [a.responseText, b, a])
+ }), this
+ }, 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/web/public/js/jquery.avgrund.min.js b/web/public/js/jquery.avgrund.min.js
new file mode 100644
index 0000000..d6accbe
--- /dev/null
+++ b/web/public/js/jquery.avgrund.min.js
@@ -0,0 +1,57 @@
+/*! jquery.avgrund - v1.3.2 (http://labs.voronianski.com/jquery.avgrund.js) */
+!function(a){
+ "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof exports ? module.exports = a : a(jQuery)
+}(function($){
+ $.fn.avgrund = function(a){
+ var b = {
+ width : 380,
+ height : 280,
+ showClose : !1,
+ showCloseText : "",
+ closeByEscape : !0,
+ closeByDocument : !0,
+ holderClass : "",
+ overlayClass : "",
+ enableStackAnimation: !1,
+ onBlurContainer : "",
+ openOnEvent : !0,
+ setEvent : "click",
+ onLoad : !1,
+ onUnload : !1,
+ template : "
This is test popin content!
"
+ };
+ return a = $.extend(b, a), this.each(function(){
+ function b(b){
+ a.closeByEscape && 27 === b.keyCode && e()
+ }
+
+ function c(b){
+ a.closeByDocument ? $(b.target).is(".avgrund-overlay, .avgrund-close") && (b.preventDefault(), e()) : $(b.target).is(".avgrund-close") && (b.preventDefault(), e())
+ }
+
+ function d(){
+ "function" == typeof a.onLoad && a.onLoad(f), setTimeout(function(){
+ g.addClass("avgrund-active")
+ }, 100);
+ var d = $('
');
+ d.append(j), g.append(d), $(".avgrund-popin").css({
+ width : h + "px",
+ height : i + "px",
+ "margin-left": "-" + (h / 2 + 10) + "px",
+ "margin-top" : "-" + (i / 2 + 10) + "px"
+ }), a.showClose && $(".avgrund-popin").append('
' + a.showCloseText + " "), a.enableStackAnimation && $(".avgrund-popin").addClass("stack"), g.bind("keyup", b).bind("click", c)
+ }
+
+ function e(){
+ g.unbind("keyup", b).unbind("click", c).removeClass("avgrund-active"), setTimeout(function(){
+ $(".avgrund-popin").remove()
+ }, 500), "function" == typeof a.onUnload && a.onUnload(f)
+ }
+
+ var f = $(this), g = $("body"), h = a.width > 640 ? 640 : a.width, i = a.height > 350 ? 350 : a.height, j = "function" == typeof a.template ? a.template(f) : a.template;
+ g.addClass("avgrund-ready"), 0 === $(".avgrund-overlay").length && g.append('
'), "" !== a.onBlurContainer && $(a.onBlurContainer).addClass("avgrund-blur"), a.openOnEvent ? f.bind(a.setEvent, function(a){
+ a.stopPropagation(), $(a.target).is("a") && a.preventDefault(), d()
+ }) : d()
+ })
+ }
+});
\ No newline at end of file
diff --git a/web/public/js/jquery.fullPage.min.js b/web/public/js/jquery.fullPage.min.js
new file mode 100755
index 0000000..d36ce8a
--- /dev/null
+++ b/web/public/js/jquery.fullPage.min.js
@@ -0,0 +1,642 @@
+/**
+ * fullPage 2.4.5
+ * https://github.com/alvarotrigo/fullPage.js
+ * MIT licensed
+ *
+ * Copyright (C) 2013 alvarotrigo.com - A project by Alvaro Trigo
+ */
+(function(a){
+ a.fn.fullpage = function(c){
+ function ga(){
+ a("body").append('
');
+ h = a("#fp-nav");
+ h.css("color", c.navigationColor);
+ h.addClass(c.navigationPosition);
+ for (var b = 0; b < a(".fp-section").length; b++) {
+ var d = "";
+ c.anchors.length && (d = c.anchors[b]);
+ var e = c.navigationTooltips[b];
+ "undefined" === typeof e && (e = "");
+ h.find("ul").append('
')
+ }
+ }
+
+ function I(){
+ a(".fp-section").each(function(){
+ var b = a(this).find(".fp-slide");
+ b.length ? b.each(function(){
+ w(a(this))
+ }) : w(a(this))
+ });
+ a.isFunction(c.afterRender) && c.afterRender.call(this)
+ }
+
+ function J(){
+ if (!c.autoScrolling || c.scrollBar) {
+ var b = a(window).scrollTop(), d = 0, e = Math.abs(b - a(".fp-section").first().offset().top);
+ a(".fp-section").each(function(c){
+ var f = Math.abs(b - a(this).offset().top);
+ f < e && (d = c, e = f)
+ });
+ var f = a(".fp-section").eq(d)
+ }
+ if (!c.autoScrolling && !f.hasClass("active")) {
+ A = !0;
+ var g = a(".fp-section.active").index(".fp-section") + 1, ha = B(f), h = f.data("anchor");
+ f.addClass("active").siblings().removeClass("active");
+ l || (a.isFunction(c.onLeave) && c.onLeave.call(this, g, f.index(".fp-section") + 1, ha), a.isFunction(c.afterLoad) && c.afterLoad.call(this, h, f.index(".fp-section") + 1));
+ C(h, 0);
+ c.anchors.length && !l && (q = h, location.hash = h);
+ clearTimeout(K);
+ K = setTimeout(function(){
+ A = !1
+ }, 100)
+ }
+ c.scrollBar && (clearTimeout(L), L = setTimeout(function(){
+ l || m(f)
+ }, 1E3))
+ }
+
+ function M(b){
+ return scrollable = b.find(".fp-slides").length ? b.find(".fp-slide.active").find(".fp-scrollable") : b.find(".fp-scrollable")
+ }
+
+ function x(b, d){
+ if ("down" == b)var c = "bottom",
+ f = a.fn.fullpage.moveSectionDown; else c = "top", f = a.fn.fullpage.moveSectionUp;
+ if (0 < d.length)if (c = "top" === c ? !d.scrollTop() : "bottom" === c ? d.scrollTop() + 1 + d.innerHeight() >= d[0].scrollHeight : void 0, c)f(); else return !0; else f()
+ }
+
+ function ia(b){
+ var d = b.originalEvent;
+ if (!N(b.target)) {
+ c.autoScrolling && b.preventDefault();
+ b = a(".fp-section.active");
+ var e = M(b);
+ l || t || (d = O(d), r = d.y, y = d.x, b.find(".fp-slides").length && Math.abs(z - y) > Math.abs(s - r) ? Math.abs(z - y) > a(window).width() / 100 * c.touchSensitivity && (z > y ? a.fn.fullpage.moveSlideRight() :
+ a.fn.fullpage.moveSlideLeft()) : c.autoScrolling && Math.abs(s - r) > a(window).height() / 100 * c.touchSensitivity && (s > r ? x("down", e) : r > s && x("up", e)))
+ }
+ }
+
+ function N(b, d){
+ d = d || 0;
+ var e = a(b).parent();
+ return d < c.normalScrollElementTouchThreshold && e.is(c.normalScrollElements) ? !0 : d == c.normalScrollElementTouchThreshold ? !1 : N(e, ++d)
+ }
+
+ function ja(b){
+ b = O(b.originalEvent);
+ s = b.y;
+ z = b.x
+ }
+
+ function n(b){
+ if (c.autoScrolling) {
+ b = window.event || b;
+ var d = Math.max(-1, Math.min(1, b.wheelDelta || -b.deltaY || -b.detail));
+ c.scrollBar && (b.preventDefault ?
+ b.preventDefault() : b.returnValue = !1);
+ b = a(".fp-section.active");
+ b = M(b);
+ l || (0 > d ? x("down", b) : x("up", b));
+ return !1
+ }
+ }
+
+ function P(b){
+ var d = a(".fp-section.active").find(".fp-slides");
+ if (d.length && !t) {
+ var e = d.find(".fp-slide.active"), f = null, f = "prev" === b ? e.prev(".fp-slide") : e.next(".fp-slide");
+ if (!f.length) {
+ if (!c.loopHorizontal)return;
+ f = "prev" === b ? e.siblings(":last") : e.siblings(":first")
+ }
+ t = !0;
+ u(d, f)
+ }
+ }
+
+ function Q(){
+ a(".fp-slide.active").each(function(){
+ D(a(this))
+ })
+ }
+
+ function m(b, d, e){
+ var f = b.position();
+ if ("undefined" !== typeof f && (d = {
+ element : b,
+ callback : d,
+ isMovementUp : e,
+ dest : f,
+ dtop : f.top,
+ yMovement : B(b),
+ anchorLink : b.data("anchor"),
+ sectionIndex : b.index(".fp-section"),
+ activeSlide : b.find(".fp-slide.active"),
+ activeSection : a(".fp-section.active"),
+ leavingSection : a(".fp-section.active").index(".fp-section") + 1,
+ localIsResizing: v
+ }, !(d.activeSection.is(b) && !v || c.scrollBar && a(window).scrollTop() === d.dtop))) {
+ if (d.activeSlide.length)var g = d.activeSlide.data("anchor"), h = d.activeSlide.index();
+ c.autoScrolling && c.continuousVertical &&
+ "undefined" !== typeof d.isMovementUp && (!d.isMovementUp && "up" == d.yMovement || d.isMovementUp && "down" == d.yMovement) && (d.isMovementUp ? a(".fp-section.active").before(d.activeSection.nextAll(".fp-section")) : a(".fp-section.active").after(d.activeSection.prevAll(".fp-section").get().reverse()), p(a(".fp-section.active").position().top), Q(), d.wrapAroundElements = d.activeSection, d.dest = d.element.position(), d.dtop = d.dest.top, d.yMovement = B(d.element));
+ b.addClass("active").siblings().removeClass("active");
+ l = !0;
+ "undefined" !== typeof d.anchorLink && R(h, g, d.anchorLink);
+ a.isFunction(c.onLeave) && !d.localIsResizing && c.onLeave.call(this, d.leavingSection, d.sectionIndex + 1, d.yMovement);
+ ka(d);
+ q = d.anchorLink;
+ c.autoScrolling && C(d.anchorLink, d.sectionIndex)
+ }
+ }
+
+ function ka(b){
+ if (c.css3 && c.autoScrolling && !c.scrollBar)S("translate3d(0px, -" + b.dtop + "px, 0px)", !0), setTimeout(function(){
+ T(b)
+ }, c.scrollingSpeed); else {
+ var d = la(b);
+ a(d.element).animate(d.options, c.scrollingSpeed, c.easing).promise().done(function(){
+ T(b)
+ })
+ }
+ }
+
+ function la(b){
+ var a = {};
+ c.autoScrolling && !c.scrollBar ? (a.options = {top: -b.dtop}, a.element = "." + U) : (a.options = {scrollTop: b.dtop}, a.element = "html, body");
+ return a
+ }
+
+ function ma(b){
+ b.wrapAroundElements && b.wrapAroundElements.length && (b.isMovementUp ? a(".fp-section:first").before(b.wrapAroundElements) : a(".fp-section:last").after(b.wrapAroundElements), p(a(".fp-section.active").position().top), Q())
+ }
+
+ function T(b){
+ ma(b);
+ a.isFunction(c.afterLoad) && !b.localIsResizing && c.afterLoad.call(this, b.anchorLink, b.sectionIndex + 1);
+ setTimeout(function(){
+ l = !1;
+ a.isFunction(b.callback) && b.callback.call(this)
+ }, 600)
+ }
+
+ function V(){
+ if (!A) {
+ var b = window.location.hash.replace("#", "").split("/"), a = b[0], b = b[1];
+ if (a.length) {
+ var c = "undefined" === typeof q, f = "undefined" === typeof q && "undefined" === typeof b && !t;
+ (a && a !== q && !c || f || !t && E != b) && F(a, b)
+ }
+ }
+ }
+
+ function u(b, d){
+ var e = d.position(), f = b.find(".fp-slidesContainer").parent(), g = d.index(), h = b.closest(".fp-section"), l = h.index(".fp-section"), m = h.data("anchor"), p = h.find(".fp-slidesNav"), k = d.data("anchor"), q = v;
+ if (c.onSlideLeave) {
+ var n =
+ h.find(".fp-slide.active").index(), r;
+ r = n == g ? "none" : n > g ? "left" : "right";
+ q || "none" === r || a.isFunction(c.onSlideLeave) && c.onSlideLeave.call(this, m, l + 1, n, r)
+ }
+ d.addClass("active").siblings().removeClass("active");
+ "undefined" === typeof k && (k = g);
+ c.loopHorizontal || (h.find(".fp-controlArrow.fp-prev").toggle(0 != g), h.find(".fp-controlArrow.fp-next").toggle(!d.is(":last-child")));
+ h.hasClass("active") && R(g, k, m);
+ var s = function(){
+ q || a.isFunction(c.afterSlideLoad) && c.afterSlideLoad.call(this, m, l + 1, k, g);
+ t = !1
+ };
+ c.css3 ?
+ (e = "translate3d(-" + e.left + "px, 0px, 0px)", W(b.find(".fp-slidesContainer"), 0 < c.scrollingSpeed).css(X(e)), setTimeout(function(){
+ s()
+ }, c.scrollingSpeed, c.easing)) : f.animate({scrollLeft: e.left}, c.scrollingSpeed, c.easing, function(){
+ s()
+ });
+ p.find(".active").removeClass("active");
+ p.find("li").eq(g).find("a").addClass("active")
+ }
+
+ function Y(){
+ Z();
+ G ? "text" !== a(document.activeElement).attr("type") && a.fn.fullpage.reBuild(!0) : (clearTimeout($), $ = setTimeout(function(){
+ a.fn.fullpage.reBuild(!0)
+ }, 500))
+ }
+
+ function Z(){
+ if (c.responsive) {
+ var b =
+ g.hasClass("fp-responsive");
+ a(window).width() < c.responsive ? b || (a.fn.fullpage.setAutoScrolling(!1), a("#fp-nav").hide(), g.addClass("fp-responsive")) : b && (a.fn.fullpage.setAutoScrolling(!0), a("#fp-nav").show(), g.removeClass("fp-responsive"))
+ }
+ }
+
+ function W(b, a){
+ var e = "all " + c.scrollingSpeed + "ms " + c.easingcss3;
+ return a ? (b.removeClass("fp-notransition"), b.css({"-webkit-transition": e, transition: e})) : H(b)
+ }
+
+ function H(b){
+ return b.addClass("fp-notransition")
+ }
+
+ function na(b, c){
+ if (825 > b || 900 > c) {
+ var e = Math.min(100 *
+ b / 825, 100 * c / 900).toFixed(2);
+ a("body").css("font-size", e + "%")
+ } else a("body").css("font-size", "100%")
+ }
+
+ function C(b, d){
+ c.menu && (a(c.menu).find(".active").removeClass("active"), a(c.menu).find('[data-menuanchor="' + b + '"]').addClass("active"));
+ c.navigation && (a("#fp-nav").find(".active").removeClass("active"), b ? a("#fp-nav").find('a[href="#' + b + '"]').addClass("active") : a("#fp-nav").find("li").eq(d).find("a").addClass("active"))
+ }
+
+ function B(b){
+ var c = a(".fp-section.active").index(".fp-section");
+ b = b.index(".fp-section");
+ return c == b ? "none" : c > b ? "up" : "down"
+ }
+
+ function w(b){
+ b.css("overflow", "hidden");
+ var a = b.closest(".fp-section"), e = b.find(".fp-scrollable");
+ if (e.length)var f = e.get(0).scrollHeight; else f = b.get(0).scrollHeight, c.verticalCentered && (f = b.find(".fp-tableCell").get(0).scrollHeight);
+ a = k - parseInt(a.css("padding-bottom")) - parseInt(a.css("padding-top"));
+ f > a ? e.length ? e.css("height", a + "px").parent().css("height", a + "px") : (c.verticalCentered ? b.find(".fp-tableCell").wrapInner('
') : b.wrapInner('
'),
+ b.find(".fp-scrollable").slimScroll({
+ allowPageScroll: !0,
+ height : a + "px",
+ size : "10px",
+ alwaysVisible : !0
+ })) : aa(b);
+ b.css("overflow", "")
+ }
+
+ function aa(b){
+ b.find(".fp-scrollable").children().first().unwrap().unwrap();
+ b.find(".slimScrollBar").remove();
+ b.find(".slimScrollRail").remove()
+ }
+
+ function ba(b){
+ b.addClass("fp-table").wrapInner('
')
+ }
+
+ function ca(b){
+ var a = k;
+ if (c.paddingTop || c.paddingBottom)a = b, a.hasClass("fp-section") || (a = b.closest(".fp-section")), b = parseInt(a.css("padding-top")) +
+ parseInt(a.css("padding-bottom")), a = k - b;
+ return a
+ }
+
+ function S(b, a){
+ W(g, a);
+ g.css(X(b))
+ }
+
+ function F(b, c){
+ "undefined" === typeof c && (c = 0);
+ var e = isNaN(b) ? a('[data-anchor="' + b + '"]') : a(".fp-section").eq(b - 1);
+ b === q || e.hasClass("active") ? da(e, c) : m(e, function(){
+ da(e, c)
+ })
+ }
+
+ function da(b, a){
+ if ("undefined" != typeof a) {
+ var c = b.find(".fp-slides"), f = c.find('[data-anchor="' + a + '"]');
+ f.length || (f = c.find(".fp-slide").eq(a));
+ f.length && u(c, f)
+ }
+ }
+
+ function oa(b, a){
+ b.append('
');
+ var e = b.find(".fp-slidesNav");
+ e.addClass(c.slidesNavPosition);
+ for (var f = 0; f < a; f++)e.find("ul").append('
');
+ e.css("margin-left", "-" + e.width() / 2 + "px");
+ e.find("li").first().find("a").addClass("active")
+ }
+
+ function R(b, a, e){
+ var f = "";
+ c.anchors.length && (b ? ("undefined" !== typeof e && (f = e), "undefined" === typeof a && (a = b), E = a, location.hash = f + "/" + a) : ("undefined" !== typeof b && (E = a), location.hash = e))
+ }
+
+ function pa(){
+ var a = document.createElement("p"), c, e = {
+ webkitTransform: "-webkit-transform", OTransform: "-o-transform",
+ msTransform : "-ms-transform", MozTransform: "-moz-transform", transform: "transform"
+ };
+ document.body.insertBefore(a, null);
+ for (var f in e)void 0 !== a.style[f] && (a.style[f] = "translate3d(1px,1px,1px)", c = window.getComputedStyle(a).getPropertyValue(e[f]));
+ document.body.removeChild(a);
+ return void 0 !== c && 0 < c.length && "none" !== c
+ }
+
+ function ea(){
+ return window.PointerEvent ? {down: "pointerdown", move: "pointermove"} : {
+ down: "MSPointerDown",
+ move: "MSPointerMove"
+ }
+ }
+
+ function O(a){
+ var c = [];
+ window.navigator.msPointerEnabled ? (c.y =
+ a.pageY, c.x = a.pageX) : (c.y = a.touches[0].pageY, c.x = a.touches[0].pageX);
+ return c
+ }
+
+ function D(b){
+ var d = c.scrollingSpeed;
+ a.fn.fullpage.setScrollingSpeed(0);
+ u(b.closest(".fp-slides"), b);
+ a.fn.fullpage.setScrollingSpeed(d)
+ }
+
+ function p(a){
+ c.scrollBar ? g.scrollTop(a) : c.css3 ? S("translate3d(0px, -" + a + "px, 0px)", !1) : g.css("top", -a)
+ }
+
+ function X(a){
+ return {"-webkit-transform": a, "-moz-transform": a, "-ms-transform": a, transform: a}
+ }
+
+ function qa(){
+ p(0);
+ a("#fp-nav, .fp-slidesNav, .fp-controlArrow").remove();
+ a(".fp-section").css({
+ height : "",
+ "background-color": "", padding: ""
+ });
+ a(".fp-slide").css({width: ""});
+ g.css({height: "", position: "", "-ms-touch-action": "", "touch-action": ""});
+ a(".fp-section, .fp-slide").each(function(){
+ aa(a(this));
+ a(this).removeClass("fp-table active")
+ });
+ H(g);
+ H(g.find(".fp-easing"));
+ g.find(".fp-tableCell, .fp-slidesContainer, .fp-slides").each(function(){
+ a(this).replaceWith(this.childNodes)
+ });
+ a("html, body").scrollTop(0)
+ }
+
+ c = a.extend({
+ menu : !1,
+ anchors : [],
+ navigation : !1,
+ navigationPosition : "right",
+ navigationColor : "#000",
+ navigationTooltips : [],
+ slidesNavigation : !1,
+ slidesNavPosition : "bottom",
+ scrollBar : !1,
+ css3 : !0,
+ scrollingSpeed : 700,
+ autoScrolling : !0,
+ easing : "easeInQuart",
+ easingcss3 : "ease",
+ loopBottom : !1,
+ loopTop : !1,
+ loopHorizontal : !0,
+ continuousVertical : !1,
+ normalScrollElements : null,
+ scrollOverflow : !1,
+ touchSensitivity : 5,
+ normalScrollElementTouchThreshold: 5,
+ keyboardScrolling : !0,
+ animateAnchor : !0,
+ controlArrowColor : "#fff",
+ verticalCentered : !0,
+ resize : !0,
+ sectionsColor : [],
+ paddingTop : 0,
+ paddingBottom : 0,
+ fixedElements : null,
+ responsive : 0,
+ sectionSelector : ".section",
+ slideSelector : ".slide",
+ afterLoad : null,
+ onLeave : null,
+ afterRender : null,
+ afterResize : null,
+ afterReBuild : null,
+ afterSlideLoad : null,
+ onSlideLeave : null
+ }, c);
+ c.continuousVertical && (c.loopTop || c.loopBottom) && (c.continuousVertical = !1, console && console.warn && console.warn("Option `loopTop/loopBottom` is mutually exclusive with `continuousVertical`; `continuousVertical` disabled"));
+ c.continuousVertical && c.scrollBar && (c.continuousVertical = !1, console && console.warn && console.warn("Option `scrollBar` is mutually exclusive with `continuousVertical`; `continuousVertical` disabled"));
+ a.fn.fullpage.setAutoScrolling = function(b){
+ c.autoScrolling = b;
+ b = a(".fp-section.active");
+ c.autoScrolling && !c.scrollBar ? (a("html, body").css({
+ overflow: "hidden",
+ height : "100%"
+ }), g.css({
+ "-ms-touch-action": "none",
+ "touch-action" : "none"
+ }), b.length && p(b.position().top)) : (a("html, body").css({
+ overflow: "visible",
+ height : "initial"
+ }), g.css({"-ms-touch-action": "", "touch-action": ""}), p(0), a("html, body").scrollTop(b.position().top))
+ };
+ a.fn.fullpage.setScrollingSpeed = function(a){
+ c.scrollingSpeed = a
+ };
+ a.fn.fullpage.setMouseWheelScrolling =
+ function(a){
+ a ? document.addEventListener ? (document.addEventListener("mousewheel", n, !1), document.addEventListener("wheel", n, !1)) : document.attachEvent("onmousewheel", n) : document.addEventListener ? (document.removeEventListener("mousewheel", n, !1), document.removeEventListener("wheel", n, !1)) : document.detachEvent("onmousewheel", n)
+ };
+ a.fn.fullpage.setAllowScrolling = function(b){
+ if (b) {
+ if (a.fn.fullpage.setMouseWheelScrolling(!0), G || fa)MSPointer = ea(), a(document).off("touchstart " + MSPointer.down).on("touchstart " +
+ MSPointer.down, ja), a(document).off("touchmove " + MSPointer.move).on("touchmove " + MSPointer.move, ia)
+ } else if (a.fn.fullpage.setMouseWheelScrolling(!1), G || fa)MSPointer = ea(), a(document).off("touchstart " + MSPointer.down), a(document).off("touchmove " + MSPointer.move)
+ };
+ a.fn.fullpage.setKeyboardScrolling = function(a){
+ c.keyboardScrolling = a
+ };
+ a.fn.fullpage.moveSectionUp = function(){
+ var b = a(".fp-section.active").prev(".fp-section");
+ b.length || !c.loopTop && !c.continuousVertical || (b = a(".fp-section").last());
+ b.length &&
+ m(b, null, !0)
+ };
+ a.fn.fullpage.moveSectionDown = function(){
+ var b = a(".fp-section.active").next(".fp-section");
+ b.length || !c.loopBottom && !c.continuousVertical || (b = a(".fp-section").first());
+ b.length && m(b, null, !1)
+ };
+ a.fn.fullpage.moveTo = function(b, c){
+ var e = "", e = isNaN(b) ? a('[data-anchor="' + b + '"]') : a(".fp-section").eq(b - 1);
+ "undefined" !== typeof c ? F(b, c) : 0 < e.length && m(e)
+ };
+ a.fn.fullpage.moveSlideRight = function(){
+ P("next")
+ };
+ a.fn.fullpage.moveSlideLeft = function(){
+ P("prev")
+ };
+ a.fn.fullpage.reBuild = function(b){
+ v = !0;
+ var d = a(window).width();
+ k = a(window).height();
+ c.resize && na(k, d);
+ a(".fp-section").each(function(){
+ parseInt(a(this).css("padding-bottom"));
+ parseInt(a(this).css("padding-top"));
+ c.verticalCentered && a(this).find(".fp-tableCell").css("height", ca(a(this)) + "px");
+ a(this).css("height", k + "px");
+ if (c.scrollOverflow) {
+ var b = a(this).find(".fp-slide");
+ b.length ? b.each(function(){
+ w(a(this))
+ }) : w(a(this))
+ }
+ b = a(this).find(".fp-slides");
+ b.length && u(b, b.find(".fp-slide.active"))
+ });
+ a(".fp-section.active").position();
+ d = a(".fp-section.active");
+ d.index(".fp-section") && m(d);
+ v = !1;
+ a.isFunction(c.afterResize) && b && c.afterResize.call(this);
+ a.isFunction(c.afterReBuild) && !b && c.afterReBuild.call(this)
+ };
+ var t = !1, G = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|Windows Phone|Tizen|Bada)/), fa = "ontouchstart"in window || 0 < navigator.msMaxTouchPoints, g = a(this), k = a(window).height(), l = !1, v = !1, q, E, h, U = "fullpage-wrapper";
+ a.fn.fullpage.setAllowScrolling(!0);
+ c.css3 && (c.css3 = pa());
+ a(this).length ? (g.css({height: "100%", position: "relative"}),
+ g.addClass(U)) : console.error("Error! Fullpage.js needs to be initialized with a selector. For example: $('#myContainer').fullpage();");
+ a(c.sectionSelector).each(function(){
+ a(this).addClass("fp-section")
+ });
+ a(c.slideSelector).each(function(){
+ a(this).addClass("fp-slide")
+ });
+ c.navigation && ga();
+ a(".fp-section").each(function(b){
+ var d = a(this), e = a(this).find(".fp-slide"), f = e.length;
+ b || 0 !== a(".fp-section.active").length || a(this).addClass("active");
+ a(this).css("height", k + "px");
+ (c.paddingTop || c.paddingBottom) &&
+ a(this).css("padding", c.paddingTop + " 0 " + c.paddingBottom + " 0");
+ "undefined" !== typeof c.sectionsColor[b] && a(this).css("background-color", c.sectionsColor[b]);
+ "undefined" !== typeof c.anchors[b] && a(this).attr("data-anchor", c.anchors[b]);
+ if (1 < f) {
+ b = 100 * f;
+ var g = 100 / f;
+ e.wrapAll('
');
+ e.parent().wrap('
');
+ a(this).find(".fp-slidesContainer").css("width", b + "%");
+ a(this).find(".fp-slides").after('
');
+ "#fff" != c.controlArrowColor && (a(this).find(".fp-controlArrow.fp-next").css("border-color", "transparent transparent transparent " + c.controlArrowColor), a(this).find(".fp-controlArrow.fp-prev").css("border-color", "transparent " + c.controlArrowColor + " transparent transparent"));
+ c.loopHorizontal || a(this).find(".fp-controlArrow.fp-prev").hide();
+ c.slidesNavigation && oa(a(this), f);
+ e.each(function(b){
+ a(this).css("width", g + "%");
+ c.verticalCentered && ba(a(this))
+ });
+ d = d.find(".fp-slide.active");
+ 0 == d.length ? e.eq(0).addClass("active") :
+ D(d)
+ } else c.verticalCentered && ba(a(this))
+ }).promise().done(function(){
+ a.fn.fullpage.setAutoScrolling(c.autoScrolling);
+ var b = a(".fp-section.active").find(".fp-slide.active");
+ b.length && (0 != a(".fp-section.active").index(".fp-section") || 0 == a(".fp-section.active").index(".fp-section") && 0 != b.index()) && D(b);
+ c.fixedElements && c.css3 && a(c.fixedElements).appendTo("body");
+ c.navigation && (h.css("margin-top", "-" + h.height() / 2 + "px"), h.find("li").eq(a(".fp-section.active").index(".fp-section")).find("a").addClass("active"));
+ c.menu && c.css3 && a(c.menu).closest(".fullpage-wrapper").length && a(c.menu).appendTo("body");
+ c.scrollOverflow ? ("complete" === document.readyState && I(), a(window).on("load", I)) : a.isFunction(c.afterRender) && c.afterRender.call(this);
+ Z();
+ b = window.location.hash.replace("#", "").split("/")[0];
+ if (b.length) {
+ var d = a('[data-anchor="' + b + '"]');
+ !c.animateAnchor && d.length && (c.autoScrolling ? p(d.position().top) : (p(0), a("html, body").scrollTop(d.position().top)), C(b, null), a.isFunction(c.afterLoad) && c.afterLoad.call(this,
+ b, d.index(".fp-section") + 1), d.addClass("active").siblings().removeClass("active"))
+ }
+ a(window).on("load", function(){
+ var a = window.location.hash.replace("#", "").split("/"), b = a[0], a = a[1];
+ b && F(b, a)
+ })
+ });
+ var K, L, A = !1;
+ a(window).on("scroll", J);
+ var s = 0, z = 0, r = 0, y = 0;
+ a(window).on("hashchange", V);
+ a(document).keydown(function(b){
+ if (c.keyboardScrolling && !l && c.autoScrolling)switch (b.which) {
+ case 38:
+ case 33:
+ a.fn.fullpage.moveSectionUp();
+ break;
+ case 40:
+ case 34:
+ a.fn.fullpage.moveSectionDown();
+ break;
+ case 36:
+ a.fn.fullpage.moveTo(1);
+ break;
+ case 35:
+ a.fn.fullpage.moveTo(a(".fp-section").length);
+ break;
+ case 37:
+ a.fn.fullpage.moveSlideLeft();
+ break;
+ case 39:
+ a.fn.fullpage.moveSlideRight()
+ }
+ });
+ a(document).on("click touchstart", "#fp-nav a", function(b){
+ b.preventDefault();
+ b = a(this).parent().index();
+ m(a(".fp-section").eq(b))
+ });
+ a(document).on("click touchstart", ".fp-slidesNav a", function(b){
+ b.preventDefault();
+ b = a(this).closest(".fp-section").find(".fp-slides");
+ var c = b.find(".fp-slide").eq(a(this).closest("li").index());
+ u(b, c)
+ });
+ a(document).on({
+ mouseenter : function(){
+ var b =
+ a(this).data("tooltip");
+ a('
' + b + "
").hide().appendTo(a(this)).fadeIn(200)
+ }, mouseleave: function(){
+ a(this).find(".fp-tooltip").fadeOut(200, function(){
+ a(this).remove()
+ })
+ }
+ }, "#fp-nav li");
+ c.normalScrollElements && (a(document).on("mouseenter", c.normalScrollElements, function(){
+ a.fn.fullpage.setMouseWheelScrolling(!1)
+ }), a(document).on("mouseleave", c.normalScrollElements, function(){
+ a.fn.fullpage.setMouseWheelScrolling(!0)
+ }));
+ a(".fp-section").on("click touchstart",
+ ".fp-controlArrow", function(){
+ a(this).hasClass("fp-prev") ? a.fn.fullpage.moveSlideLeft() : a.fn.fullpage.moveSlideRight()
+ });
+ a(window).resize(Y);
+ var $;
+ a.fn.fullpage.destroy = function(b){
+ a.fn.fullpage.setAutoScrolling(!1);
+ a.fn.fullpage.setAllowScrolling(!1);
+ a.fn.fullpage.setKeyboardScrolling(!1);
+ a(window).off("scroll", J).off("hashchange", V).off("resize", Y);
+ a(document).off("click", "#fp-nav a").off("mouseenter", "#fp-nav li").off("mouseleave", "#fp-nav li").off("click", ".fp-slidesNav a").off("mouseover", c.normalScrollElements).off("mouseout",
+ c.normalScrollElements);
+ a(".fp-section").off("click", ".fp-controlArrow");
+ b && qa()
+ }
+ }
+})(jQuery);
\ No newline at end of file
diff --git a/web/public/js/jquery.slimscroll.min.js b/web/public/js/jquery.slimscroll.min.js
new file mode 100644
index 0000000..baecb87
--- /dev/null
+++ b/web/public/js/jquery.slimscroll.min.js
@@ -0,0 +1,198 @@
+/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
+ *
+ * Version: 1.3.3
+ *
+ */
+(function(e){
+ e.fn.extend({
+ slimScroll: function(g){
+ var a = e.extend({
+ width : "auto",
+ height : "250px",
+ size : "7px",
+ color : "#000",
+ position : "right",
+ distance : "1px",
+ start : "top",
+ opacity : .4,
+ alwaysVisible : !1,
+ disableFadeOut : !1,
+ railVisible : !1,
+ railColor : "#333",
+ railOpacity : .2,
+ railDraggable : !0,
+ railClass : "slimScrollRail",
+ barClass : "slimScrollBar",
+ wrapperClass : "slimScrollDiv",
+ allowPageScroll : !1,
+ wheelStep : 20,
+ touchScrollStep : 200,
+ borderRadius : "7px",
+ railBorderRadius: "7px"
+ }, g);
+ this.each(function(){
+ function u(d){
+ if (r) {
+ d = d || window.event;
+ var c = 0;
+ d.wheelDelta && (c = -d.wheelDelta / 120);
+ d.detail && (c = d.detail / 3);
+ e(d.target || d.srcTarget || d.srcElement).closest("." + a.wrapperClass).is(b.parent()) && m(c, !0);
+ d.preventDefault && !k && d.preventDefault();
+ k || (d.returnValue = !1)
+ }
+ }
+
+ function m(d, e, g){
+ k = !1;
+ var f = d, h = b.outerHeight() - c.outerHeight();
+ e && (f = parseInt(c.css("top")) + d * parseInt(a.wheelStep) / 100 * c.outerHeight(), f = Math.min(Math.max(f, 0), h), f = 0 < d ? Math.ceil(f) : Math.floor(f), c.css({top: f + "px"}));
+ l = parseInt(c.css("top")) / (b.outerHeight() - c.outerHeight());
+ f = l * (b[0].scrollHeight - b.outerHeight());
+ g && (f = d, d = f / b[0].scrollHeight * b.outerHeight(), d = Math.min(Math.max(d, 0), h), c.css({top: d + "px"}));
+ b.scrollTop(f);
+ b.trigger("slimscrolling", ~~f);
+ v();
+ p()
+ }
+
+ function C(){
+ window.addEventListener ? (this.addEventListener("DOMMouseScroll", u, !1), this.addEventListener("mousewheel", u, !1)) : document.attachEvent("onmousewheel", u)
+ }
+
+ function w(){
+ s = Math.max(b.outerHeight() / b[0].scrollHeight * b.outerHeight(), 30);
+ c.css({height: s + "px"});
+ var a = s == b.outerHeight() ? "none" : "block";
+ c.css({display: a})
+ }
+
+ function v(){
+ w();
+ clearTimeout(A);
+ l == ~~l ? (k = a.allowPageScroll, B != l && b.trigger("slimscroll", 0 == ~~l ? "top" : "bottom")) : k = !1;
+ B = l;
+ s >= b.outerHeight() ? k = !0 : (c.stop(!0, !0).fadeIn("fast"), a.railVisible && h.stop(!0, !0).fadeIn("fast"))
+ }
+
+ function p(){
+ a.alwaysVisible || (A = setTimeout(function(){
+ a.disableFadeOut && r || x || y || (c.fadeOut("slow"), h.fadeOut("slow"))
+ }, 1E3))
+ }
+
+ var r, x, y, A, z, s, l, B, k = !1, b = e(this);
+ if (b.parent().hasClass(a.wrapperClass)) {
+ var n = b.scrollTop(), c = b.parent().find("." + a.barClass), h = b.parent().find("." + a.railClass);
+ w();
+ if (e.isPlainObject(g)) {
+ if ("height"in g && "auto" == g.height) {
+ b.parent().css("height", "auto");
+ b.css("height", "auto");
+ var q = b.parent().parent().height();
+ b.parent().css("height", q);
+ b.css("height", q)
+ }
+ if ("scrollTo"in g)n = parseInt(a.scrollTo); else if ("scrollBy"in g)n += parseInt(a.scrollBy); else if ("destroy"in g) {
+ c.remove();
+ h.remove();
+ b.unwrap();
+ return
+ }
+ m(n, !1, !0)
+ }
+ } else if (!(e.isPlainObject(g) && "destroy"in g)) {
+ a.height = "auto" == a.height ? b.parent().height() : a.height;
+ n = e("
").addClass(a.wrapperClass).css({
+ position: "relative",
+ overflow: "hidden", width: a.width, height: a.height
+ });
+ b.css({overflow: "hidden", width: a.width, height: a.height});
+ var h = e("
").addClass(a.railClass).css({
+ width : a.size,
+ height : "100%",
+ position : "absolute",
+ top : 0,
+ display : a.alwaysVisible && a.railVisible ? "block" : "none",
+ "border-radius": a.railBorderRadius,
+ background : a.railColor,
+ opacity : a.railOpacity,
+ zIndex : 90
+ }), c = e("
").addClass(a.barClass).css({
+ background : a.color,
+ width : a.size,
+ position : "absolute",
+ top : 0,
+ opacity : a.opacity,
+ display : a.alwaysVisible ?
+ "block" : "none",
+ "border-radius" : a.borderRadius,
+ BorderRadius : a.borderRadius,
+ MozBorderRadius : a.borderRadius,
+ WebkitBorderRadius: a.borderRadius,
+ zIndex : 99
+ }), q = "right" == a.position ? {right: a.distance} : {left: a.distance};
+ h.css(q);
+ c.css(q);
+ b.wrap(n);
+ b.parent().append(c);
+ b.parent().append(h);
+ a.railDraggable && c.bind("mousedown", function(a){
+ var b = e(document);
+ y = !0;
+ t = parseFloat(c.css("top"));
+ pageY = a.pageY;
+ b.bind("mousemove.slimscroll", function(a){
+ currTop = t + a.pageY - pageY;
+ c.css("top", currTop);
+ m(0, c.position().top, !1)
+ });
+ b.bind("mouseup.slimscroll", function(a){
+ y = !1;
+ p();
+ b.unbind(".slimscroll")
+ });
+ return !1
+ }).bind("selectstart.slimscroll", function(a){
+ a.stopPropagation();
+ a.preventDefault();
+ return !1
+ });
+ h.hover(function(){
+ v()
+ }, function(){
+ p()
+ });
+ c.hover(function(){
+ x = !0
+ }, function(){
+ x = !1
+ });
+ b.hover(function(){
+ r = !0;
+ v();
+ p()
+ }, function(){
+ r = !1;
+ p()
+ });
+ b.bind("touchstart", function(a, b){
+ a.originalEvent.touches.length && (z = a.originalEvent.touches[0].pageY)
+ });
+ b.bind("touchmove", function(b){
+ k || b.originalEvent.preventDefault();
+ b.originalEvent.touches.length &&
+ (m((z - b.originalEvent.touches[0].pageY) / a.touchScrollStep, !0), z = b.originalEvent.touches[0].pageY)
+ });
+ w();
+ "bottom" === a.start ? (c.css({top: b.outerHeight() - c.outerHeight()}), m(0, !0)) : "top" !== a.start && (m(e(a.start).position().top, null, !0), a.alwaysVisible || c.hide());
+ C()
+ }
+ });
+ return this
+ }
+ });
+ e.fn.extend({slimscroll: e.fn.slimScroll})
+})(jQuery);
diff --git a/web/public/js/jquery.sticky.min.js b/web/public/js/jquery.sticky.min.js
new file mode 100644
index 0000000..5f4a8e4
--- /dev/null
+++ b/web/public/js/jquery.sticky.min.js
@@ -0,0 +1,176 @@
+/**
+ * jquery.sticky 0.0.1
+ * https://github.com/Tjatse/sticky
+ *
+ * Apache, License 2.0
+ * Copyright (C) 2014 Tjatse
+ */
+(function(b){
+ var a = {timers: {}, queue: {}};
+ b.each([b.fn, b], function(d, e){
+ e.extend({sticky: c})
+ });
+ function c(d, e){
+ if (!d) {
+ return
+ }
+ e = e || {};
+ if (typeof d == "string") {
+ e.body = d
+ } else {
+ e = d
+ }
+ e = b.extend({
+ icon : "",
+ title : "",
+ body : "",
+ width : 300,
+ speed : 500,
+ position : "top-right",
+ hideAfter : 3000,
+ closeable : true,
+ useAnimateCss : false,
+ animations : {
+ "top-left" : ["zoomInRight", "zoomOutRight"],
+ "top-mid" : ["zoomInUp", "zoomOutUp"],
+ "top-right" : ["zoomInLeft", "zoomOutLeft"],
+ "mid-left" : ["zoomInRight", "zoomOutRight"],
+ "mid-mid" : ["zoomIn", "zoomOut"],
+ "mid-right" : ["zoomInLeft", "zoomOutLeft"],
+ "bottom-left" : ["zoomInRight", "zoomOutRight"],
+ "bottom-mid" : ["zoomInDown", "zoomOutDown"],
+ "bottom-right": ["zoomInLeft", "zoomOutLeft"]
+ },
+ iconClassName : "sticky-icon",
+ bodyClassName : "sticky-body",
+ titleClassName : "sticky-title",
+ stickyClassName: "sticky",
+ holderClassName: "sticky-holder"
+ }, e);
+ if (!e.body) {
+ return
+ }
+ e.animationend = "webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend";
+ e.id = "sticky-" + Math.random().toString().replace(".", "");
+ var h = [["top", "mid", "bottom"], ["left", "mid", "right"]], i;
+ if (!e.position || (i = e.position.split("-")).length != 2 || h[0].indexOf(i[0]) < 0 || h[1].indexOf(i[1]) < 0) {
+ i = ["top", "right"];
+ e.position = i.join("-")
+ }
+ var d = b("body").eq(0), f;
+ if ((f = d.find(".sticky-holder.sticky-" + e.position)).length == 0) {
+ f = b("
", {"class": "sticky-holder sticky-" + e.position}).css({width: e.width})
+ }
+ a.queue[e.position] = a.queue[e.position] || [];
+ a.queue[e.position].push(e);
+ if (!f.is(":empty")) {
+ return
+ }
+ (function g(r){
+ var p = b("
", {"id": r.id, "class": r.stickyClassName}).css({width: r.width, opacity: 0.01});
+ if (r.title) {
+ b("
", {"class": r.titleClassName}).html(r.title).appendTo(p)
+ }
+ if (r.icon) {
+ r.body = '
' + r.body
+ }
+ b("
", {"class": r.bodyClassName}).html(r.body).appendTo(p);
+ b.each(["speed", "hideAfter"], function(s, t){
+ p.data(t, r[t])
+ });
+ function n(u){
+ if (u.target) {
+ u = b(u.target)
+ }
+ var w = u.attr("id"), v = a.timers[w];
+ if (v) {
+ try {
+ clearTimeout(v)
+ } catch (s) {
+ }
+ delete a.timers[w]
+ }
+ function t(){
+ var y = b(this).remove().attr("id");
+ r.onHidden && r.onHidden(y);
+ var x = a.queue[r.position];
+ if (x && x.length > 0) {
+ g(x.splice(0, 1)[0])
+ } else {
+ f.remove()
+ }
+ }
+
+ if (r.useAnimateCss) {
+ u.addClass("animated " + r.animations[r.position][1]).one(r.animationend, t)
+ } else {
+ u.stop().dequeue().animate(p.data("anim-exit"), u.data("speed"), t)
+ }
+ }
+
+ if (r.closeable) {
+ p.append("
× ").one("click", ">span", function(){
+ n(b(this).parent())
+ })
+ }
+ p.appendTo(f);
+ f.appendTo(d);
+ var l = {}, j = {}, k = {opacity: 1}, q = p.height() + 10, m = (i[1] == "mid" ? "top" : i[1]);
+ j[m] = ({left: -r.width, top: -q - 10, right: -r.width})[m];
+ k[m] = 0;
+ b.extend(l, ({left: {left: 5}, mid: {left: "50%", marginLeft: -r.width / 2}, right: {right: 5}})[i[1]], {top: 5});
+ if (i[0] == "mid") {
+ l.top = "50%";
+ l.marginTop = -q / 2 - 10;
+ if (i[1] == "mid") {
+ j.top = 0
+ }
+ } else {
+ if (i[0] == "bottom") {
+ delete l.top;
+ l.bottom = q;
+ if (i[1] == "mid") {
+ j.top = q
+ }
+ }
+ }
+ f.css(l);
+ p.data("anim-exit", j);
+ function o(){
+ var s = b(this).attr("class", r.stickyClassName).attr("id");
+ r.onShown && r.onShown(s)
+ }
+
+ if (!r.useAnimateCss) {
+ p.css(j).animate(k, r.speed, o)
+ } else {
+ p.css("opacity", 1).addClass("animated " + r.animations[r.position][0]).one(r.animationend, o)
+ }
+ p.on("dismiss", n);
+ j.opacity = 0.01;
+ if (r.hideAfter) {
+ a.timers[r.id] = setTimeout(n, p.data("hideAfter"), p)
+ }
+ })(a.queue[e.position].splice(0, 1)[0])
+ }
+
+ c.dequeue = function(f){
+ if (!f) {
+ for (var d in a.timers) {
+ try {
+ clearTimeout(a.timers[d])
+ } catch (e) {
+ }
+ }
+ a.timers = {};
+ a.queue = []
+ } else {
+ try {
+ clearTimeout(a.timers[f])
+ } catch (e) {
+ }
+ }
+ f = (f ? "#" + f : "div[id^=sticky-]");
+ b(f).trigger("dismiss")
+ }
+})(jQuery);
\ No newline at end of file
diff --git a/web/public/js/lodash.min.js b/web/public/js/lodash.min.js
new file mode 100644
index 0000000..e779a63
--- /dev/null
+++ b/web/public/js/lodash.min.js
@@ -0,0 +1,1817 @@
+/**
+ * @license
+ * Lo-Dash 3.0.0-pre (Custom Build) lodash.com/license | Underscore.js 1.7.0 underscorejs.org/LICENSE
+ * Build: `lodash modern -o ./dist/lodash.js`
+ */
+;
+(function(){
+ function n(n, t){
+ for (var r = -1, e = n.length; ++r < e && false !== t(n[r], r, n););
+ return n
+ }
+
+ function t(n, t){
+ for (var r = -1, e = n.length; ++r < e;)if (!t(n[r], r, n))return false;
+ return true
+ }
+
+ function r(n, t){
+ for (var r = -1, e = n.length, u = -1, o = []; ++r < e;) {
+ var i = n[r];
+ t(i, r, n) && (o[++u] = i)
+ }
+ return o
+ }
+
+ function e(n, t){
+ for (var r = -1, e = n.length, u = Array(e); ++r < e;)u[r] = t(n[r], r, n);
+ return u
+ }
+
+ function u(n, t, r, e){
+ var u = -1, o = n.length;
+ for (e && o && (r = n[++u]); ++u < o;)r = t(r, n[u], u, n);
+ return r
+ }
+
+ function o(n, t, r, e){
+ var u = n.length;
+ for (e && u && (r = n[--u]); u--;)r = t(r, n[u], u, n);
+ return r
+ }
+
+ function i(n, t){
+ for (var r = -1, e = n.length; ++r < e;)if (t(n[r], r, n))return true;
+ return false
+ }
+
+ function f(n, t){
+ if (n !== t) {
+ var r = n === n, e = t === t;
+ if (n > t || !r || typeof n == "undefined" && e)return 1;
+ if (n < t || !e || typeof t == "undefined" && r)return -1
+ }
+ return 0
+ }
+
+ function a(n, t, r){
+ if (t !== t)return _(n, r);
+ r = (r || 0) - 1;
+ for (var e = n.length; ++r < e;)if (n[r] === t)return r;
+ return -1
+ }
+
+ function l(n){
+ for (var t = -1, r = n ? n.length : 0, e = Array(r); ++t < r;)e[t] = n[t];
+ return e
+ }
+
+ function c(n, t){
+ var r = n.length;
+ for (n.sort(t); r--;)n[r] = n[r].c;
+ return n
+ }
+
+ function s(n){
+ return n.charCodeAt(0)
+ }
+
+ function p(n, t){
+ for (var r = -1, e = n.length; ++r < e && -1 < t.indexOf(n.charAt(r)););
+ return r
+ }
+
+ function h(n, t){
+ for (var r = n.length; r-- && -1 < t.indexOf(n.charAt(r)););
+ return r
+ }
+
+ function g(n, t){
+ return f(n.a, t.a) || n.b - t.b
+ }
+
+ function v(n, t){
+ for (var r = -1, e = n.a, u = t.a, o = e.length; ++r < o;) {
+ var i = f(e[r], u[r]);
+ if (i)return i
+ }
+ return n.b - t.b
+ }
+
+ function y(n){
+ return $t[n]
+ }
+
+ function d(n){
+ return Bt[n]
+ }
+
+ function m(n){
+ return "\\" + Dt[n]
+ }
+
+ function _(n, t, r){
+ var e = n.length;
+ for (t = r ? t || e : (t || 0) - 1; r ? t-- : ++t < e;) {
+ var u = n[t];
+ if (u !== u)return t
+ }
+ return -1
+ }
+
+ function b(n, t){
+ return n = +n, -1 < n && 0 == n % 1 && (null == t || n < t)
+ }
+
+ function w(n){
+ return 160 >= n && 9 <= n && 13 >= n || 32 == n || 160 == n || 5760 == n || 6158 == n || 8192 <= n && (8202 >= n || 8232 == n || 8233 == n || 8239 == n || 8287 == n || 12288 == n || 65279 == n)
+ }
+
+ function x(n, t){
+ for (var r = -1, e = n.length, u = -1, o = []; ++r < e;)n[r] === t && (n[r] = K, o[++u] = r);
+ return o
+ }
+
+ function j(n){
+ for (var t = -1, r = n.length; ++t < r && w(n.charCodeAt(t)););
+ return t
+ }
+
+ function A(n){
+ for (var t = n.length; t-- && w(n.charCodeAt(t)););
+ return t
+ }
+
+ function I(n){
+ return Lt[n]
+ }
+
+ function k(w){
+ function $t(n){
+ if (n && typeof n == "object" && !so(n)) {
+ if (n instanceof Bt)return n;
+ if (bu.call(n, "__wrapped__"))return new Bt(n.__wrapped__, n.__chain__, l(n.__actions__))
+ }
+ return new Bt(n)
+ }
+
+ function Bt(n, t, r){
+ this.__actions__ = r || [], this.__chain__ = !!t, this.__wrapped__ = n
+ }
+
+ function Lt(n){
+ this.actions = null, this.dir = 1, this.dropCount = 0, this.filtered = false, this.iteratees = null, this.takeCount = Gu, this.views = null, this.wrapped = n
+ }
+
+ function zt(){
+ this.__data__ = {}
+ }
+
+ function Dt(n){
+ var t = n ? n.length : 0;
+ for (this.data = {number: {}, set: new Tu}; t--;)this.push(n[t])
+ }
+
+ function qt(n, t){
+ var r = typeof t, e = n.data;
+ return ("number" == r ? e[r][t] : e.set.has(t)) ? 0 : -1
+ }
+
+ function Pt(n){
+ for (var t = -1, r = n.length, e = Zu; ++t < r;) {
+ var u = n[t];
+ u > e && (e = u)
+ }
+ return e
+ }
+
+ function Kt(n){
+ for (var t = -1, r = n.length, e = Gu; ++t < r;) {
+ var u = n[t];
+ u < e && (e = u)
+ }
+ return e
+ }
+
+ function Vt(n, t){
+ return typeof n == "undefined" ? t : n
+ }
+
+ function Zt(n, t, r, e){
+ return typeof n != "undefined" && bu.call(e, r) ? n : t
+ }
+
+ function Gt(n, t, r){
+ for (var e = -1, u = vo(t), o = u.length; ++e < o;) {
+ var i = u[e];
+ n[i] = r ? r(n[i], t[i], i, n, t) : t[i]
+ }
+ return n
+ }
+
+ function Jt(n, t){
+ for (var r = -1, e = n ? n.length : 0, u = qr(e), o = t.length, i = iu(o); ++r < o;) {
+ var f = t[r];
+ u ? (f = parseFloat(f), i[r] = b(f, e) ? n[f] : E) : i[r] = n[f]
+ }
+ return i
+ }
+
+ function Xt(n, t, r){
+ var e = typeof n;
+ if ("function" == e) {
+ if (typeof t == "undefined")return n;
+ if (e = uo(n), typeof e == "undefined") {
+ var u = $t.support;
+ if (u.funcNames && (e = !n.name), e = e || !u.funcDecomp, !e) {
+ var o = _u.call(n);
+ u.funcNames || (e = !et.test(o)), e || (e = lt.test(o) || Le(n), ro(n, e))
+ }
+ }
+ if (false === e || true !== e && e[1] & R)return n;
+ switch (r) {
+ case 1:
+ return function(r){
+ return n.call(t, r)
+ };
+ case 3:
+ return function(r, e, u){
+ return n.call(t, r, e, u)
+ };
+ case 4:
+ return function(r, e, u, o){
+ return n.call(t, r, e, u, o)
+ };
+ case 5:
+ return function(r, e, u, o, i){
+ return n.call(t, r, e, u, o, i)
+ }
+ }
+ return function(){
+ return n.apply(t, arguments)
+ }
+ }
+ return null == n ? nu : "object" == e ? tu(n) : ou(n)
+ }
+
+ function Ht(t, r, e, u, o, i, f){
+ var a;
+ if (e && (a = o ? e(t, u, o) : e(t)), typeof a != "undefined")return a;
+ if (u = so(t), a = t, u ? a = Lr(t, r) : Be(t) && (a = zr(t, r), null === a ? (r = false, a = {}) : r && (r = xu.call(a) == wt)), !r || a === t)return a;
+ for (i || (i = []), f || (f = []), o = i.length; o--;)if (i[o] == t)return f[o];
+ return i.push(t), f.push(a), (u ? n : cr)(t, function(n, u){
+ a[u] = Ht(n, r, e, u, t, i, f)
+ }), a
+ }
+
+ function Qt(n){
+ return Be(n) ? Bu(n) : {}
+ }
+
+ function nr(n, t){
+ var r = n ? n.length : 0, e = [];
+ if (!r)return e;
+ var u = -1, o = Br(), i = o == a, f = i && 200 <= t.length && eo(t), l = t.length;
+ f && (o = qt, i = false, t = f);
+ n:for (; ++u < r;)if (f = n[u], i && f === f) {
+ for (var c = l; c--;)if (t[c] === f)continue n;
+ e.push(f)
+ } else 0 > o(t, f) && e.push(f);
+ return e
+ }
+
+ function tr(n, t){
+ var r = n ? n.length : 0;
+ if (!qr(r))return cr(n, t);
+ for (var e = -1, u = Xr(n); ++e < r && false !== t(u[e], e, u););
+ return n
+ }
+
+ function rr(n, t){
+ var r = n ? n.length : 0;
+ if (!qr(r))return sr(n, t);
+ for (var e = Xr(n); r-- && false !== t(e[r], r, e););
+ return n
+ }
+
+ function er(n, t){
+ var r = true;
+ return tr(n, function(n, e, u){
+ return r = !!t(n, e, u)
+ }), r
+ }
+
+ function ur(n, t){
+ var r = [];
+ return tr(n, function(n, e, u){
+ t(n, e, u) && r.push(n)
+ }), r
+ }
+
+ function or(n, t, r, e){
+ var u;
+ return r(n, function(n, r, o){
+ return t(n, r, o) ? (u = e ? r : n, false) : void 0
+ }), u
+ }
+
+ function ir(n, t, r, e){
+ e = (e || 0) - 1;
+ for (var u = n.length, o = -1, i = []; ++e < u;) {
+ var f = n[e];
+ if (f && typeof f == "object" && typeof f.length == "number" && (so(f) || We(f))) {
+ t && (f = ir(f, t, r));
+ var a = -1, l = f.length;
+ for (i.length += l; ++a < l;)i[++o] = f[a]
+ } else r || (i[++o] = f)
+ }
+ return i
+ }
+
+ function fr(n, t, r){
+ var e = -1, u = Xr(n);
+ r = r(n);
+ for (var o = r.length; ++e < o;) {
+ var i = r[e];
+ if (false === t(u[i], i, u))break
+ }
+ return n
+ }
+
+ function ar(n, t, r){
+ var e = Xr(n);
+ r = r(n);
+ for (var u = r.length; u--;) {
+ var o = r[u];
+ if (false === t(e[o], o, e))break
+ }
+ return n
+ }
+
+ function lr(n, t){
+ fr(n, t, Pe)
+ }
+
+ function cr(n, t){
+ return fr(n, t, vo)
+ }
+
+ function sr(n, t){
+ return ar(n, t, vo)
+ }
+
+ function pr(n, t){
+ for (var r = -1, e = t.length, u = -1, o = []; ++r < e;) {
+ var i = t[r];
+ $e(n[i]) && (o[++u] = i)
+ }
+ return o
+ }
+
+ function hr(n, t, r, e, u, o){
+ var i = r && !u ? r(n, t) : E;
+ if (typeof i != "undefined")return !!i;
+ if (n === t)return 0 !== n || 1 / n == 1 / t;
+ var f = typeof n, a = typeof t;
+ if (("number" != f || "number" != a) && (null == n || null == t || "function" != f && "object" != f && "function" != a && "object" != a))return false;
+ var l = xu.call(n), c = l == gt, s = xu.call(t), i = s == gt;
+ c && (l = wt), i && (s = wt);
+ var a = Wt[l], f = l == mt, p = l == wt, h = s == wt;
+ if ((s = l == s) && a) {
+ if (c = n.length, p = t.length, c != p && !(e && p > c))return false
+ } else {
+ var g = p && bu.call(n, "__wrapped__"), h = h && bu.call(t, "__wrapped__");
+ if (g || h)return hr(g ? n.value() : n, h ? t.value() : t, r, e, u, o);
+ if (!s)return false;
+ if (!f && !p) {
+ switch (l) {
+ case yt:
+ case dt:
+ return +n == +t;
+ case bt:
+ return n != +n ? t != +t : 0 == n ? 1 / n == 1 / t : n == +t;
+ case xt:
+ case jt:
+ return n == gu(t)
+ }
+ return false
+ }
+ if (g = c ? pu : n.constructor, l = i ? pu : t.constructor, f) {
+ if (g.prototype.name != l.prototype.name)return false
+ } else if (p = !c && bu.call(n, "constructor"), h = !i && bu.call(t, "constructor"), p != h || !p && g != l && "constructor"in n && "constructor"in t && !(typeof g == "function" && g instanceof g && typeof l == "function" && l instanceof l))return false;
+ if (g = f ? ["message", "name"] : vo(n), l = f ? g : vo(t), c && g.push("length"), i && l.push("length"), c = g.length, p = l.length, c != p && !e)return false
+ }
+ for (u || (u = []), o || (o = []), l = u.length; l--;)if (u[l] == n)return o[l] == t;
+ if (u.push(n), o.push(t), i = true, a)for (; i && ++l < c;)if (a = n[l], e)for (f = p; f-- && !(i = hr(a, t[f], r, e, u, o));); else h = t[l], i = r ? r(a, h, l) : E, typeof i == "undefined" && (i = hr(a, h, r, e, u, o));
+ else for (; i && ++l < c;)p = g[l], (i = f || bu.call(t, p)) && (a = n[p], h = t[p], i = r ? r(a, h, p) : E, typeof i == "undefined" && (i = hr(a, h, r, e, u, o)));
+ return u.pop(), o.pop(), !!i
+ }
+
+ function gr(n, t, r){
+ var e = -1, u = typeof t == "function", o = n ? n.length : 0, i = qr(o) ? iu(o) : [];
+ return tr(n, function(n){
+ var o = u ? t : null != n && n[t];
+ i[++e] = o ? o.apply(n, r) : E
+ }), i
+ }
+
+ function vr(n, t){
+ var r = [];
+ return tr(n, function(n, e, u){
+ r.push(t(n, e, u))
+ }), r
+ }
+
+ function yr(t, r, e, u, o){
+ var i = Dr(r);
+ return (i ? n : cr)(r, function(n, r, f){
+ var a = Dr(n), l = ho(n), c = t[r];
+ if (a || l) {
+ for (u || (u = []), o || (o = []), l = u.length; l--;)if (u[l] == n)return void(t[r] = o[l]);
+ f = e ? e(c, n, r, t, f) : E, (l = typeof f == "undefined") && (f = a ? so(c) ? c : [] : ho(c) ? c : {}), u.push(n), o.push(f), l && yr(f, n, e, u, o), t[r] = f
+ } else f = e ? e(c, n, r, t, f) : E, typeof f == "undefined" && (f = n), (i || typeof f != "undefined") && (t[r] = f)
+ }), t
+ }
+
+ function dr(n, t){
+ return n + Ou(Yu() * (t - n + 1))
+ }
+
+ function mr(n, t, r, e, u){
+ return u(n, function(n, u, o){
+ r = e ? (e = false, n) : t(r, n, u, o)
+ }), r
+ }
+
+ function _r(n, t){
+ var r;
+ return tr(n, function(n, e, u){
+ return r = t(n, e, u), !r
+ }), !!r
+ }
+
+ function br(n, t, r, e){
+ var u = 0, o = n ? n.length : u;
+ t = r(t);
+ for (var i = t !== t, f = typeof t == "undefined"; u < o;) {
+ var a = Ou((u + o) / 2), l = r(n[a]), c = l === l;
+ (i ? c || e : f ? c && (e || typeof l != "undefined") : e ? l <= t : l < t) ? u = a + 1 : o = a
+ }
+ return qu(o, Xu)
+ }
+
+ function wr(n, t){
+ var r = -1, e = Br(), u = n.length, o = e == a, i = o && 200 <= u, f = i && eo(), l = [];
+ f ? (e = qt, o = false) : (i = false, f = t ? [] : l);
+ n:for (; ++r < u;) {
+ var c = n[r], s = t ? t(c, r, n) : c;
+ if (o && c === c) {
+ for (var p = f.length; p--;)if (f[p] === s)continue n;
+ t && f.push(s), l.push(c)
+ } else 0 > e(f, s) && ((t || i) && f.push(s), l.push(c))
+ }
+ return l
+ }
+
+ function xr(n, t){
+ for (var r = -1, e = t(n), u = e.length, o = iu(u); ++r < u;)o[r] = n[e[r]];
+ return o
+ }
+
+ function jr(n, t){
+ var r = n;
+ r instanceof Lt && (r = r.value());
+ for (var e = -1, u = t.length; ++e < u;) {
+ var r = [r], o = t[e], i = o.object;
+ Cu.apply(r, o.args), r = i[o.name].apply(i, r)
+ }
+ return r
+ }
+
+ function Ar(n){
+ return Iu.call(n, 0)
+ }
+
+ function Ir(n){
+ return n && Ft[xu.call(n)] ? E : n
+ }
+
+ function kr(n, t, r){
+ for (var e = r.length, u = -1, o = Mu(n.length - e, 0), i = -1, f = t.length, a = iu(o + f); ++i < f;)a[i] = t[i];
+ for (; ++u < e;)a[r[u]] = n[u];
+ for (; o--;)a[i++] = n[u++];
+ return a
+ }
+
+ function Er(n, t, r){
+ for (var e = -1, u = r.length, o = -1, i = Mu(n.length - u, 0), f = -1, a = t.length, l = iu(i + a); ++o < i;)l[o] = n[o];
+ for (i = o; ++f < a;)l[i + f] = t[f];
+ for (; ++e < u;)l[i + r[e]] = n[o++];
+ return l
+ }
+
+ function Or(n, t){
+ return function(r, e, u){
+ e = $r(e, u, 3);
+ var o = t ? t() : {};
+ if (so(r)) {
+ u = -1;
+ for (var i = r.length; ++u < i;) {
+ var f = r[u];
+ n(o, f, e(f, u, r), r)
+ }
+ } else tr(r, function(t, r, u){
+ n(o, t, e(t, r, u), u)
+ });
+ return o
+ }
+ }
+
+ function Rr(n){
+ return function(){
+ var t = arguments.length, r = arguments[0];
+ if (2 > t || null == r)return r;
+ if (3 < t && Mr(arguments[1], arguments[2], arguments[3]) && (t = 2), 3 < t && "function" == typeof arguments[t - 2])var e = Xt(arguments[--t - 1], arguments[t--], 5); else 2 < t && "function" == typeof arguments[t - 1] && (e = arguments[--t]);
+ for (var u = 0; ++u < t;)n(r, arguments[u], e);
+ return r
+ }
+ }
+
+ function Cr(n, t){
+ function r(){
+ return (this instanceof r ? e : n).apply(t, arguments)
+ }
+
+ var e = Tr(n);
+ return r
+ }
+
+ function Sr(n){
+ return function(t){
+ var r = -1;
+ t = Je(Ve(t));
+ for (var e = t.length, u = ""; ++r < e;)u = n(u, t[r], r);
+ return u
+ }
+ }
+
+ function Tr(n){
+ return function(){
+ var t = Qt(n.prototype), r = n.apply(t, arguments);
+ return Be(r) ? r : t
+ }
+ }
+
+ function Nr(n, t, r, e, u, i, f, a, c){
+ function s(){
+ for (var _ = arguments.length, b = _, w = iu(_); b--;)w[b] = arguments[b];
+ if (a && (w = o(a, Yr, w)), e && (w = kr(w, e, u)), i && (w = Er(w, i, f)), g || v) {
+ var b = s.placeholder, j = x(w, b), _ = _ - j.length;
+ if (_ < c) {
+ var A = a ? l(a) : null, _ = Mu(c - _, 0), I = g ? j : null, j = g ? null : j, k = g ? w : null, w = g ? null : w;
+ return t |= g ? W : F, t &= ~(g ? F : W), y || (t &= ~(R | C)), w = Nr(n, t, r, k, I, w, j, A, _), w.placeholder = b, w
+ }
+ }
+ return b = p ? r : this, h && (n = b[m]), (this instanceof s ? d || Tr(n) : n).apply(b, w)
+ }
+
+ var p = t & R, h = t & C, g = t & S, v = t & T, y = t & N, d = !h && Tr(n), m = n;
+ return s
+ }
+
+ function Wr(n, t, r){
+ return n = n.length, t = +t, n < t && zu(t) ? (t -= n, r = null == r ? " " : gu(r), Ze(r, ku(t / r.length)).slice(0, t)) : ""
+ }
+
+ function Fr(n, t, r, e){
+ function u(){
+ for (var t = -1, f = arguments.length, a = -1, l = e.length, c = iu(f + l); ++a < l;)c[a] = e[a];
+ for (; f--;)c[a++] = arguments[++t];
+ return (this instanceof u ? i : n).apply(o ? r : this, c)
+ }
+
+ var o = t & R, i = Tr(n);
+ return u
+ }
+
+ function Ur(n, t, r, e, u, o, i){
+ var f = t & C;
+ if (!f && !$e(n))throw new vu(P);
+ var a = e ? e.length : 0;
+ if (a || (t &= ~(W | F), e = u = null), u = e && !u ? [] : u, a -= u ? u.length : 0, t & F) {
+ var c = e, s = u;
+ e = u = null
+ }
+ var p = !f && uo(n);
+ return n = [n, t, r, e, u, c, s, o, i], p && !(true === p || o && (p[3] || p[5])) && (t = n, o = t[1], n = p[1], n & R && (t[2] = p[2], o |= o & R ? 0 : N), (r = p[3]) && (e = t[3], t[3] = e ? kr(e, r, p[4]) : l(r), t[4] = e ? x(t[3], K) : l(p[4])), (r = p[5]) && (e = t[5], t[5] = e ? Er(e, r, p[6]) : l(r), t[6] = e ? x(t[5], K) : l(p[6])), (r = p[7]) && (r = l(r), Cu.apply(r, t[7]), t[7] = r), null == t[8] && (t[8] = p[8]), t[0] = p[0], t[1] = o | n, n = t), n[8] = null == n[8] ? f ? 0 : n[0].length : Mu(n[8] - a, 0) || 0, t = n[1], (p ? ro : oo)(t == R ? Cr(n[0], n[2]) : t != W && t != (R | W) || n[4].length ? Nr.apply(null, n) : Fr.apply(null, n), n)
+ }
+
+ function $r(n, t, r){
+ var e = $t.callback || He, e = e === He ? Xt : e;
+ return r ? e(n, t, r) : e
+ }
+
+ function Br(n, t, r){
+ var e = $t.indexOf || re, e = e === re ? a : e;
+ return n ? e(n, t, r) : e
+ }
+
+ function Lr(n, t){
+ var r = -1, e = n.length, u = new n.constructor(e);
+ if (!t)for (; ++r < e;)u[r] = n[r];
+ return e && "string" == typeof n[0] && bu.call(n, "index") && (u.index = n.index, u.input = n.input), u
+ }
+
+ function zr(n, t){
+ if (!n || !Ft[xu.call(n)])return null;
+ var r = n.constructor, e = xu.call(n), u = e == gt, o = e == wt;
+ if (!o || typeof r == "function" && r instanceof r || (r = pu), u || o) {
+ var i = t ? new r : Gt(new r, n);
+ return u && (i.length = n.length), i
+ }
+ switch (e) {
+ case At:
+ return Ar(n);
+ case yt:
+ case dt:
+ return new r(+n);
+ case It:
+ case kt:
+ case Et:
+ case Ot:
+ case Rt:
+ case Ct:
+ case St:
+ case Tt:
+ case Nt:
+ return e = n.buffer, new r(t ? Ar(e) : e, n.byteOffset, n.length);
+ case bt:
+ case jt:
+ return new r(n);
+ case xt:
+ i = new r(n.source, rt.exec(n)), i.lastIndex = n.lastIndex
+ }
+ return i
+ }
+
+ function Dr(n){
+ return n && typeof n == "object" && qr(n.length) && Wt[xu.call(n)] || false
+ }
+
+ function Mr(n, t, r){
+ if (!Be(r))return false;
+ var e = typeof t;
+ return "number" == e ? (e = r.length, e = qr(e) && b(t, e)) : e = "string" == e, e && r[t] === n
+ }
+
+ function qr(n){
+ return typeof n == "number" && -1 < n && n <= Qu
+ }
+
+ function Pr(n){
+ return n === n && (0 === n ? 0 < 1 / n : !Be(n))
+ }
+
+ function Kr(n, t){
+ n = Xr(n);
+ for (var r = -1, e = t.length, u = {}; ++r < e;) {
+ var o = t[r];
+ o in n && (u[o] = n[o])
+ }
+ return u
+ }
+
+ function Vr(n, t){
+ var r = {};
+ return lr(n, function(n, e, u){
+ t(n, e, u) && (r[e] = n)
+ }), r
+ }
+
+ function Yr(n, t){
+ for (var r = n.length, e = qu(t.length, r), u = l(n); e--;) {
+ var o = t[e];
+ n[e] = b(o, r) ? u[o] : E
+ }
+ return n
+ }
+
+ function Zr(n){
+ var t;
+ if (!n || typeof n != "object" || xu.call(n) != wt || !(bu.call(n, "constructor") || (t = n.constructor, typeof t != "function" || t instanceof t)))return false;
+ var r;
+ return lr(n, function(n, t){
+ r = t
+ }), typeof r == "undefined" || bu.call(n, r)
+ }
+
+ function Gr(n){
+ for (var t = Pe(n), r = t.length, e = r && n.length, u = $t.support, u = typeof e == "number" && 0 < e && (so(n) || u.nonEnumArgs && We(n)), o = -1, i = []; ++o < r;) {
+ var f = t[o];
+ (u && b(f, e) || bu.call(n, f)) && i.push(f)
+ }
+ return i
+ }
+
+ function Jr(n){
+ return null == n ? [] : qr(n.length) ? Be(n) ? n : pu(n) : Ke(n)
+ }
+
+ function Xr(n){
+ return Be(n) ? n : pu(n)
+ }
+
+ function Hr(n, t, r){
+ return (r ? Mr(n, t, r) : null == t) && (t = 1), ue(n, 0 > t ? 0 : t)
+ }
+
+ function Qr(n, t, r){
+ return (r ? Mr(n, t, r) : null == t) && (t = 1), t = n ? n.length - (+t || 0) : 0, ue(n, 0, 0 > t ? 0 : t)
+ }
+
+ function ne(n, t, r){
+ var e = -1, u = n ? n.length : 0;
+ for (t = $r(t, r, 3); ++e < u;)if (t(n[e], e, n))return e;
+ return -1
+ }
+
+ function te(n){
+ return n ? n[0] : E
+ }
+
+ function re(n, t, r){
+ var e = n ? n.length : 0;
+ if (!e)return -1;
+ if (typeof r == "number")r = 0 > r ? Mu(e + r, 0) : r || 0; else if (r)return r = oe(n, t), n = n[r], (t === t ? t === n : n !== n) ? r : -1;
+ return a(n, t, r)
+ }
+
+ function ee(n){
+ return Hr(n, 1)
+ }
+
+ function ue(n, t, r){
+ var e = -1, u = n ? n.length : 0, o = typeof r;
+ if (r && "number" != o && Mr(n, t, r) && (t = 0, r = u), t = null == t ? 0 : +t || 0, 0 > t && (t = -t > u ? 0 : u + t), r = "undefined" == o || r > u ? u : +r || 0, 0 > r && (r += u), r && r == u && !t)return l(n);
+ for (u = t > r ? 0 : r - t, r = iu(u); ++e < u;)r[e] = n[e + t];
+ return r
+ }
+
+ function oe(n, t, r, e){
+ return r = null == r ? nu : $r(r, e, 1), br(n, t, r)
+ }
+
+ function ie(n, t, r, e){
+ return r = null == r ? nu : $r(r, e, 1), br(n, t, r, true)
+ }
+
+ function fe(n, t, r, e){
+ if (!n || !n.length)return [];
+ if (typeof t != "boolean" && null != t && (e = r, r = Mr(n, t, e) ? null : t, t = false), null != r && (r = $r(r, e, 3)), t && Br() == a) {
+ t = r;
+ var u;
+ r = -1, e = n.length;
+ for (var o = -1, i = []; ++r < e;) {
+ var f = n[r], l = t ? t(f, r, n) : f;
+ r && u === l || (u = l, i[++o] = f)
+ }
+ n = i
+ } else n = wr(n, r);
+ return n
+ }
+
+ function ae(n){
+ for (var t = -1, r = Be(r = me(n, "length")) && r.length || 0, e = iu(r); ++t < r;)e[t] = _e(n, t);
+ return e
+ }
+
+ function le(n, t){
+ var r = -1, e = n ? n.length : 0, u = {};
+ for (t || !e || so(n[0]) || (t = []); ++r < e;) {
+ var o = n[r];
+ t ? u[o] = t[r] : o && (u[o[0]] = o[1])
+ }
+ return u
+ }
+
+ function ce(n){
+ return n = $t(n), n.__chain__ = true, n
+ }
+
+ function se(n, t, r){
+ var e = n ? n.length : 0;
+ return qr(e) || (n = Ke(n), e = n.length), e ? (r = typeof r == "number" ? 0 > r ? Mu(e + r, 0) : r || 0 : 0, typeof n == "string" || !so(n) && Me(n) ? r < e && -1 < n.indexOf(t, r) : -1 < Br(n, t, r)) : false
+ }
+
+ function pe(n, r, e){
+ var u = so(n) ? t : er;
+ return (typeof r != "function" || typeof e != "undefined") && (r = $r(r, e, 3)), u(n, r)
+ }
+
+ function he(n, t, e){
+ var u = so(n) ? r : ur;
+ return t = $r(t, e, 3), u(n, t)
+ }
+
+ function ge(n, t, r){
+ return so(n) ? (t = ne(n, t, r), -1 < t ? n[t] : E) : (t = $r(t, r, 3), or(n, t, tr))
+ }
+
+ function ve(t, r, e){
+ return typeof r == "function" && typeof e == "undefined" && so(t) ? n(t, r) : tr(t, Xt(r, e, 3))
+ }
+
+ function ye(n, t, r){
+ if (typeof t == "function" && typeof r == "undefined" && so(n))for (r = n.length; r-- && false !== t(n[r], r, n);); else n = rr(n, Xt(t, r, 3));
+ return n
+ }
+
+ function de(n, t, r){
+ return t = $r(t, r, 3), (so(n) ? e : vr)(n, t)
+ }
+
+ function me(n, t, r){
+ r && Mr(n, t, r) && (t = null);
+ var e = null == t, u = e && so(n), o = !u && Me(n);
+ if (e && !o)return Pt(u ? n : Jr(n));
+ var i = Zu, f = i;
+ return t = e && o ? s : $r(t, r, 3), tr(n, function(n, r, e){
+ r = t(n, r, e), (r > i || r === Zu && r === f) && (i = r, f = n)
+ }), f
+ }
+
+ function _e(n, t){
+ return de(n, ou(t))
+ }
+
+ function be(n, t, r, e){
+ return (so(n) ? u : mr)(n, $r(t, e, 4), r, 3 > arguments.length, tr)
+ }
+
+ function we(n, t, r, e){
+ return (so(n) ? o : mr)(n, $r(t, e, 4), r, 3 > arguments.length, rr)
+ }
+
+ function xe(n){
+ n = Jr(n);
+ for (var t = -1, r = n.length, e = iu(r); ++t < r;) {
+ var u = dr(0, t);
+ t != u && (e[t] = e[u]), e[u] = n[t]
+ }
+ return e
+ }
+
+ function je(n, t, r){
+ var e = so(n) ? i : _r;
+ return (typeof t != "function" || typeof r != "undefined") && (t = $r(t, r, 3)), e(n, t)
+ }
+
+ function Ae(n, t){
+ var r;
+ if (!$e(t)) {
+ if (!$e(n))throw new vu(P);
+ var e = n;
+ n = t, t = e
+ }
+ return function(){
+ return 0 < --n ? r = t.apply(this, arguments) : t = null, r
+ }
+ }
+
+ function Ie(n, t){
+ var r = R;
+ if (2 < arguments.length)var e = ue(arguments, 2), u = x(e, Ie.placeholder), r = r | W;
+ return Ur(n, r, t, e, u)
+ }
+
+ function ke(n, t){
+ var r = R | C;
+ if (2 < arguments.length)var e = ue(arguments, 2), u = x(e, ke.placeholder), r = r | W;
+ return Ur(t, r, n, e, u)
+ }
+
+ function Ee(n, t, r){
+ return r && Mr(n, t, r) && (t = null), n = Ur(n, S, null, null, null, null, t), n.placeholder = Ee.placeholder, n
+ }
+
+ function Oe(n, t, r){
+ return r && Mr(n, t, r) && (t = null), n = Ur(n, T, null, null, null, null, r ? null : t), n.placeholder = Oe.placeholder, n
+ }
+
+ function Re(n, t, r){
+ function e(){
+ var r = t - (wo() - l);
+ 0 >= r || r > t ? (f && Eu(f), r = p, f = s = p = E, r && (h = wo(), a = n.apply(c, i), s || f || (i = c = null))) : s = Nu(e, r)
+ }
+
+ function u(){
+ s && Eu(s), f = s = p = E, (v || g !== t) && (h = wo(), a = n.apply(c, i), s || f || (i = c = null))
+ }
+
+ function o(){
+ if (i = arguments, l = wo(), c = this, p = v && (s || !y), false === g)var r = y && !s; else {
+ f || y || (h = l);
+ var o = g - (l - h), d = 0 >= o || o > g;
+ d ? (f && (f = Eu(f)), h = l, a = n.apply(c, i)) : f || (f = Nu(u, o))
+ }
+ return d && s ? s = Eu(s) : s || t === g || (s = Nu(e, t)), r && (d = true, a = n.apply(c, i)), !d || s || f || (i = c = null), a
+ }
+
+ var i, f, a, l, c, s, p, h = 0, g = false, v = true;
+ if (!$e(n))throw new vu(P);
+ if (t = 0 > t ? 0 : t, true === r)var y = true, v = false; else Be(r) && (y = r.leading, g = "maxWait"in r && Mu(+r.maxWait || 0, t), v = "trailing"in r ? r.trailing : v);
+ return o.cancel = function(){
+ s && Eu(s), f && Eu(f), f = s = p = E
+ }, o
+ }
+
+ function Ce(){
+ var n = arguments, r = n.length - 1;
+ if (0 > r)return function(){
+ };
+ if (!t(n, $e))throw new vu(P);
+ return function(){
+ for (var t = r, e = n[t].apply(this, arguments); t--;)e = n[t].call(this, e);
+ return e
+ }
+ }
+
+ function Se(n, t){
+ function r(){
+ var e = r.cache, u = t ? t.apply(this, arguments) : arguments[0];
+ if (e.has(u))return e.get(u);
+ var o = n.apply(this, arguments);
+ return e.set(u, o), o
+ }
+
+ if (!$e(n) || t && !$e(t))throw new vu(P);
+ return r.cache = new Se.Cache, r
+ }
+
+ function Te(n){
+ var t = ue(arguments, 1), r = x(t, Te.placeholder);
+ return Ur(n, W, null, t, r)
+ }
+
+ function Ne(n){
+ var t = ue(arguments, 1), r = x(t, Ne.placeholder);
+ return Ur(n, F, null, t, r)
+ }
+
+ function We(n){
+ return qr(n && typeof n == "object" ? n.length : E) && xu.call(n) == gt || false
+ }
+
+ function Fe(n){
+ return n && typeof n == "object" && 1 === n.nodeType && -1 < xu.call(n).indexOf("Element") || false
+ }
+
+ function Ue(n){
+ return n && typeof n == "object" && xu.call(n) == mt || false
+ }
+
+ function $e(n){
+ return typeof n == "function" || false
+ }
+
+ function Be(n){
+ var t = typeof n;
+ return "function" == t || n && "object" == t || false
+ }
+
+ function Le(n){
+ return null == n ? false : xu.call(n) == _t ? ju.test(_u.call(n)) : typeof n == "object" && ot.test(n) || false
+ }
+
+ function ze(n){
+ var t = typeof n;
+ return "number" == t || n && "object" == t && xu.call(n) == bt || false
+ }
+
+ function De(n){
+ return n && typeof n == "object" && xu.call(n) == xt || false
+ }
+
+ function Me(n){
+ return typeof n == "string" || n && typeof n == "object" && xu.call(n) == jt || false
+ }
+
+ function qe(n){
+ return pr(n, Pe(n))
+ }
+
+ function Pe(n){
+ if (null == n)return [];
+ Be(n) || (n = pu(n));
+ for (var t = n.length, t = typeof t == "number" && 0 < t && (so(n) || to.nonEnumArgs && We(n)) && t || 0, r = n.constructor, e = -1, r = typeof r == "function" && r.prototype == n, u = iu(t), o = 0 < t; ++e < t;)u[e] = gu(e);
+ for (var i in n)o && b(i, t) || "constructor" == i && (r || !bu.call(n, i)) || u.push(i);
+ return u
+ }
+
+ function Ke(n){
+ return xr(n, vo)
+ }
+
+ function Ve(n){
+ return (n = null == n ? "" : gu(n)) ? n.replace(it, y) : n
+ }
+
+ function Ye(n){
+ return (n = null == n ? "" : gu(n)) && (at.lastIndex = 0, at.test(n)) ? n.replace(at, "\\$&") : n
+ }
+
+ function Ze(n, t){
+ var r = "";
+ if (t = +t, 1 > t || null == n || !zu(t))return r;
+ n = gu(n);
+ do t % 2 && (r += n), t = Ou(t / 2), n += n; while (t);
+ return r
+ }
+
+ function Ge(n, t, r){
+ return (n = null == n ? "" : gu(n)) ? (r ? Mr(n, t, r) : null == t) ? n.slice(j(n), A(n) + 1) : (t = gu(t), n.slice(p(n, t), h(n, t) + 1)) : n
+ }
+
+ function Je(n, t, r){
+ return n = null != n && gu(n), r && Mr(n, t, r) && (t = null), n && n.match(t || st) || []
+ }
+
+ function Xe(n){
+ try {
+ return n()
+ } catch (t) {
+ return Ue(t) ? t : au(t)
+ }
+ }
+
+ function He(n, t, r){
+ return r && Mr(n, t, r) && (t = null), Xt(n, t)
+ }
+
+ function Qe(n){
+ return function(){
+ return n
+ }
+ }
+
+ function nu(n){
+ return n
+ }
+
+ function tu(n){
+ var t = vo(n), r = t.length;
+ if (1 == r) {
+ var e = t[0], u = n[e];
+ if (Pr(u))return function(n){
+ return null != n && u === n[e] && bu.call(n, e)
+ }
+ }
+ for (var o = r, i = iu(r), f = iu(r); o--;) {
+ var u = n[t[o]], a = Pr(u);
+ i[o] = a ? u : Ht(u, true, Ir), f[o] = a
+ }
+ return function(n){
+ if (o = r, null == n)return !o;
+ for (; o--;)if (f[o] ? i[o] !== n[t[o]] : !bu.call(n, t[o]))return false;
+ for (o = r; o--;)if (f[o] ? !bu.call(n, t[o]) : !hr(i[o], n[t[o]], null, true))return false;
+ return true
+ }
+ }
+
+ function ru(n, t, r){
+ var e = true, u = Be(t), o = null == r, i = o && u && vo(t), f = i && pr(t, i);
+ (i && i.length && !f.length || o && !u) && (o && (r = t), f = false, t = n, n = this), f || (f = pr(t, vo(t))), false === r ? e = false : Be(r) && "chain"in r && (e = r.chain), r = -1, u = $e(n);
+ for (o = f.length; ++r < o;)i = f[r], n[i] = t[i], u && (n.prototype[i] = function(t){
+ return function(){
+ var r = this.__chain__;
+ if (e || r) {
+ var u = n(this.__wrapped__);
+ return (u.__actions__ = l(this.__actions__)).push({args: arguments, object: n, name: t}), u.__chain__ = r, u
+ }
+ return r = [this.value()], Cu.apply(r, arguments), n[t].apply(n, r)
+ }
+ }(i));
+ return n
+ }
+
+ function eu(){
+ }
+
+ function uu(n, t, r){
+ return r && Mr(n, t, r) && (t = 0), Vu(n, t)
+ }
+
+ function ou(n){
+ return n = gu(n), function(t){
+ return null == t ? E : t[n]
+ }
+ }
+
+ w = w ? Yt.defaults(Mt.Object(), w, Yt.pick(Mt, ht)) : Mt;
+ var iu = w.Array, fu = w.Date, au = w.Error, lu = w.Function, cu = w.Math, su = w.Number, pu = w.Object, hu = w.RegExp, gu = w.String, vu = w.TypeError, yu = iu.prototype, du = pu.prototype, mu = (mu = w.window) && mu.document, _u = lu.prototype.toString, bu = du.hasOwnProperty, wu = w._, xu = du.toString, ju = hu("^" + Ye(xu).replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), Au = Le(Au = w.ArrayBuffer) && Au, Iu = Le(Iu = Au && new Au(0).slice) && Iu, ku = cu.ceil, Eu = w.clearTimeout, Ou = cu.floor, Ru = Le(Ru = pu.getPrototypeOf) && Ru, Cu = yu.push, Su = du.propertyIsEnumerable, Tu = Le(Tu = w.Set) && Tu, Nu = w.setTimeout, Wu = yu.splice, Fu = Le(Fu = w.Uint8Array) && Fu, Uu = Le(Uu = w.d) && Uu, $u = function(){
+ try {
+ var n = Le(n = w.Float64Array) && n, t = new n(new Au(10), 0, 1) && n
+ } catch (r) {
+ }
+ return t
+ }(), Bu = Le(Bu = pu.create) && Bu, Lu = Le(Lu = iu.isArray) && Lu, zu = w.isFinite, Du = Le(Du = pu.keys) && Du, Mu = cu.max, qu = cu.min, Pu = Le(Pu = fu.now) && Pu, Ku = Le(Ku = su.isFinite) && Ku, Vu = w.parseInt, Yu = cu.random, Zu = su.NEGATIVE_INFINITY, Gu = su.POSITIVE_INFINITY, Ju = cu.pow(2, 32) - 1, Xu = Ju - 1, Hu = $u ? $u.BYTES_PER_ELEMENT : 0, Qu = cu.pow(2, 53) - 1, no = Uu && new Uu, to = $t.support = {};
+ !function(n){
+ to.funcDecomp = !Le(w.WinRTError) && lt.test(k), to.funcNames = typeof lu.name == "string";
+ try {
+ to.dom = 11 === mu.createDocumentFragment().nodeType
+ } catch (t) {
+ to.dom = false
+ }
+ try {
+ to.nonEnumArgs = !Su.call(arguments, 1)
+ } catch (r) {
+ to.nonEnumArgs = true
+ }
+ }(0, 0), $t.templateSettings = {
+ escape : H,
+ evaluate : Q,
+ interpolate: nt,
+ variable : "",
+ imports : {_: $t}
+ }, Bu || (Qt = function(){
+ function n(){
+ }
+
+ return function(t){
+ if (Be(t)) {
+ n.prototype = t;
+ var r = new n;
+ n.prototype = null
+ }
+ return r || w.Object()
+ }
+ }());
+ var ro = no ? function(n, t){
+ return no.set(n, t), n
+ } : nu;
+ Iu || (Ar = Au && Fu ? function(n){
+ var t = n.byteLength, r = $u ? Ou(t / Hu) : 0, e = r * Hu, u = new Au(t);
+ if (r) {
+ var o = new $u(u, 0, r);
+ o.set(new $u(n, 0, r))
+ }
+ return t != e && (o = new Fu(u, e), o.set(new Fu(n, e))), u
+ } : Qe(null));
+ var eo = Tu ? function(n){
+ return new Dt(n)
+ } : Qe(null), uo = no ? function(n){
+ return no.get(n)
+ } : eu, oo = function(){
+ var n = 0, t = 0;
+ return function(r, e){
+ var u = wo ? wo() : 0, o = z - (u - t);
+ if (t = u, 0 < o) {
+ if (++n >= L)return r
+ } else n = 0;
+ return ro(r, e)
+ }
+ }(), io = Or(function(n, t, r){
+ bu.call(n, r) ? ++n[r] : n[r] = 1
+ }), fo = Or(function(n, t, r){
+ bu.call(n, r) ? n[r].push(t) : n[r] = [t]
+ }), ao = Or(function(n, t, r){
+ n[r] = t
+ }), lo = Or(function(n, t, r){
+ n[r ? 0 : 1].push(t)
+ }, function(){
+ return [[], []]
+ }), co = Ur(Ae, W, null, [2]), so = Lu || function(n){
+ return n && typeof n == "object" && typeof n.length == "number" && xu.call(n) == vt || false
+ };
+ to.dom || (Fe = function(n){
+ return n && typeof n == "object" && 1 === n.nodeType && !ho(n) || false
+ });
+ var po = Ku || function(n){
+ return typeof n == "number" && zu(n)
+ };
+ ($e(/x/) || Fu && !$e(Fu)) && ($e = function(n){
+ return xu.call(n) == _t
+ });
+ var ho = Ru ? function(n){
+ if (!n || xu.call(n) != wt)return false;
+ var t = n.valueOf, r = Le(t) && (r = Ru(t)) && Ru(r);
+ return r ? n == r || Ru(n) == r : Zr(n)
+ } : Zr, go = Rr(Gt), vo = Du ? function(n){
+ if (n)var t = n.constructor, r = n.length;
+ return typeof t == "function" && t.prototype === n || typeof r == "number" && 0 < r ? Gr(n) : Be(n) ? Du(n) : []
+ } : Gr, yo = Rr(yr), mo = Sr(function(n, t, r){
+ return t = t.toLowerCase(), r ? n + t.charAt(0).toUpperCase() + t.slice(1) : t
+ }), _o = Sr(function(n, t, r){
+ return n + (r ? "-" : "") + t.toLowerCase()
+ }), bo = Sr(function(n, t, r){
+ return n + (r ? "_" : "") + t.toLowerCase()
+ }), wo = Pu || function(){
+ return (new fu).getTime()
+ };
+ return 8 != Vu(pt + "08") && (uu = function(n, t, r){
+ return n = Ge(n), t = r && Mr(n, t, r) ? 0 : +t, Vu(n, t || (ut.test(n) ? 16 : 10))
+ }), Bt.prototype = $t.prototype, zt.prototype["delete"] = function(n){
+ return this.has(n) && delete this.__data__[n]
+ }, zt.prototype.get = function(n){
+ return "__proto__" == n ? E : this.__data__[n]
+ }, zt.prototype.has = function(n){
+ return "__proto__" != n && bu.call(this.__data__, n)
+ }, zt.prototype.set = function(n, t){
+ return "__proto__" != n && (this.__data__[n] = t), this
+ }, Dt.prototype.push = function(n){
+ var t = this.data, r = typeof n;
+ "number" == r ? t[r][n] = true : t.set.add(n)
+ }, Se.Cache = zt, $t.after = function(n, t){
+ if (!$e(t)) {
+ if (!$e(n))throw new vu(P);
+ var r = n;
+ n = t, t = r
+ }
+ return n = zu(n = +n) ? n : 0, function(){
+ return 1 > --n ? t.apply(this, arguments) : void 0
+ }
+ }, $t.assign = go, $t.at = function(n){
+ return (!n || qr(n.length)) && (n = Jr(n)), Jt(n, ir(arguments, false, false, 1))
+ }, $t.before = Ae, $t.bind = Ie, $t.bindAll = function(n){
+ for (var t = n, r = 1 < arguments.length ? ir(arguments, false, false, 1) : qe(n), e = -1, u = r.length; ++e < u;) {
+ var o = r[e];
+ t[o] = Ur(t[o], R, t)
+ }
+ return t
+ }, $t.bindKey = ke, $t.callback = He, $t.chain = ce, $t.chunk = function(n, t, r){
+ t = (r ? Mr(n, t, r) : null == t) ? 1 : Mu(+t || 1, 1), r = 0;
+ for (var e = n ? n.length : 0, u = -1, o = iu(ku(e / t)); r < e;)o[++u] = ue(n, r, r += t);
+ return o
+ }, $t.compact = function(n){
+ for (var t = -1, r = n ? n.length : 0, e = -1, u = []; ++t < r;) {
+ var o = n[t];
+ o && (u[++e] = o)
+ }
+ return u
+ }, $t.constant = Qe, $t.countBy = io, $t.create = function(n, t, r){
+ var e = Qt(n);
+ return r && Mr(n, t, r) && (t = null), t ? Gt(e, t) : e
+ }, $t.curry = Ee, $t.curryRight = Oe, $t.debounce = Re, $t.defaults = function(n){
+ if (null == n)return n;
+ var t = l(arguments);
+ return t.push(Vt), go.apply(E, t)
+ }, $t.defer = function(n){
+ if (!$e(n))throw new vu(P);
+ var t = arguments;
+ return Nu(function(){
+ n.apply(E, ue(t, 1))
+ }, 1)
+ }, $t.delay = function(n, t){
+ if (!$e(n))throw new vu(P);
+ var r = arguments;
+ return Nu(function(){
+ n.apply(E, ue(r, 2))
+ }, t)
+ }, $t.difference = function(){
+ for (var n = -1, t = arguments.length; ++n < t;) {
+ var r = arguments[n];
+ if (so(r) || We(r))break
+ }
+ return nr(r, ir(arguments, false, true, ++n))
+ }, $t.drop = Hr, $t.dropRight = Qr, $t.dropRightWhile = function(n, t, r){
+ var e = n ? n.length : 0;
+ for (t = $r(t, r, 3); e-- && t(n[e], e, n););
+ return ue(n, 0, e + 1)
+ }, $t.dropWhile = function(n, t, r){
+ var e = -1, u = n ? n.length : 0;
+ for (t = $r(t, r, 3); ++e < u && t(n[e], e, n););
+ return ue(n, e)
+ }, $t.filter = he, $t.flatten = function(n, t, r){
+ var e = n ? n.length : 0;
+ return r && Mr(n, t, r) && (t = false), e ? ir(n, t) : []
+ }, $t.flattenDeep = function(n){
+ return n && n.length ? ir(n, true) : []
+ }, $t.flow = function(){
+ var n = arguments, r = n.length;
+ if (!r)return function(){
+ };
+ if (!t(n, $e))throw new vu(P);
+ return function(){
+ for (var t = 0, e = n[t].apply(this, arguments); ++t < r;)e = n[t].call(this, e);
+ return e
+ }
+ }, $t.flowRight = Ce, $t.forEach = ve, $t.forEachRight = ye, $t.forIn = function(n, t, r){
+ return (typeof t != "function" || typeof r != "undefined") && (t = Xt(t, r, 3)), fr(n, t, Pe)
+ }, $t.forInRight = function(n, t, r){
+ return t = Xt(t, r, 3), ar(n, t, Pe)
+ }, $t.forOwn = function(n, t, r){
+ return (typeof t != "function" || typeof r != "undefined") && (t = Xt(t, r, 3)), cr(n, t)
+ }, $t.forOwnRight = function(n, t, r){
+ return t = Xt(t, r, 3), ar(n, t, vo)
+ }, $t.functions = qe, $t.groupBy = fo, $t.indexBy = ao, $t.initial = function(n){
+ return Qr(n, 1)
+ }, $t.intersection = function(){
+ for (var n = [], t = -1, r = arguments.length, e = [], u = Br(), o = u == a; ++t < r;) {
+ var i = arguments[t];
+ (so(i) || We(i)) && (n.push(i), e.push(o && 120 <= i.length && eo(t && i)))
+ }
+ var r = n.length, o = n[0], f = -1, l = o ? o.length : 0, c = [], s = e[0];
+ n:for (; ++f < l;)if (i = o[f], 0 > (s ? qt(s, i) : u(c, i))) {
+ for (t = r; --t;) {
+ var p = e[t];
+ if (0 > (p ? qt(p, i) : u(n[t], i)))continue n
+ }
+ s && s.push(i), c.push(i)
+ }
+ return c
+ }, $t.invert = function(n, t, r){
+ r && Mr(n, t, r) && (t = null), r = -1;
+ for (var e = vo(n), u = e.length, o = {}; ++r < u;) {
+ var i = e[r], f = n[i];
+ t ? bu.call(o, f) ? o[f].push(i) : o[f] = [i] : o[f] = i
+ }
+ return o
+ }, $t.invoke = function(n, t){
+ return gr(n, t, ue(arguments, 2))
+ }, $t.keys = vo, $t.keysIn = Pe, $t.map = de, $t.mapValues = function(n, t, r){
+ t = $r(t, r, 3);
+ var e = {};
+ return cr(n, function(n, r, u){
+ e[r] = t(n, r, u)
+ }), e
+ }, $t.matches = tu, $t.memoize = Se, $t.merge = yo, $t.mixin = ru, $t.negate = function(n){
+ if (!$e(n))throw new vu(P);
+ return function(){
+ return !n.apply(this, arguments)
+ }
+ }, $t.omit = function(n, t, r){
+ if (null == n)return {};
+ if (typeof t != "function") {
+ var u = e(ir(arguments, false, false, 1), gu);
+ return Kr(n, nr(Pe(n), u))
+ }
+ return t = $r(t, r, 3), Vr(n, function(n, r, e){
+ return !t(n, r, e)
+ })
+ }, $t.once = co, $t.pairs = function(n){
+ for (var t = -1, r = vo(n), e = r.length, u = iu(e); ++t < e;) {
+ var o = r[t];
+ u[t] = [o, n[o]]
+ }
+ return u
+ }, $t.partial = Te, $t.partialRight = Ne, $t.partition = lo, $t.pick = function(n, t, r){
+ return null == n ? {} : typeof t == "function" ? Vr(n, $r(t, r, 3)) : Kr(n, ir(arguments, false, false, 1))
+ }, $t.pluck = _e, $t.property = ou, $t.propertyOf = function(n){
+ return function(t){
+ return null == n ? E : n[t]
+ }
+ }, $t.pull = function(){
+ var n = arguments[0];
+ if (!n || !n.length)return n;
+ for (var t = 0, r = Br(), e = arguments.length; ++t < e;)for (var u = 0, o = arguments[t]; -1 < (u = r(n, o, u));)Wu.call(n, u, 1);
+ return n
+ }, $t.pullAt = function(n){
+ var t = n || [], r = ir(arguments, false, false, 1), e = r.length, u = Jt(t, r);
+ for (r.sort(f); e--;) {
+ var o = parseFloat(r[e]);
+ if (o != i && b(o)) {
+ var i = o;
+ Wu.call(t, o, 1)
+ }
+ }
+ return u
+ }, $t.range = function(n, t, r){
+ r && Mr(n, t, r) && (t = r = null), n = +n || 0, r = null == r ? 1 : +r || 0, null == t ? (t = n, n = 0) : t = +t || 0;
+ var e = -1;
+ t = Mu(ku((t - n) / (r || 1)), 0);
+ for (var u = iu(t); ++e < t;)u[e] = n, n += r;
+ return u
+ }, $t.rearg = function(n){
+ var t = ir(arguments, false, false, 1);
+ return t.length ? Ur(n, U, null, null, null, [t]) : Ur(n)
+ }, $t.reject = function(n, t, e){
+ var u = so(n) ? r : ur;
+ return t = $r(t, e, 3), u(n, function(n, r, e){
+ return !t(n, r, e)
+ })
+ }, $t.remove = function(n, t, r){
+ var e = -1, u = n ? n.length : 0, o = [];
+ for (t = $r(t, r, 3); ++e < u;)r = n[e], t(r, e, n) && (o.push(r), Wu.call(n, e--, 1), u--);
+ return o
+ }, $t.rest = ee, $t.shuffle = xe, $t.slice = ue, $t.sortBy = function(n, t, r){
+ r && Mr(n, t, r) && (t = null), t = $r(t, r, 3);
+ var e = -1;
+ r = n ? n.length : 0;
+ var u = qr(r) ? iu(r) : [];
+ return tr(n, function(n, r, o){
+ u[++e] = {a: t(n, r, o), b: e, c: n}
+ }), c(u, g)
+ }, $t.sortByAll = function(n){
+ var t = arguments;
+ 4 == t.length && Mr(t[1], t[2], t[3]) && (t = [n, t[1]]);
+ var r = -1, e = n ? n.length : 0, u = ir(t, false, false, 1), o = qr(e) ? iu(e) : [];
+ return tr(n, function(n){
+ for (var t = u.length, e = iu(t); t--;)e[t] = null == n ? E : n[u[t]];
+ o[++r] = {a: e, b: r, c: n}
+ }), c(o, v)
+ }, $t.take = function(n, t, r){
+ return (r ? Mr(n, t, r) : null == t) && (t = 1), ue(n, 0, 0 > t ? 0 : t)
+ }, $t.takeRight = function(n, t, r){
+ return (r ? Mr(n, t, r) : null == t) && (t = 1), t = n ? n.length - (+t || 0) : 0, ue(n, 0 > t ? 0 : t)
+ }, $t.takeRightWhile = function(n, t, r){
+ var e = n ? n.length : 0;
+ for (t = $r(t, r, 3); e-- && t(n[e], e, n););
+ return ue(n, e + 1)
+ }, $t.takeWhile = function(n, t, r){
+ var e = -1, u = n ? n.length : 0;
+ for (t = $r(t, r, 3); ++e < u && t(n[e], e, n););
+ return ue(n, 0, e)
+ }, $t.tap = function(n, t, r){
+ return t.call(r, n), n
+ }, $t.throttle = function(n, t, r){
+ var e = true, u = true;
+ if (!$e(n))throw new vu(P);
+ return false === r ? e = false : Be(r) && (e = "leading"in r ? !!r.leading : e, u = "trailing"in r ? !!r.trailing : u), Ut.leading = e, Ut.maxWait = +t, Ut.trailing = u, Re(n, t, Ut)
+ }, $t.thru = function(n, t, r){
+ return t.call(r, n)
+ }, $t.times = function(n, t, r){
+ if (n = +n, 1 > n || !zu(n))return [];
+ t = Xt(t, r, 1), r = -1;
+ for (var e = iu(qu(n, Ju)); ++r < n;)r < Ju ? e[r] = t(r) : t(r);
+ return e
+ }, $t.toArray = function(n){
+ return qr(n ? n.length : 0) ? l(n) : Ke(n)
+ }, $t.transform = function(t, r, e, u){
+ if (r = $r(r, u, 4), u = Dr(t), null == e)if (u || Be(t)) {
+ var o = t.constructor;
+ e = u ? so(t) ? new o : [] : Qt(typeof o == "function" && o.prototype)
+ } else e = {};
+ return (u ? n : cr)(t, function(n, t, u){
+ return r(e, n, t, u)
+ }), e
+ }, $t.union = function(){
+ return wr(ir(arguments, false, true))
+ }, $t.uniq = fe, $t.unzip = ae, $t.values = Ke, $t.valuesIn = function(n){
+ return xr(n, Pe)
+ }, $t.where = function(n, t){
+ return he(n, tu(t))
+ }, $t.without = function(n){
+ return nr(n, ue(arguments, 1))
+ }, $t.wrap = function(n, t){
+ return t = null == t ? nu : t, Ur(t, W, null, [n])
+ }, $t.xor = function(){
+ for (var n = -1, t = arguments.length; ++n < t;) {
+ var r = arguments[n];
+ if (so(r) || We(r))var e = e ? nr(e, r).concat(nr(r, e)) : r
+ }
+ return e ? wr(e) : []
+ }, $t.zip = function(){
+ for (var n = arguments.length, t = iu(n); n--;)t[n] = arguments[n];
+ return ae(t)
+ },$t.zipObject = le,$t.backflow = Ce,$t.collect = de,$t.compose = Ce,$t.each = ve,$t.eachRight = ye,$t.extend = go,$t.iteratee = He,$t.methods = qe,$t.object = le,$t.select = he,$t.tail = ee,$t.unique = fe,ru($t, $t),$t.attempt = Xe,$t.camelCase = mo,$t.capitalize = function(n){
+ return (n = null == n ? "" : gu(n)) ? n.charAt(0).toUpperCase() + n.slice(1) : n
+ },$t.clone = function(n, t, r, e){
+ return typeof t != "boolean" && null != t && (e = r, r = Mr(n, t, e) ? null : t, t = false), r = typeof r == "function" && Xt(r, e, 1), Ht(n, t, r)
+ },$t.cloneDeep = function(n, t, r){
+ return t = typeof t == "function" && Xt(t, r, 1), Ht(n, true, t)
+ },$t.deburr = Ve,$t.endsWith = function(n, t, r){
+ n = null == n ? "" : gu(n), t = gu(t);
+ var e = n.length;
+ return r = (typeof r == "undefined" ? e : qu(0 > r ? 0 : +r || 0, e)) - t.length, 0 <= r && n.indexOf(t, r) == r
+ },$t.escape = function(n){
+ return (n = null == n ? "" : gu(n)) && (X.lastIndex = 0, X.test(n)) ? n.replace(X, d) : n
+ },$t.escapeRegExp = Ye,$t.every = pe,$t.find = ge,$t.findIndex = ne,$t.findKey = function(n, t, r){
+ return t = $r(t, r, 3), or(n, t, cr, true)
+ },$t.findLast = function(n, t, r){
+ return t = $r(t, r, 3), or(n, t, rr)
+ },$t.findLastIndex = function(n, t, r){
+ var e = n ? n.length : 0;
+ for (t = $r(t, r, 3); e--;)if (t(n[e], e, n))return e;
+ return -1
+ },$t.findLastKey = function(n, t, r){
+ return t = $r(t, r, 3), or(n, t, sr, true)
+ },$t.findWhere = function(n, t){
+ return ge(n, tu(t))
+ },$t.first = te,$t.has = function(n, t){
+ return n ? bu.call(n, t) : false
+ },$t.identity = nu,$t.includes = se,$t.indexOf = re,$t.isArguments = We,$t.isArray = so,$t.isBoolean = function(n){
+ return true === n || false === n || n && typeof n == "object" && xu.call(n) == yt || false
+ },$t.isDate = function(n){
+ return n && typeof n == "object" && xu.call(n) == dt || false
+ },$t.isElement = Fe,$t.isEmpty = function(n){
+ if (null == n)return true;
+ var t = n.length;
+ return qr(t) && (so(n) || Me(n) || We(n) || typeof n == "object" && $e(n.splice)) ? !t : !vo(n).length
+ },$t.isEqual = function(n, t, r, e){
+ return r = typeof r == "function" && Xt(r, e, 3), !r && Pr(n) && Pr(t) ? n === t : hr(n, t, r)
+ },$t.isError = Ue,$t.isFinite = po,$t.isFunction = $e,$t.isNaN = function(n){
+ return ze(n) && n != +n
+ },$t.isNative = Le,$t.isNull = function(n){
+ return null === n
+ },$t.isNumber = ze,$t.isObject = Be,$t.isPlainObject = ho,$t.isRegExp = De,$t.isString = Me,$t.isUndefined = function(n){
+ return typeof n == "undefined"
+ },$t.kebabCase = _o,$t.last = function(n){
+ var t = n ? n.length : 0;
+ return t ? n[t - 1] : E
+ },$t.lastIndexOf = function(n, t, r){
+ var e = n ? n.length : 0;
+ if (!e)return -1;
+ var u = e;
+ if (typeof r == "number")u = (0 > r ? Mu(e + r, 0) : qu(r || 0, e - 1)) + 1; else if (r)return u = ie(n, t) - 1, n = n[u], (t === t ? t === n : n !== n) ? u : -1;
+ if (t !== t)return _(n, u, true);
+ for (; u--;)if (n[u] === t)return u;
+ return -1
+ },$t.max = me,$t.min = function(n, t, r){
+ r && Mr(n, t, r) && (t = null);
+ var e = null == t, u = e && so(n), o = !u && Me(n);
+ if (e && !o)return Kt(u ? n : Jr(n));
+ var i = Gu, f = i;
+ return t = e && o ? s : $r(t, r, 3), tr(n, function(n, r, e){
+ r = t(n, r, e), (r < i || r === Gu && r === f) && (i = r, f = n)
+ }), f
+ },$t.noConflict = function(){
+ return w._ = wu, this
+ },$t.noop = eu,$t.now = wo,$t.pad = function(n, t, r){
+ n = null == n ? "" : gu(n), t = +t;
+ var e = n.length;
+ return e < t && zu(t) ? (e = (t - e) / 2, t = Ou(e), e = ku(e), r = Wr("", e, r), r.slice(0, t) + n + r) : n
+ },$t.padLeft = function(n, t, r){
+ return (n = null == n ? "" : gu(n)) ? Wr(n, t, r) + n : n
+ },$t.padRight = function(n, t, r){
+ return (n = null == n ? "" : gu(n)) ? n + Wr(n, t, r) : n
+ },$t.parseInt = uu,$t.random = function(n, t, r){
+ r && Mr(n, t, r) && (t = r = null);
+ var e = null == n, u = null == t;
+ return null == r && (u && typeof n == "boolean" ? (r = n, n = 1) : typeof t == "boolean" && (r = t, u = true)), e && u && (t = 1, u = false), n = +n || 0, u ? (t = n, n = 0) : t = +t || 0, r || n % 1 || t % 1 ? (r = Yu(), qu(n + r * (t - n + parseFloat("1e-" + (gu(r).length - 1))), t)) : dr(n, t)
+ },$t.reduce = be,$t.reduceRight = we,$t.repeat = Ze,$t.result = function(n, t, r){
+ var e = null == n ? E : n[t];
+ return typeof e == "undefined" ? r : $e(e) ? n[t]() : e
+ },$t.runInContext = k,$t.size = function(n){
+ var t = n ? n.length : 0;
+ return qr(t) ? t : vo(n).length
+ },$t.snakeCase = bo,$t.some = je,$t.sortedIndex = oe,$t.sortedLastIndex = ie,$t.startsWith = function(n, t, r){
+ return n = null == n ? "" : gu(n), r = typeof r == "undefined" ? 0 : qu(0 > r ? 0 : +r || 0, n.length), n.lastIndexOf(t, r) == r
+ },$t.template = function(n, t, r){
+ var e = $t.templateSettings;
+ r && Mr(n, t, r) && (t = r = null), n = gu(null == n ? "" : n), t = go({}, r || t, e, Zt), r = go({}, t.imports, e.imports, Zt);
+ var u, o, i = vo(r), f = Ke(r), a = 0;
+ r = t.interpolate || ft;
+ var l = "__p+='";
+ if (r = hu((t.escape || ft).source + "|" + r.source + "|" + (r === nt ? tt : ft).source + "|" + (t.evaluate || ft).source + "|$", "g"), n.replace(r, function(t, r, e, i, f, c){
+ return e || (e = i), l += n.slice(a, c).replace(ct, m), r && (u = true, l += "'+__e(" + r + ")+'"), f && (o = true, l += "';" + f + ";\n__p+='"), e && (l += "'+((__t=(" + e + "))==null?'':__t)+'"), a = c + t.length, t
+ }), l += "';", (t = t.variable) || (l = "with(obj){" + l + "}"), l = (o ? l.replace(Y, "") : l).replace(Z, "$1").replace(G, "$1;"), l = "function(" + (t || "obj") + "){" + (t ? "" : "obj||(obj={});") + "var __t,__p=''" + (u ? ",__e=_.escape" : "") + (o ? ",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}" : ";") + l + "return __p}", t = Xe(function(){
+ return lu(i, "return " + l).apply(E, f)
+ }), t.source = l, Ue(t))throw t;
+ return t
+ },$t.trim = Ge,$t.trimLeft = function(n, t, r){
+ return (n = null == n ? "" : gu(n)) ? (r ? Mr(n, t, r) : null == t) ? n.slice(j(n)) : (t = gu(t), n.slice(p(n, t))) : n
+ },$t.trimRight = function(n, t, r){
+ return (n = null == n ? "" : gu(n)) ? (r ? Mr(n, t, r) : null == t) ? n.slice(0, A(n) + 1) : (t = gu(t), n.slice(0, h(n, t) + 1)) : n
+ },$t.trunc = function(n, t, r){
+ r && Mr(n, t, r) && (t = null);
+ var e = $;
+ if (r = B, Be(t)) {
+ var u = "separator"in t ? t.separator : u, e = "length"in t ? +t.length || 0 : e;
+ r = "omission"in t ? gu(t.omission) : r
+ } else null != t && (e = +t || 0);
+ if (n = null == n ? "" : gu(n), e >= n.length)return n;
+ if (e -= r.length, 1 > e)return r;
+ if (t = n.slice(0, e), null == u)return t + r;
+ if (De(u)) {
+ if (n.slice(e).search(u)) {
+ var o, i = n.slice(0, e);
+ for (u.global || (u = hu(u.source, (rt.exec(u) || "") + "g")), u.lastIndex = 0; n = u.exec(i);)o = n.index;
+ t = t.slice(0, null == o ? e : o)
+ }
+ } else n.indexOf(u, e) != e && (u = t.lastIndexOf(u), -1 < u && (t = t.slice(0, u)));
+ return t + r
+ },$t.unescape = function(n){
+ return (n = null == n ? "" : gu(n)) && (J.lastIndex = 0, J.test(n)) ? n.replace(J, I) : n
+ },$t.uniqueId = function(n){
+ var t = ++V;
+ return gu(null == n ? "" : n) + t
+ },$t.words = Je,$t.all = pe,$t.any = je,$t.contains = se,$t.detect = ge,$t.foldl = be,$t.foldr = we,$t.head = te,$t.include = se,$t.inject = be,ru($t, function(){
+ var n = {};
+ return cr($t, function(t, r){
+ $t.prototype[r] || (n[r] = t)
+ }), n
+ }(), false),$t.sample = function(n, t, r){
+ return (r ? Mr(n, t, r) : null == t) ? (n = Jr(n), t = n.length, 0 < t ? n[dr(0, t - 1)] : E) : (n = xe(n), n.length = qu(0 > t ? 0 : +t || 0, n.length), n)
+ },$t.prototype.sample = function(n){
+ return this.__chain__ || null != n ? this.thru(function(t){
+ return $t.sample(t, n)
+ }) : $t.sample(this.value())
+ },$t.VERSION = O,n("bind bindKey curry curryRight partial partialRight".split(" "), function(n){
+ $t[n].placeholder = $t
+ }),n(["filter", "map", "takeWhile"], function(n, t){
+ var r = t == D;
+ Lt.prototype[n] = function(n, e){
+ n = $r(n, e, 3);
+ var u = this.clone(), o = u.filtered, i = u.iteratees || (u.iteratees = []);
+ return u.filtered = o || r || t == q && 0 > u.dir, i.push({iteratee: n, type: t}), u
+ }
+ }),n(["drop", "take"], function(n, t){
+ var r = n + "Count", e = n + "While";
+ Lt.prototype[n] = function(e){
+ e = null == e ? 1 : Mu(+e || 0, 0);
+ var u = this.clone();
+ if (u.filtered) {
+ var o = u[r];
+ u[r] = t ? qu(o, e) : o + e
+ } else(u.views || (u.views = [])).push({size: e, type: n + (0 > u.dir ? "Right" : "")});
+ return u
+ }, Lt.prototype[n + "Right"] = function(t){
+ return this.reverse()[n](t).reverse()
+ }, Lt.prototype[n + "RightWhile"] = function(n, t){
+ return this.reverse()[e](n, t).reverse()
+ }
+ }),n(["first", "last"], function(n, t){
+ var r = "take" + (t ? "Right" : "");
+ Lt.prototype[n] = function(){
+ return this[r](1).value()[0]
+ }
+ }),n(["initial", "rest"], function(n, t){
+ var r = "drop" + (t ? "" : "Right");
+ Lt.prototype[n] = function(){
+ return this[r](1)
+ }
+ }),n(["pluck", "where"], function(n, t){
+ var r = t ? "filter" : "map", e = t ? tu : ou;
+ Lt.prototype[n] = function(n){
+ return this[r](e(n))
+ }
+ }),Lt.prototype.dropWhile = function(n, t){
+ n = $r(n, t, 3);
+ var r, e, u = 0 > this.dir;
+ return this.filter(function(t, o, i){
+ return r = r && (u ? o < e : o > e), e = o, r || (r = !n(t, o, i))
+ })
+ },Lt.prototype.reject = function(n, t){
+ return n = $r(n, t, 3), this.filter(function(t, r, e){
+ return !n(t, r, e)
+ })
+ },Lt.prototype.slice = function(n, t){
+ n = null == n ? 0 : +n || 0;
+ var r = 0 > n ? this.takeRight(-n) : this.drop(n);
+ return typeof t != "undefined" && (t = +t || 0, r = 0 > t ? r.dropRight(-t) : r.take(t - n)), r
+ },cr(Lt.prototype, function(n, t){
+ var r = /^(?:first|last)$/.test(t);
+ $t.prototype[t] = function(){
+ function e(n){
+ return n = [n], Cu.apply(n, o), $t[t].apply($t, n)
+ }
+
+ var u = this.__wrapped__, o = arguments, i = this.__chain__, f = !!this.__actions__.length, a = u instanceof Lt, l = a && !f;
+ return r && !i ? l ? n.call(u) : $t[t](this.value()) : a || so(u) ? (u = n.apply(l ? u : new Lt(this), o), r || !f && !u.actions || (u.actions || (u.actions = [])).push({
+ args : [e],
+ object: $t,
+ name : "thru"
+ }), new Bt(u, i)) : this.thru(e)
+ }
+ }),n("concat join pop push shift sort splice unshift".split(" "), function(n){
+ var t = yu[n], r = /^(?:push|sort|unshift)$/.test(n) ? "tap" : "thru", e = /^(?:join|pop|shift)$/.test(n);
+ $t.prototype[n] = function(){
+ var n = arguments;
+ return e && !this.__chain__ ? t.apply(this.value(), n) : this[r](function(r){
+ return t.apply(r, n)
+ })
+ }
+ }),Lt.prototype.clone = function(){
+ var n = this.actions, t = this.iteratees, r = this.views, e = new Lt(this.wrapped);
+ return e.actions = n ? l(n) : null, e.dir = this.dir, e.dropCount = this.dropCount, e.filtered = this.filtered, e.iteratees = t ? l(t) : null, e.takeCount = this.takeCount, e.views = r ? l(r) : null, e
+ },Lt.prototype.reverse = function(){
+ var n = this.filtered, t = n ? new Lt(this) : this.clone();
+ return t.dir = -1 * this.dir, t.filtered = n, t
+ },Lt.prototype.value = function(){
+ var n = this.wrapped.value();
+ if (!so(n))return jr(n, this.actions);
+ var t, r = this.dir, e = 0 > r, u = n.length;
+ t = u;
+ for (var o = this.views, i = 0, f = -1, a = o ? o.length : 0; ++f < a;) {
+ var l = o[f], c = l.size;
+ switch (l.type) {
+ case"drop":
+ i += c;
+ break;
+ case"dropRight":
+ t -= c;
+ break;
+ case"take":
+ t = qu(t, i + c);
+ break;
+ case"takeRight":
+ i = Mu(i, t - c)
+ }
+ }
+ t = {
+ start: i,
+ end : t
+ }, i = t.start, f = t.end, t = this.dropCount, o = qu(f - i, this.takeCount - t), i = e ? f : i - 1, a = (f = this.iteratees) ? f.length : 0, l = 0, c = [];
+ n:for (; u-- && l < o;) {
+ for (var i = i + r, s = -1, p = n[i]; ++s < a;) {
+ var h = f[s], g = h.iteratee(p, i, n), h = h.type;
+ if (h == M)p = g; else if (!g) {
+ if (h == D)continue n;
+ break n
+ }
+ }
+ t ? t-- : c[l++] = p
+ }
+ return e ? c.reverse() : c
+ },$t.prototype.chain = function(){
+ return ce(this)
+ },$t.prototype.reverse = function(){
+ var n = this.__wrapped__;
+ return n instanceof Lt ? new Bt(n.reverse()) : this.thru(function(n){
+ return n.reverse()
+ })
+ },$t.prototype.toString = function(){
+ return gu(this.value())
+ },$t.prototype.toJSON = $t.prototype.valueOf = $t.prototype.value = function(){
+ return jr(this.__wrapped__, this.__actions__)
+ },$t.prototype.collect = $t.prototype.map,$t.prototype.head = $t.prototype.first,$t.prototype.select = $t.prototype.filter,$t.prototype.tail = $t.prototype.rest,$t
+ }
+
+ var E, O = "3.0.0-pre", R = 1, C = 2, S = 4, T = 8, N = 16, W = 32, F = 64, U = 128, $ = 30, B = "...", L = 150, z = 16, D = 0, M = 1, q = 2, P = "Expected a function", K = "__lodash_placeholder__", V = 0, Y = /\b__p\+='';/g, Z = /\b(__p\+=)''\+/g, G = /(__e\(.*?\)|\b__t\))\+'';/g, J = /&(?:amp|lt|gt|quot|#39|#96);/g, X = /[&<>"'`]/g, H = /<%-([\s\S]+?)%>/g, Q = /<%([\s\S]+?)%>/g, nt = /<%=([\s\S]+?)%>/g, tt = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, rt = /\w*$/, et = /^\s*function[ \n\r\t]+\w/, ut = /^0[xX]/, ot = /^\[object .+?Constructor\]$/, it = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g, ft = /($^)/, at = /[.*+?^${}()|[\]\/\\]/g, lt = /\bthis\b/, ct = /['\n\r\u2028\u2029\\]/g, st = RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]{2,}(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+", "g"), pt = " \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", ht = "Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout document isFinite parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap window WinRTError".split(" "), gt = "[object Arguments]", vt = "[object Array]", yt = "[object Boolean]", dt = "[object Date]", mt = "[object Error]", _t = "[object Function]", bt = "[object Number]", wt = "[object Object]", xt = "[object RegExp]", jt = "[object String]", At = "[object ArrayBuffer]", It = "[object Float32Array]", kt = "[object Float64Array]", Et = "[object Int8Array]", Ot = "[object Int16Array]", Rt = "[object Int32Array]", Ct = "[object Uint8Array]", St = "[object Uint8ClampedArray]", Tt = "[object Uint16Array]", Nt = "[object Uint32Array]", Wt = {};
+ Wt[gt] = Wt[vt] = Wt[It] = Wt[kt] = Wt[Et] = Wt[Ot] = Wt[Rt] = Wt[Ct] = Wt[St] = Wt[Tt] = Wt[Nt] = true, Wt[At] = Wt[yt] = Wt[dt] = Wt[mt] = Wt[_t] = Wt["[object Map]"] = Wt[bt] = Wt[wt] = Wt[xt] = Wt["[object Set]"] = Wt[jt] = Wt["[object WeakMap]"] = false;
+ var Ft = {};
+ Ft[gt] = Ft[vt] = Ft[At] = Ft[yt] = Ft[dt] = Ft[It] = Ft[kt] = Ft[Et] = Ft[Ot] = Ft[Rt] = Ft[bt] = Ft[wt] = Ft[xt] = Ft[jt] = Ft[Ct] = Ft[St] = Ft[Tt] = Ft[Nt] = true, Ft[mt] = Ft[_t] = Ft["[object Map]"] = Ft["[object Set]"] = Ft["[object WeakMap]"] = false;
+ var Ut = {leading: false, maxWait: 0, trailing: false}, $t = {
+ "\xc0": "A",
+ "\xc1": "A",
+ "\xc2": "A",
+ "\xc3": "A",
+ "\xc4": "A",
+ "\xc5": "A",
+ "\xe0": "a",
+ "\xe1": "a",
+ "\xe2": "a",
+ "\xe3": "a",
+ "\xe4": "a",
+ "\xe5": "a",
+ "\xc7": "C",
+ "\xe7": "c",
+ "\xd0": "D",
+ "\xf0": "d",
+ "\xc8": "E",
+ "\xc9": "E",
+ "\xca": "E",
+ "\xcb": "E",
+ "\xe8": "e",
+ "\xe9": "e",
+ "\xea": "e",
+ "\xeb": "e",
+ "\xcc": "I",
+ "\xcd": "I",
+ "\xce": "I",
+ "\xcf": "I",
+ "\xec": "i",
+ "\xed": "i",
+ "\xee": "i",
+ "\xef": "i",
+ "\xd1": "N",
+ "\xf1": "n",
+ "\xd2": "O",
+ "\xd3": "O",
+ "\xd4": "O",
+ "\xd5": "O",
+ "\xd6": "O",
+ "\xd8": "O",
+ "\xf2": "o",
+ "\xf3": "o",
+ "\xf4": "o",
+ "\xf5": "o",
+ "\xf6": "o",
+ "\xf8": "o",
+ "\xd9": "U",
+ "\xda": "U",
+ "\xdb": "U",
+ "\xdc": "U",
+ "\xf9": "u",
+ "\xfa": "u",
+ "\xfb": "u",
+ "\xfc": "u",
+ "\xdd": "Y",
+ "\xfd": "y",
+ "\xff": "y",
+ "\xc6": "Ae",
+ "\xe6": "ae",
+ "\xde": "Th",
+ "\xfe": "th",
+ "\xdf": "ss"
+ }, Bt = {"&": "&", "<": "<", ">": ">", '"': """, "'": "'", "`": "`"}, Lt = {
+ "&" : "&",
+ "<" : "<",
+ ">" : ">",
+ """: '"',
+ "'" : "'",
+ "`" : "`"
+ }, zt = {"function": true, object: true}, Dt = {
+ "\\" : "\\",
+ "'" : "'",
+ "\n" : "n",
+ "\r" : "r",
+ "\u2028": "u2028",
+ "\u2029": "u2029"
+ }, Mt = zt[typeof window] && window !== (this && this.window) ? window : this, qt = zt[typeof exports] && exports && !exports.nodeType && exports, Pt = zt[typeof module] && module && !module.nodeType && module, Kt = qt && Pt && typeof global == "object" && global;
+ !Kt || Kt.global !== Kt && Kt.window !== Kt && Kt.self !== Kt || (Mt = Kt);
+ var Vt = Pt && Pt.exports === qt && qt, Yt = k();
+ typeof define == "function" && typeof define.amd == "object" && define.amd ? (Mt._ = Yt, define(function(){
+ return Yt
+ })) : qt && Pt ? Vt ? (Pt.exports = Yt)._ = Yt : qt._ = Yt : Mt._ = Yt
+}).call(this);
\ No newline at end of file
diff --git a/web/public/js/socket.io.js b/web/public/js/socket.io.js
new file mode 100644
index 0000000..6ac701a
--- /dev/null
+++ b/web/public/js/socket.io.js
@@ -0,0 +1,6425 @@
+!function(e){
+ if ("object" == typeof exports && "undefined" != typeof module)module.exports = e(); else if ("function" == typeof define && define.amd)define([], e); else {
+ var f;
+ "undefined" != typeof window ? f = window : "undefined" != typeof global ? f = global : "undefined" != typeof self && (f = self), f.io = e()
+ }
+}(function(){
+ var define, module, exports;
+ return (function e(t, n, r){
+ function s(o, u){
+ if (!n[o]) {
+ if (!t[o]) {
+ var a = typeof require == "function" && require;
+ if (!u && a)return a(o, !0);
+ if (i)return i(o, !0);
+ throw new Error("Cannot find module '" + o + "'")
+ }
+ var f = n[o] = {exports: {}};
+ t[o][0].call(f.exports, function(e){
+ var n = t[o][1][e];
+ return s(n ? n : e)
+ }, f, f.exports, e, t, n, r)
+ }
+ return n[o].exports
+ }
+
+ var i = typeof require == "function" && require;
+ for (var o = 0; o < r.length; o++)s(r[o]);
+ return s
+ })({
+ 1 : [function(_dereq_, module, exports){
+
+ module.exports = _dereq_('./lib/');
+
+ }, {"./lib/": 2}],
+ 2 : [function(_dereq_, module, exports){
+
+ /**
+ * Module dependencies.
+ */
+
+ var url = _dereq_('./url');
+ var parser = _dereq_('socket.io-parser');
+ var Manager = _dereq_('./manager');
+ var debug = _dereq_('debug')('socket.io-client');
+
+ /**
+ * Module exports.
+ */
+
+ module.exports = exports = lookup;
+
+ /**
+ * Managers cache.
+ */
+
+ var cache = exports.managers = {};
+
+ /**
+ * Looks up an existing `Manager` for multiplexing.
+ * If the user summons:
+ *
+ * `io('http://localhost/a');`
+ * `io('http://localhost/b');`
+ *
+ * We reuse the existing instance based on same scheme/port/host,
+ * and we initialize sockets for each namespace.
+ *
+ * @api public
+ */
+
+ function lookup(uri, opts){
+ if (typeof uri == 'object') {
+ opts = uri;
+ uri = undefined;
+ }
+
+ opts = opts || {};
+
+ var parsed = url(uri);
+ var source = parsed.source;
+ var id = parsed.id;
+ var io;
+
+ if (opts.forceNew || opts['force new connection'] || false === opts.multiplex) {
+ debug('ignoring socket cache for %s', source);
+ io = Manager(source, opts);
+ } else {
+ if (!cache[id]) {
+ debug('new io instance for %s', source);
+ cache[id] = Manager(source, opts);
+ }
+ io = cache[id];
+ }
+
+ return io.socket(parsed.path);
+ }
+
+ /**
+ * Protocol version.
+ *
+ * @api public
+ */
+
+ exports.protocol = parser.protocol;
+
+ /**
+ * `connect`.
+ *
+ * @param {String} uri
+ * @api public
+ */
+
+ exports.connect = lookup;
+
+ /**
+ * Expose constructors for standalone build.
+ *
+ * @api public
+ */
+
+ exports.Manager = _dereq_('./manager');
+ exports.Socket = _dereq_('./socket');
+
+ }, {"./manager": 3, "./socket": 5, "./url": 6, "debug": 9, "socket.io-parser": 40}],
+ 3 : [function(_dereq_, module, exports){
+
+ /**
+ * Module dependencies.
+ */
+
+ var url = _dereq_('./url');
+ var eio = _dereq_('engine.io-client');
+ var Socket = _dereq_('./socket');
+ var Emitter = _dereq_('component-emitter');
+ var parser = _dereq_('socket.io-parser');
+ var on = _dereq_('./on');
+ var bind = _dereq_('component-bind');
+ var object = _dereq_('object-component');
+ var debug = _dereq_('debug')('socket.io-client:manager');
+ var indexOf = _dereq_('indexof');
+
+ /**
+ * Module exports
+ */
+
+ module.exports = Manager;
+
+ /**
+ * `Manager` constructor.
+ *
+ * @param {String} engine instance or engine uri/opts
+ * @param {Object} options
+ * @api public
+ */
+
+ function Manager(uri, opts){
+ if (!(this instanceof Manager)) return new Manager(uri, opts);
+ if (uri && ('object' == typeof uri)) {
+ opts = uri;
+ uri = undefined;
+ }
+ opts = opts || {};
+
+ opts.path = opts.path || '/socket.io';
+ this.nsps = {};
+ this.subs = [];
+ this.opts = opts;
+ this.reconnection(opts.reconnection !== false);
+ this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);
+ this.reconnectionDelay(opts.reconnectionDelay || 1000);
+ this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);
+ this.timeout(null == opts.timeout ? 20000 : opts.timeout);
+ this.readyState = 'closed';
+ this.uri = uri;
+ this.connected = [];
+ this.attempts = 0;
+ this.encoding = false;
+ this.packetBuffer = [];
+ this.encoder = new parser.Encoder();
+ this.decoder = new parser.Decoder();
+ this.autoConnect = opts.autoConnect !== false;
+ if (this.autoConnect) this.open();
+ }
+
+ /**
+ * Propagate given event to sockets and emit on `this`
+ *
+ * @api private
+ */
+
+ Manager.prototype.emitAll = function(){
+ this.emit.apply(this, arguments);
+ for (var nsp in this.nsps) {
+ this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);
+ }
+ };
+
+ /**
+ * Mix in `Emitter`.
+ */
+
+ Emitter(Manager.prototype);
+
+ /**
+ * Sets the `reconnection` config.
+ *
+ * @param {Boolean} true/false if it should automatically reconnect
+ * @return {Manager} self or value
+ * @api public
+ */
+
+ Manager.prototype.reconnection = function(v){
+ if (!arguments.length) return this._reconnection;
+ this._reconnection = !!v;
+ return this;
+ };
+
+ /**
+ * Sets the reconnection attempts config.
+ *
+ * @param {Number} max reconnection attempts before giving up
+ * @return {Manager} self or value
+ * @api public
+ */
+
+ Manager.prototype.reconnectionAttempts = function(v){
+ if (!arguments.length) return this._reconnectionAttempts;
+ this._reconnectionAttempts = v;
+ return this;
+ };
+
+ /**
+ * Sets the delay between reconnections.
+ *
+ * @param {Number} delay
+ * @return {Manager} self or value
+ * @api public
+ */
+
+ Manager.prototype.reconnectionDelay = function(v){
+ if (!arguments.length) return this._reconnectionDelay;
+ this._reconnectionDelay = v;
+ return this;
+ };
+
+ /**
+ * Sets the maximum delay between reconnections.
+ *
+ * @param {Number} delay
+ * @return {Manager} self or value
+ * @api public
+ */
+
+ Manager.prototype.reconnectionDelayMax = function(v){
+ if (!arguments.length) return this._reconnectionDelayMax;
+ this._reconnectionDelayMax = v;
+ return this;
+ };
+
+ /**
+ * Sets the connection timeout. `false` to disable
+ *
+ * @return {Manager} self or value
+ * @api public
+ */
+
+ Manager.prototype.timeout = function(v){
+ if (!arguments.length) return this._timeout;
+ this._timeout = v;
+ return this;
+ };
+
+ /**
+ * Starts trying to reconnect if reconnection is enabled and we have not
+ * started reconnecting yet
+ *
+ * @api private
+ */
+
+ Manager.prototype.maybeReconnectOnOpen = function(){
+ // Only try to reconnect if it's the first time we're connecting
+ if (!this.openReconnect && !this.reconnecting && this._reconnection && this.attempts === 0) {
+ // keeps reconnection from firing twice for the same reconnection loop
+ this.openReconnect = true;
+ this.reconnect();
+ }
+ };
+
+
+ /**
+ * Sets the current transport `socket`.
+ *
+ * @param {Function} optional, callback
+ * @return {Manager} self
+ * @api public
+ */
+
+ Manager.prototype.open =
+ Manager.prototype.connect = function(fn){
+ debug('readyState %s', this.readyState);
+ if (~this.readyState.indexOf('open')) return this;
+
+ debug('opening %s', this.uri);
+ this.engine = eio(this.uri, this.opts);
+ var socket = this.engine;
+ var self = this;
+ this.readyState = 'opening';
+ this.skipReconnect = false;
+
+ // emit `open`
+ var openSub = on(socket, 'open', function(){
+ self.onopen();
+ fn && fn();
+ });
+
+ // emit `connect_error`
+ var errorSub = on(socket, 'error', function(data){
+ debug('connect_error');
+ self.cleanup();
+ self.readyState = 'closed';
+ self.emitAll('connect_error', data);
+ if (fn) {
+ var err = new Error('Connection error');
+ err.data = data;
+ fn(err);
+ }
+
+ self.maybeReconnectOnOpen();
+ });
+
+ // emit `connect_timeout`
+ if (false !== this._timeout) {
+ var timeout = this._timeout;
+ debug('connect attempt will timeout after %d', timeout);
+
+ // set timer
+ var timer = setTimeout(function(){
+ debug('connect attempt timed out after %d', timeout);
+ openSub.destroy();
+ socket.close();
+ socket.emit('error', 'timeout');
+ self.emitAll('connect_timeout', timeout);
+ }, timeout);
+
+ this.subs.push({
+ destroy: function(){
+ clearTimeout(timer);
+ }
+ });
+ }
+
+ this.subs.push(openSub);
+ this.subs.push(errorSub);
+
+ return this;
+ };
+
+ /**
+ * Called upon transport open.
+ *
+ * @api private
+ */
+
+ Manager.prototype.onopen = function(){
+ debug('open');
+
+ // clear old subs
+ this.cleanup();
+
+ // mark as open
+ this.readyState = 'open';
+ this.emit('open');
+
+ // add new subs
+ var socket = this.engine;
+ this.subs.push(on(socket, 'data', bind(this, 'ondata')));
+ this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));
+ this.subs.push(on(socket, 'error', bind(this, 'onerror')));
+ this.subs.push(on(socket, 'close', bind(this, 'onclose')));
+ };
+
+ /**
+ * Called with data.
+ *
+ * @api private
+ */
+
+ Manager.prototype.ondata = function(data){
+ this.decoder.add(data);
+ };
+
+ /**
+ * Called when parser fully decodes a packet.
+ *
+ * @api private
+ */
+
+ Manager.prototype.ondecoded = function(packet){
+ this.emit('packet', packet);
+ };
+
+ /**
+ * Called upon socket error.
+ *
+ * @api private
+ */
+
+ Manager.prototype.onerror = function(err){
+ debug('error', err);
+ this.emitAll('error', err);
+ };
+
+ /**
+ * Creates a new socket for the given `nsp`.
+ *
+ * @return {Socket}
+ * @api public
+ */
+
+ Manager.prototype.socket = function(nsp){
+ var socket = this.nsps[nsp];
+ if (!socket) {
+ socket = new Socket(this, nsp);
+ this.nsps[nsp] = socket;
+ var self = this;
+ socket.on('connect', function(){
+ if (!~indexOf(self.connected, socket)) {
+ self.connected.push(socket);
+ }
+ });
+ }
+ return socket;
+ };
+
+ /**
+ * Called upon a socket close.
+ *
+ * @param {Socket} socket
+ */
+
+ Manager.prototype.destroy = function(socket){
+ var index = indexOf(this.connected, socket);
+ if (~index) this.connected.splice(index, 1);
+ if (this.connected.length) return;
+
+ this.close();
+ };
+
+ /**
+ * Writes a packet.
+ *
+ * @param {Object} packet
+ * @api private
+ */
+
+ Manager.prototype.packet = function(packet){
+ debug('writing packet %j', packet);
+ var self = this;
+
+ if (!self.encoding) {
+ // encode, then write to engine with result
+ self.encoding = true;
+ this.encoder.encode(packet, function(encodedPackets){
+ for (var i = 0; i < encodedPackets.length; i++) {
+ self.engine.write(encodedPackets[i]);
+ }
+ self.encoding = false;
+ self.processPacketQueue();
+ });
+ } else { // add packet to the queue
+ self.packetBuffer.push(packet);
+ }
+ };
+
+ /**
+ * If packet buffer is non-empty, begins encoding the
+ * next packet in line.
+ *
+ * @api private
+ */
+
+ Manager.prototype.processPacketQueue = function(){
+ if (this.packetBuffer.length > 0 && !this.encoding) {
+ var pack = this.packetBuffer.shift();
+ this.packet(pack);
+ }
+ };
+
+ /**
+ * Clean up transport subscriptions and packet buffer.
+ *
+ * @api private
+ */
+
+ Manager.prototype.cleanup = function(){
+ var sub;
+ while (sub = this.subs.shift()) sub.destroy();
+
+ this.packetBuffer = [];
+ this.encoding = false;
+
+ this.decoder.destroy();
+ };
+
+ /**
+ * Close the current socket.
+ *
+ * @api private
+ */
+
+ Manager.prototype.close =
+ Manager.prototype.disconnect = function(){
+ this.skipReconnect = true;
+ this.readyState = 'closed';
+ this.engine && this.engine.close();
+ };
+
+ /**
+ * Called upon engine close.
+ *
+ * @api private
+ */
+
+ Manager.prototype.onclose = function(reason){
+ debug('close');
+ this.cleanup();
+ this.readyState = 'closed';
+ this.emit('close', reason);
+ if (this._reconnection && !this.skipReconnect) {
+ this.reconnect();
+ }
+ };
+
+ /**
+ * Attempt a reconnection.
+ *
+ * @api private
+ */
+
+ Manager.prototype.reconnect = function(){
+ if (this.reconnecting || this.skipReconnect) return this;
+
+ var self = this;
+ this.attempts++;
+
+ if (this.attempts > this._reconnectionAttempts) {
+ debug('reconnect failed');
+ this.emitAll('reconnect_failed');
+ this.reconnecting = false;
+ } else {
+ var delay = this.attempts * this.reconnectionDelay();
+ delay = Math.min(delay, this.reconnectionDelayMax());
+ debug('will wait %dms before reconnect attempt', delay);
+
+ this.reconnecting = true;
+ var timer = setTimeout(function(){
+ if (self.skipReconnect) return;
+
+ debug('attempting reconnect');
+ self.emitAll('reconnect_attempt', self.attempts);
+ self.emitAll('reconnecting', self.attempts);
+
+ // check again for the case socket closed in above events
+ if (self.skipReconnect) return;
+
+ self.open(function(err){
+ if (err) {
+ debug('reconnect attempt error');
+ self.reconnecting = false;
+ self.reconnect();
+ self.emitAll('reconnect_error', err.data);
+ } else {
+ debug('reconnect success');
+ self.onreconnect();
+ }
+ });
+ }, delay);
+
+ this.subs.push({
+ destroy: function(){
+ clearTimeout(timer);
+ }
+ });
+ }
+ };
+
+ /**
+ * Called upon successful reconnect.
+ *
+ * @api private
+ */
+
+ Manager.prototype.onreconnect = function(){
+ var attempt = this.attempts;
+ this.attempts = 0;
+ this.reconnecting = false;
+ this.emitAll('reconnect', attempt);
+ };
+
+ }, {
+ "./on" : 4,
+ "./socket" : 5,
+ "./url" : 6,
+ "component-bind" : 7,
+ "component-emitter": 8,
+ "debug" : 9,
+ "engine.io-client" : 10,
+ "indexof" : 36,
+ "object-component" : 37,
+ "socket.io-parser" : 40
+ }],
+ 4 : [function(_dereq_, module, exports){
+
+ /**
+ * Module exports.
+ */
+
+ module.exports = on;
+
+ /**
+ * Helper for subscriptions.
+ *
+ * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`
+ * @param {String} event name
+ * @param {Function} callback
+ * @api public
+ */
+
+ function on(obj, ev, fn){
+ obj.on(ev, fn);
+ return {
+ destroy: function(){
+ obj.removeListener(ev, fn);
+ }
+ };
+ }
+
+ }, {}],
+ 5 : [function(_dereq_, module, exports){
+
+ /**
+ * Module dependencies.
+ */
+
+ var parser = _dereq_('socket.io-parser');
+ var Emitter = _dereq_('component-emitter');
+ var toArray = _dereq_('to-array');
+ var on = _dereq_('./on');
+ var bind = _dereq_('component-bind');
+ var debug = _dereq_('debug')('socket.io-client:socket');
+ var hasBin = _dereq_('has-binary');
+
+ /**
+ * Module exports.
+ */
+
+ module.exports = exports = Socket;
+
+ /**
+ * Internal events (blacklisted).
+ * These events can't be emitted by the user.
+ *
+ * @api private
+ */
+
+ var events = {
+ connect : 1,
+ connect_error : 1,
+ connect_timeout : 1,
+ disconnect : 1,
+ error : 1,
+ reconnect : 1,
+ reconnect_attempt: 1,
+ reconnect_failed : 1,
+ reconnect_error : 1,
+ reconnecting : 1
+ };
+
+ /**
+ * Shortcut to `Emitter#emit`.
+ */
+
+ var emit = Emitter.prototype.emit;
+
+ /**
+ * `Socket` constructor.
+ *
+ * @api public
+ */
+
+ function Socket(io, nsp){
+ this.io = io;
+ this.nsp = nsp;
+ this.json = this; // compat
+ this.ids = 0;
+ this.acks = {};
+ if (this.io.autoConnect) this.open();
+ this.receiveBuffer = [];
+ this.sendBuffer = [];
+ this.connected = false;
+ this.disconnected = true;
+ }
+
+ /**
+ * Mix in `Emitter`.
+ */
+
+ Emitter(Socket.prototype);
+
+ /**
+ * Subscribe to open, close and packet events
+ *
+ * @api private
+ */
+
+ Socket.prototype.subEvents = function(){
+ if (this.subs) return;
+
+ var io = this.io;
+ this.subs = [
+ on(io, 'open', bind(this, 'onopen')),
+ on(io, 'packet', bind(this, 'onpacket')),
+ on(io, 'close', bind(this, 'onclose'))
+ ];
+ };
+
+ /**
+ * "Opens" the socket.
+ *
+ * @api public
+ */
+
+ Socket.prototype.open =
+ Socket.prototype.connect = function(){
+ if (this.connected) return this;
+
+ this.subEvents();
+ this.io.open(); // ensure open
+ if ('open' == this.io.readyState) this.onopen();
+ return this;
+ };
+
+ /**
+ * Sends a `message` event.
+ *
+ * @return {Socket} self
+ * @api public
+ */
+
+ Socket.prototype.send = function(){
+ var args = toArray(arguments);
+ args.unshift('message');
+ this.emit.apply(this, args);
+ return this;
+ };
+
+ /**
+ * Override `emit`.
+ * If the event is in `events`, it's emitted normally.
+ *
+ * @param {String} event name
+ * @return {Socket} self
+ * @api public
+ */
+
+ Socket.prototype.emit = function(ev){
+ if (events.hasOwnProperty(ev)) {
+ emit.apply(this, arguments);
+ return this;
+ }
+
+ var args = toArray(arguments);
+ var parserType = parser.EVENT; // default
+ if (hasBin(args)) {
+ parserType = parser.BINARY_EVENT;
+ } // binary
+ var packet = {type: parserType, data: args};
+
+ // event ack callback
+ if ('function' == typeof args[args.length - 1]) {
+ debug('emitting packet with ack id %d', this.ids);
+ this.acks[this.ids] = args.pop();
+ packet.id = this.ids++;
+ }
+
+ if (this.connected) {
+ this.packet(packet);
+ } else {
+ this.sendBuffer.push(packet);
+ }
+
+ return this;
+ };
+
+ /**
+ * Sends a packet.
+ *
+ * @param {Object} packet
+ * @api private
+ */
+
+ Socket.prototype.packet = function(packet){
+ packet.nsp = this.nsp;
+ this.io.packet(packet);
+ };
+
+ /**
+ * Called upon engine `open`.
+ *
+ * @api private
+ */
+
+ Socket.prototype.onopen = function(){
+ debug('transport is open - connecting');
+
+ // write connect packet if necessary
+ if ('/' != this.nsp) {
+ this.packet({type: parser.CONNECT});
+ }
+ };
+
+ /**
+ * Called upon engine `close`.
+ *
+ * @param {String} reason
+ * @api private
+ */
+
+ Socket.prototype.onclose = function(reason){
+ debug('close (%s)', reason);
+ this.connected = false;
+ this.disconnected = true;
+ this.emit('disconnect', reason);
+ };
+
+ /**
+ * Called with socket packet.
+ *
+ * @param {Object} packet
+ * @api private
+ */
+
+ Socket.prototype.onpacket = function(packet){
+ if (packet.nsp != this.nsp) return;
+
+ switch (packet.type) {
+ case parser.CONNECT:
+ this.onconnect();
+ break;
+
+ case parser.EVENT:
+ this.onevent(packet);
+ break;
+
+ case parser.BINARY_EVENT:
+ this.onevent(packet);
+ break;
+
+ case parser.ACK:
+ this.onack(packet);
+ break;
+
+ case parser.BINARY_ACK:
+ this.onack(packet);
+ break;
+
+ case parser.DISCONNECT:
+ this.ondisconnect();
+ break;
+
+ case parser.ERROR:
+ this.emit('error', packet.data);
+ break;
+ }
+ };
+
+ /**
+ * Called upon a server event.
+ *
+ * @param {Object} packet
+ * @api private
+ */
+
+ Socket.prototype.onevent = function(packet){
+ var args = packet.data || [];
+ debug('emitting event %j', args);
+
+ if (null != packet.id) {
+ debug('attaching ack callback to event');
+ args.push(this.ack(packet.id));
+ }
+
+ if (this.connected) {
+ emit.apply(this, args);
+ } else {
+ this.receiveBuffer.push(args);
+ }
+ };
+
+ /**
+ * Produces an ack callback to emit with an event.
+ *
+ * @api private
+ */
+
+ Socket.prototype.ack = function(id){
+ var self = this;
+ var sent = false;
+ return function(){
+ // prevent double callbacks
+ if (sent) return;
+ sent = true;
+ var args = toArray(arguments);
+ debug('sending ack %j', args);
+
+ var type = hasBin(args) ? parser.BINARY_ACK : parser.ACK;
+ self.packet({
+ type: type,
+ id : id,
+ data: args
+ });
+ };
+ };
+
+ /**
+ * Called upon a server acknowlegement.
+ *
+ * @param {Object} packet
+ * @api private
+ */
+
+ Socket.prototype.onack = function(packet){
+ debug('calling ack %s with %j', packet.id, packet.data);
+ var fn = this.acks[packet.id];
+ fn.apply(this, packet.data);
+ delete this.acks[packet.id];
+ };
+
+ /**
+ * Called upon server connect.
+ *
+ * @api private
+ */
+
+ Socket.prototype.onconnect = function(){
+ this.connected = true;
+ this.disconnected = false;
+ this.emit('connect');
+ this.emitBuffered();
+ };
+
+ /**
+ * Emit buffered events (received and emitted).
+ *
+ * @api private
+ */
+
+ Socket.prototype.emitBuffered = function(){
+ var i;
+ for (i = 0; i < this.receiveBuffer.length; i++) {
+ emit.apply(this, this.receiveBuffer[i]);
+ }
+ this.receiveBuffer = [];
+
+ for (i = 0; i < this.sendBuffer.length; i++) {
+ this.packet(this.sendBuffer[i]);
+ }
+ this.sendBuffer = [];
+ };
+
+ /**
+ * Called upon server disconnect.
+ *
+ * @api private
+ */
+
+ Socket.prototype.ondisconnect = function(){
+ debug('server disconnect (%s)', this.nsp);
+ this.destroy();
+ this.onclose('io server disconnect');
+ };
+
+ /**
+ * Called upon forced client/server side disconnections,
+ * this method ensures the manager stops tracking us and
+ * that reconnections don't get triggered for this.
+ *
+ * @api private.
+ */
+
+ Socket.prototype.destroy = function(){
+ if (this.subs) {
+ // clean subscriptions to avoid reconnections
+ for (var i = 0; i < this.subs.length; i++) {
+ this.subs[i].destroy();
+ }
+ this.subs = null;
+ }
+
+ this.io.destroy(this);
+ };
+
+ /**
+ * Disconnects the socket manually.
+ *
+ * @return {Socket} self
+ * @api public
+ */
+
+ Socket.prototype.close =
+ Socket.prototype.disconnect = function(){
+ if (this.connected) {
+ debug('performing disconnect (%s)', this.nsp);
+ this.packet({type: parser.DISCONNECT});
+ }
+
+ // remove socket from pool
+ this.destroy();
+
+ if (this.connected) {
+ // fire events
+ this.onclose('io client disconnect');
+ }
+ return this;
+ };
+
+ }, {
+ "./on" : 4,
+ "component-bind" : 7,
+ "component-emitter": 8,
+ "debug" : 9,
+ "has-binary" : 32,
+ "socket.io-parser" : 40,
+ "to-array" : 44
+ }],
+ 6 : [function(_dereq_, module, exports){
+ (function(global){
+
+ /**
+ * Module dependencies.
+ */
+
+ var parseuri = _dereq_('parseuri');
+ var debug = _dereq_('debug')('socket.io-client:url');
+
+ /**
+ * Module exports.
+ */
+
+ module.exports = url;
+
+ /**
+ * URL parser.
+ *
+ * @param {String} url
+ * @param {Object} An object meant to mimic window.location.
+ * Defaults to window.location.
+ * @api public
+ */
+
+ function url(uri, loc){
+ var obj = uri;
+
+ // default to window.location
+ var loc = loc || global.location;
+ if (null == uri) uri = loc.protocol + '//' + loc.hostname;
+
+ // relative path support
+ if ('string' == typeof uri) {
+ if ('/' == uri.charAt(0)) {
+ if ('/' == uri.charAt(1)) {
+ uri = loc.protocol + uri;
+ } else {
+ uri = loc.hostname + uri;
+ }
+ }
+
+ if (!/^(https?|wss?):\/\//.test(uri)) {
+ debug('protocol-less url %s', uri);
+ if ('undefined' != typeof loc) {
+ uri = loc.protocol + '//' + uri;
+ } else {
+ uri = 'https://' + uri;
+ }
+ }
+
+ // parse
+ debug('parse %s', uri);
+ obj = parseuri(uri);
+ }
+
+ // make sure we treat `localhost:80` and `localhost` equally
+ if (!obj.port) {
+ if (/^(http|ws)$/.test(obj.protocol)) {
+ obj.port = '80';
+ }
+ else if (/^(http|ws)s$/.test(obj.protocol)) {
+ obj.port = '443';
+ }
+ }
+
+ obj.path = obj.path || '/';
+
+ // define unique id
+ obj.id = obj.protocol + '://' + obj.host + ':' + obj.port;
+ // define href
+ obj.href = obj.protocol + '://' + obj.host + (loc && loc.port == obj.port ? '' : (':' + obj.port));
+
+ return obj;
+ }
+
+ }).call(this, typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+ }, {"debug": 9, "parseuri": 38}],
+ 7 : [function(_dereq_, module, exports){
+ /**
+ * Slice reference.
+ */
+
+ var slice = [].slice;
+
+ /**
+ * Bind `obj` to `fn`.
+ *
+ * @param {Object} obj
+ * @param {Function|String} fn or string
+ * @return {Function}
+ * @api public
+ */
+
+ module.exports = function(obj, fn){
+ if ('string' == typeof fn) fn = obj[fn];
+ if ('function' != typeof fn) throw new Error('bind() requires a function');
+ var args = slice.call(arguments, 2);
+ return function(){
+ return fn.apply(obj, args.concat(slice.call(arguments)));
+ }
+ };
+
+ }, {}],
+ 8 : [function(_dereq_, module, exports){
+
+ /**
+ * Expose `Emitter`.
+ */
+
+ module.exports = Emitter;
+
+ /**
+ * Initialize a new `Emitter`.
+ *
+ * @api public
+ */
+
+ function Emitter(obj){
+ if (obj) return mixin(obj);
+ };
+
+ /**
+ * Mixin the emitter properties.
+ *
+ * @param {Object} obj
+ * @return {Object}
+ * @api private
+ */
+
+ function mixin(obj){
+ for (var key in Emitter.prototype) {
+ obj[key] = Emitter.prototype[key];
+ }
+ return obj;
+ }
+
+ /**
+ * Listen on the given `event` with `fn`.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+ Emitter.prototype.on =
+ Emitter.prototype.addEventListener = function(event, fn){
+ this._callbacks = this._callbacks || {};
+ (this._callbacks[event] = this._callbacks[event] || [])
+ .push(fn);
+ return this;
+ };
+
+ /**
+ * Adds an `event` listener that will be invoked a single
+ * time then automatically removed.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+ Emitter.prototype.once = function(event, fn){
+ var self = this;
+ this._callbacks = this._callbacks || {};
+
+ function on(){
+ self.off(event, on);
+ fn.apply(this, arguments);
+ }
+
+ on.fn = fn;
+ this.on(event, on);
+ return this;
+ };
+
+ /**
+ * Remove the given callback for `event` or all
+ * registered callbacks.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+ Emitter.prototype.off =
+ Emitter.prototype.removeListener =
+ Emitter.prototype.removeAllListeners =
+ Emitter.prototype.removeEventListener = function(event, fn){
+ this._callbacks = this._callbacks || {};
+
+ // all
+ if (0 == arguments.length) {
+ this._callbacks = {};
+ return this;
+ }
+
+ // specific event
+ var callbacks = this._callbacks[event];
+ if (!callbacks) return this;
+
+ // remove all handlers
+ if (1 == arguments.length) {
+ delete this._callbacks[event];
+ return this;
+ }
+
+ // remove specific handler
+ var cb;
+ for (var i = 0; i < callbacks.length; i++) {
+ cb = callbacks[i];
+ if (cb === fn || cb.fn === fn) {
+ callbacks.splice(i, 1);
+ break;
+ }
+ }
+ return this;
+ };
+
+ /**
+ * Emit `event` with the given args.
+ *
+ * @param {String} event
+ * @param {Mixed} ...
+ * @return {Emitter}
+ */
+
+ Emitter.prototype.emit = function(event){
+ this._callbacks = this._callbacks || {};
+ var args = [].slice.call(arguments, 1)
+ , callbacks = this._callbacks[event];
+
+ if (callbacks) {
+ callbacks = callbacks.slice(0);
+ for (var i = 0, len = callbacks.length; i < len; ++i) {
+ callbacks[i].apply(this, args);
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Return array of callbacks for `event`.
+ *
+ * @param {String} event
+ * @return {Array}
+ * @api public
+ */
+
+ Emitter.prototype.listeners = function(event){
+ this._callbacks = this._callbacks || {};
+ return this._callbacks[event] || [];
+ };
+
+ /**
+ * Check if this emitter has `event` handlers.
+ *
+ * @param {String} event
+ * @return {Boolean}
+ * @api public
+ */
+
+ Emitter.prototype.hasListeners = function(event){
+ return !!this.listeners(event).length;
+ };
+
+ }, {}],
+ 9 : [function(_dereq_, module, exports){
+
+ /**
+ * Expose `debug()` as the module.
+ */
+
+ module.exports = debug;
+
+ /**
+ * Create a debugger with the given `name`.
+ *
+ * @param {String} name
+ * @return {Type}
+ * @api public
+ */
+
+ function debug(name){
+ if (!debug.enabled(name)) return function(){
+ };
+
+ return function(fmt){
+ fmt = coerce(fmt);
+
+ var curr = new Date;
+ var ms = curr - (debug[name] || curr);
+ debug[name] = curr;
+
+ fmt = name
+ + ' '
+ + fmt
+ + ' +' + debug.humanize(ms);
+
+ // This hackery is required for IE8
+ // where `console.log` doesn't have 'apply'
+ window.console
+ && console.log
+ && Function.prototype.apply.call(console.log, console, arguments);
+ }
+ }
+
+ /**
+ * The currently active debug mode names.
+ */
+
+ debug.names = [];
+ debug.skips = [];
+
+ /**
+ * Enables a debug mode by name. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} name
+ * @api public
+ */
+
+ debug.enable = function(name){
+ try {
+ localStorage.debug = name;
+ } catch (e) {
+ }
+
+ var split = (name || '').split(/[\s,]+/)
+ , len = split.length;
+
+ for (var i = 0; i < len; i++) {
+ name = split[i].replace('*', '.*?');
+ if (name[0] === '-') {
+ debug.skips.push(new RegExp('^' + name.substr(1) + '$'));
+ }
+ else {
+ debug.names.push(new RegExp('^' + name + '$'));
+ }
+ }
+ };
+
+ /**
+ * Disable debug output.
+ *
+ * @api public
+ */
+
+ debug.disable = function(){
+ debug.enable('');
+ };
+
+ /**
+ * Humanize the given `ms`.
+ *
+ * @param {Number} m
+ * @return {String}
+ * @api private
+ */
+
+ debug.humanize = function(ms){
+ var sec = 1000
+ , min = 60 * 1000
+ , hour = 60 * min;
+
+ if (ms >= hour) return (ms / hour).toFixed(1) + 'h';
+ if (ms >= min) return (ms / min).toFixed(1) + 'm';
+ if (ms >= sec) return (ms / sec | 0) + 's';
+ return ms + 'ms';
+ };
+
+ /**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+
+ debug.enabled = function(name){
+ for (var i = 0, len = debug.skips.length; i < len; i++) {
+ if (debug.skips[i].test(name)) {
+ return false;
+ }
+ }
+ for (var i = 0, len = debug.names.length; i < len; i++) {
+ if (debug.names[i].test(name)) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ /**
+ * Coerce `val`.
+ */
+
+ function coerce(val){
+ if (val instanceof Error) return val.stack || val.message;
+ return val;
+ }
+
+// persist
+
+ try {
+ if (window.localStorage) debug.enable(localStorage.debug);
+ } catch (e) {
+ }
+
+ }, {}],
+ 10: [function(_dereq_, module, exports){
+
+ module.exports = _dereq_('./lib/');
+
+ }, {"./lib/": 11}],
+ 11: [function(_dereq_, module, exports){
+
+ module.exports = _dereq_('./socket');
+
+ /**
+ * Exports parser
+ *
+ * @api public
+ *
+ */
+ module.exports.parser = _dereq_('engine.io-parser');
+
+ }, {"./socket": 12, "engine.io-parser": 21}],
+ 12: [function(_dereq_, module, exports){
+ (function(global){
+ /**
+ * Module dependencies.
+ */
+
+ var transports = _dereq_('./transports');
+ var Emitter = _dereq_('component-emitter');
+ var debug = _dereq_('debug')('engine.io-client:socket');
+ var index = _dereq_('indexof');
+ var parser = _dereq_('engine.io-parser');
+ var parseuri = _dereq_('parseuri');
+ var parsejson = _dereq_('parsejson');
+ var parseqs = _dereq_('parseqs');
+
+ /**
+ * Module exports.
+ */
+
+ module.exports = Socket;
+
+ /**
+ * Noop function.
+ *
+ * @api private
+ */
+
+ function noop(){
+ }
+
+ /**
+ * Socket constructor.
+ *
+ * @param {String|Object} uri or options
+ * @param {Object} options
+ * @api public
+ */
+
+ function Socket(uri, opts){
+ if (!(this instanceof Socket)) return new Socket(uri, opts);
+
+ opts = opts || {};
+
+ if (uri && 'object' == typeof uri) {
+ opts = uri;
+ uri = null;
+ }
+
+ if (uri) {
+ uri = parseuri(uri);
+ opts.host = uri.host;
+ opts.secure = uri.protocol == 'https' || uri.protocol == 'wss';
+ opts.port = uri.port;
+ if (uri.query) opts.query = uri.query;
+ }
+
+ this.secure = null != opts.secure ? opts.secure :
+ (global.location && 'https:' == location.protocol);
+
+ if (opts.host) {
+ var pieces = opts.host.split(':');
+ opts.hostname = pieces.shift();
+ if (pieces.length) opts.port = pieces.pop();
+ }
+
+ this.agent = opts.agent || false;
+ this.hostname = opts.hostname ||
+ (global.location ? location.hostname : 'localhost');
+ this.port = opts.port || (global.location && location.port ?
+ location.port :
+ (this.secure ? 443 : 80));
+ this.query = opts.query || {};
+ if ('string' == typeof this.query) this.query = parseqs.decode(this.query);
+ this.upgrade = false !== opts.upgrade;
+ this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
+ this.forceJSONP = !!opts.forceJSONP;
+ this.jsonp = false !== opts.jsonp;
+ this.forceBase64 = !!opts.forceBase64;
+ this.enablesXDR = !!opts.enablesXDR;
+ this.timestampParam = opts.timestampParam || 't';
+ this.timestampRequests = opts.timestampRequests;
+ this.transports = opts.transports || ['polling', 'websocket'];
+ this.readyState = '';
+ this.writeBuffer = [];
+ this.callbackBuffer = [];
+ this.policyPort = opts.policyPort || 843;
+ this.rememberUpgrade = opts.rememberUpgrade || false;
+ this.open();
+ this.binaryType = null;
+ this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
+ }
+
+ Socket.priorWebsocketSuccess = false;
+
+ /**
+ * Mix in `Emitter`.
+ */
+
+ Emitter(Socket.prototype);
+
+ /**
+ * Protocol version.
+ *
+ * @api public
+ */
+
+ Socket.protocol = parser.protocol; // this is an int
+
+ /**
+ * Expose deps for legacy compatibility
+ * and standalone browser access.
+ */
+
+ Socket.Socket = Socket;
+ Socket.Transport = _dereq_('./transport');
+ Socket.transports = _dereq_('./transports');
+ Socket.parser = _dereq_('engine.io-parser');
+
+ /**
+ * Creates transport of the given type.
+ *
+ * @param {String} transport name
+ * @return {Transport}
+ * @api private
+ */
+
+ Socket.prototype.createTransport = function(name){
+ debug('creating transport "%s"', name);
+ var query = clone(this.query);
+
+ // append engine.io protocol identifier
+ query.EIO = parser.protocol;
+
+ // transport name
+ query.transport = name;
+
+ // session id if we already have one
+ if (this.id) query.sid = this.id;
+
+ var transport = new transports[name]({
+ agent : this.agent,
+ hostname : this.hostname,
+ port : this.port,
+ secure : this.secure,
+ path : this.path,
+ query : query,
+ forceJSONP : this.forceJSONP,
+ jsonp : this.jsonp,
+ forceBase64 : this.forceBase64,
+ enablesXDR : this.enablesXDR,
+ timestampRequests: this.timestampRequests,
+ timestampParam : this.timestampParam,
+ policyPort : this.policyPort,
+ socket : this
+ });
+
+ return transport;
+ };
+
+ function clone(obj){
+ var o = {};
+ for (var i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ o[i] = obj[i];
+ }
+ }
+ return o;
+ }
+
+ /**
+ * Initializes transport to use and starts probe.
+ *
+ * @api private
+ */
+ Socket.prototype.open = function(){
+ var transport;
+ if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') != -1) {
+ transport = 'websocket';
+ } else if (0 == this.transports.length) {
+ // Emit error on next tick so it can be listened to
+ var self = this;
+ setTimeout(function(){
+ self.emit('error', 'No transports available');
+ }, 0);
+ return;
+ } else {
+ transport = this.transports[0];
+ }
+ this.readyState = 'opening';
+
+ // Retry with the next transport if the transport is disabled (jsonp: false)
+ var transport;
+ try {
+ transport = this.createTransport(transport);
+ } catch (e) {
+ this.transports.shift();
+ this.open();
+ return;
+ }
+
+ transport.open();
+ this.setTransport(transport);
+ };
+
+ /**
+ * Sets the current transport. Disables the existing one (if any).
+ *
+ * @api private
+ */
+
+ Socket.prototype.setTransport = function(transport){
+ debug('setting transport %s', transport.name);
+ var self = this;
+
+ if (this.transport) {
+ debug('clearing existing transport %s', this.transport.name);
+ this.transport.removeAllListeners();
+ }
+
+ // set up transport
+ this.transport = transport;
+
+ // set up transport listeners
+ transport
+ .on('drain', function(){
+ self.onDrain();
+ })
+ .on('packet', function(packet){
+ self.onPacket(packet);
+ })
+ .on('error', function(e){
+ self.onError(e);
+ })
+ .on('close', function(){
+ self.onClose('transport close');
+ });
+ };
+
+ /**
+ * Probes a transport.
+ *
+ * @param {String} transport name
+ * @api private
+ */
+
+ Socket.prototype.probe = function(name){
+ debug('probing transport "%s"', name);
+ var transport = this.createTransport(name, {probe: 1})
+ , failed = false
+ , self = this;
+
+ Socket.priorWebsocketSuccess = false;
+
+ function onTransportOpen(){
+ if (self.onlyBinaryUpgrades) {
+ var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
+ failed = failed || upgradeLosesBinary;
+ }
+ if (failed) return;
+
+ debug('probe transport "%s" opened', name);
+ transport.send([{type: 'ping', data: 'probe'}]);
+ transport.once('packet', function(msg){
+ if (failed) return;
+ if ('pong' == msg.type && 'probe' == msg.data) {
+ debug('probe transport "%s" pong', name);
+ self.upgrading = true;
+ self.emit('upgrading', transport);
+ if (!transport) return;
+ Socket.priorWebsocketSuccess = 'websocket' == transport.name;
+
+ debug('pausing current transport "%s"', self.transport.name);
+ self.transport.pause(function(){
+ if (failed) return;
+ if ('closed' == self.readyState) return;
+ debug('changing transport and sending upgrade packet');
+
+ cleanup();
+
+ self.setTransport(transport);
+ transport.send([{type: 'upgrade'}]);
+ self.emit('upgrade', transport);
+ transport = null;
+ self.upgrading = false;
+ self.flush();
+ });
+ } else {
+ debug('probe transport "%s" failed', name);
+ var err = new Error('probe error');
+ err.transport = transport.name;
+ self.emit('upgradeError', err);
+ }
+ });
+ }
+
+ function freezeTransport(){
+ if (failed) return;
+
+ // Any callback called by transport should be ignored since now
+ failed = true;
+
+ cleanup();
+
+ transport.close();
+ transport = null;
+ }
+
+ //Handle any error that happens while probing
+ function onerror(err){
+ var error = new Error('probe error: ' + err);
+ error.transport = transport.name;
+
+ freezeTransport();
+
+ debug('probe transport "%s" failed because of error: %s', name, err);
+
+ self.emit('upgradeError', error);
+ }
+
+ function onTransportClose(){
+ onerror("transport closed");
+ }
+
+ //When the socket is closed while we're probing
+ function onclose(){
+ onerror("socket closed");
+ }
+
+ //When the socket is upgraded while we're probing
+ function onupgrade(to){
+ if (transport && to.name != transport.name) {
+ debug('"%s" works - aborting "%s"', to.name, transport.name);
+ freezeTransport();
+ }
+ }
+
+ //Remove all listeners on the transport and on self
+ function cleanup(){
+ transport.removeListener('open', onTransportOpen);
+ transport.removeListener('error', onerror);
+ transport.removeListener('close', onTransportClose);
+ self.removeListener('close', onclose);
+ self.removeListener('upgrading', onupgrade);
+ }
+
+ transport.once('open', onTransportOpen);
+ transport.once('error', onerror);
+ transport.once('close', onTransportClose);
+
+ this.once('close', onclose);
+ this.once('upgrading', onupgrade);
+
+ transport.open();
+
+ };
+
+ /**
+ * Called when connection is deemed open.
+ *
+ * @api public
+ */
+
+ Socket.prototype.onOpen = function(){
+ debug('socket open');
+ this.readyState = 'open';
+ Socket.priorWebsocketSuccess = 'websocket' == this.transport.name;
+ this.emit('open');
+ this.flush();
+
+ // we check for `readyState` in case an `open`
+ // listener already closed the socket
+ if ('open' == this.readyState && this.upgrade && this.transport.pause) {
+ debug('starting upgrade probes');
+ for (var i = 0, l = this.upgrades.length; i < l; i++) {
+ this.probe(this.upgrades[i]);
+ }
+ }
+ };
+
+ /**
+ * Handles a packet.
+ *
+ * @api private
+ */
+
+ Socket.prototype.onPacket = function(packet){
+ if ('opening' == this.readyState || 'open' == this.readyState) {
+ debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
+
+ this.emit('packet', packet);
+
+ // Socket is live - any packet counts
+ this.emit('heartbeat');
+
+ switch (packet.type) {
+ case 'open':
+ this.onHandshake(parsejson(packet.data));
+ break;
+
+ case 'pong':
+ this.setPing();
+ break;
+
+ case 'error':
+ var err = new Error('server error');
+ err.code = packet.data;
+ this.emit('error', err);
+ break;
+
+ case 'message':
+ this.emit('data', packet.data);
+ this.emit('message', packet.data);
+ break;
+ }
+ } else {
+ debug('packet received with socket readyState "%s"', this.readyState);
+ }
+ };
+
+ /**
+ * Called upon handshake completion.
+ *
+ * @param {Object} handshake obj
+ * @api private
+ */
+
+ Socket.prototype.onHandshake = function(data){
+ this.emit('handshake', data);
+ this.id = data.sid;
+ this.transport.query.sid = data.sid;
+ this.upgrades = this.filterUpgrades(data.upgrades);
+ this.pingInterval = data.pingInterval;
+ this.pingTimeout = data.pingTimeout;
+ this.onOpen();
+ // In case open handler closes socket
+ if ('closed' == this.readyState) return;
+ this.setPing();
+
+ // Prolong liveness of socket on heartbeat
+ this.removeListener('heartbeat', this.onHeartbeat);
+ this.on('heartbeat', this.onHeartbeat);
+ };
+
+ /**
+ * Resets ping timeout.
+ *
+ * @api private
+ */
+
+ Socket.prototype.onHeartbeat = function(timeout){
+ clearTimeout(this.pingTimeoutTimer);
+ var self = this;
+ self.pingTimeoutTimer = setTimeout(function(){
+ if ('closed' == self.readyState) return;
+ self.onClose('ping timeout');
+ }, timeout || (self.pingInterval + self.pingTimeout));
+ };
+
+ /**
+ * Pings server every `this.pingInterval` and expects response
+ * within `this.pingTimeout` or closes connection.
+ *
+ * @api private
+ */
+
+ Socket.prototype.setPing = function(){
+ var self = this;
+ clearTimeout(self.pingIntervalTimer);
+ self.pingIntervalTimer = setTimeout(function(){
+ debug('writing ping packet - expecting pong within %sms', self.pingTimeout);
+ self.ping();
+ self.onHeartbeat(self.pingTimeout);
+ }, self.pingInterval);
+ };
+
+ /**
+ * Sends a ping packet.
+ *
+ * @api public
+ */
+
+ Socket.prototype.ping = function(){
+ this.sendPacket('ping');
+ };
+
+ /**
+ * Called on `drain` event
+ *
+ * @api private
+ */
+
+ Socket.prototype.onDrain = function(){
+ for (var i = 0; i < this.prevBufferLen; i++) {
+ if (this.callbackBuffer[i]) {
+ this.callbackBuffer[i]();
+ }
+ }
+
+ this.writeBuffer.splice(0, this.prevBufferLen);
+ this.callbackBuffer.splice(0, this.prevBufferLen);
+
+ // setting prevBufferLen = 0 is very important
+ // for example, when upgrading, upgrade packet is sent over,
+ // and a nonzero prevBufferLen could cause problems on `drain`
+ this.prevBufferLen = 0;
+
+ if (this.writeBuffer.length == 0) {
+ this.emit('drain');
+ } else {
+ this.flush();
+ }
+ };
+
+ /**
+ * Flush write buffers.
+ *
+ * @api private
+ */
+
+ Socket.prototype.flush = function(){
+ if ('closed' != this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length) {
+ debug('flushing %d packets in socket', this.writeBuffer.length);
+ this.transport.send(this.writeBuffer);
+ // keep track of current length of writeBuffer
+ // splice writeBuffer and callbackBuffer on `drain`
+ this.prevBufferLen = this.writeBuffer.length;
+ this.emit('flush');
+ }
+ };
+
+ /**
+ * Sends a message.
+ *
+ * @param {String} message.
+ * @param {Function} callback function.
+ * @return {Socket} for chaining.
+ * @api public
+ */
+
+ Socket.prototype.write =
+ Socket.prototype.send = function(msg, fn){
+ this.sendPacket('message', msg, fn);
+ return this;
+ };
+
+ /**
+ * Sends a packet.
+ *
+ * @param {String} packet type.
+ * @param {String} data.
+ * @param {Function} callback function.
+ * @api private
+ */
+
+ Socket.prototype.sendPacket = function(type, data, fn){
+ if ('closing' == this.readyState || 'closed' == this.readyState) {
+ return;
+ }
+
+ var packet = {type: type, data: data};
+ this.emit('packetCreate', packet);
+ this.writeBuffer.push(packet);
+ this.callbackBuffer.push(fn);
+ this.flush();
+ };
+
+ /**
+ * Closes the connection.
+ *
+ * @api private
+ */
+
+ Socket.prototype.close = function(){
+ if ('opening' == this.readyState || 'open' == this.readyState) {
+ this.readyState = 'closing';
+
+ var self = this;
+
+ function close(){
+ self.onClose('forced close');
+ debug('socket closing - telling transport to close');
+ self.transport.close();
+ }
+
+ function cleanupAndClose(){
+ self.removeListener('upgrade', cleanupAndClose);
+ self.removeListener('upgradeError', cleanupAndClose);
+ close();
+ }
+
+ function waitForUpgrade(){
+ // wait for upgrade to finish since we can't send packets while pausing a transport
+ self.once('upgrade', cleanupAndClose);
+ self.once('upgradeError', cleanupAndClose);
+ }
+
+ if (this.writeBuffer.length) {
+ this.once('drain', function(){
+ if (this.upgrading) {
+ waitForUpgrade();
+ } else {
+ close();
+ }
+ });
+ } else if (this.upgrading) {
+ waitForUpgrade();
+ } else {
+ close();
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Called upon transport error
+ *
+ * @api private
+ */
+
+ Socket.prototype.onError = function(err){
+ debug('socket error %j', err);
+ Socket.priorWebsocketSuccess = false;
+ this.emit('error', err);
+ this.onClose('transport error', err);
+ };
+
+ /**
+ * Called upon transport close.
+ *
+ * @api private
+ */
+
+ Socket.prototype.onClose = function(reason, desc){
+ if ('opening' == this.readyState || 'open' == this.readyState || 'closing' == this.readyState) {
+ debug('socket close with reason: "%s"', reason);
+ var self = this;
+
+ // clear timers
+ clearTimeout(this.pingIntervalTimer);
+ clearTimeout(this.pingTimeoutTimer);
+
+ // clean buffers in next tick, so developers can still
+ // grab the buffers on `close` event
+ setTimeout(function(){
+ self.writeBuffer = [];
+ self.callbackBuffer = [];
+ self.prevBufferLen = 0;
+ }, 0);
+
+ // stop event from firing again for transport
+ this.transport.removeAllListeners('close');
+
+ // ensure transport won't stay open
+ this.transport.close();
+
+ // ignore further transport communication
+ this.transport.removeAllListeners();
+
+ // set ready state
+ this.readyState = 'closed';
+
+ // clear session id
+ this.id = null;
+
+ // emit close event
+ this.emit('close', reason, desc);
+ }
+ };
+
+ /**
+ * Filters upgrades, returning only those matching client transports.
+ *
+ * @param {Array} server upgrades
+ * @api private
+ *
+ */
+
+ Socket.prototype.filterUpgrades = function(upgrades){
+ var filteredUpgrades = [];
+ for (var i = 0, j = upgrades.length; i < j; i++) {
+ if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
+ }
+ return filteredUpgrades;
+ };
+
+ }).call(this, typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+ }, {
+ "./transport" : 13,
+ "./transports" : 14,
+ "component-emitter": 8,
+ "debug" : 9,
+ "engine.io-parser" : 21,
+ "indexof" : 36,
+ "parsejson" : 28,
+ "parseqs" : 29,
+ "parseuri" : 30
+ }],
+ 13: [function(_dereq_, module, exports){
+ /**
+ * Module dependencies.
+ */
+
+ var parser = _dereq_('engine.io-parser');
+ var Emitter = _dereq_('component-emitter');
+
+ /**
+ * Module exports.
+ */
+
+ module.exports = Transport;
+
+ /**
+ * Transport abstract constructor.
+ *
+ * @param {Object} options.
+ * @api private
+ */
+
+ function Transport(opts){
+ this.path = opts.path;
+ this.hostname = opts.hostname;
+ this.port = opts.port;
+ this.secure = opts.secure;
+ this.query = opts.query;
+ this.timestampParam = opts.timestampParam;
+ this.timestampRequests = opts.timestampRequests;
+ this.readyState = '';
+ this.agent = opts.agent || false;
+ this.socket = opts.socket;
+ this.enablesXDR = opts.enablesXDR;
+ }
+
+ /**
+ * Mix in `Emitter`.
+ */
+
+ Emitter(Transport.prototype);
+
+ /**
+ * A counter used to prevent collisions in the timestamps used
+ * for cache busting.
+ */
+
+ Transport.timestamps = 0;
+
+ /**
+ * Emits an error.
+ *
+ * @param {String} str
+ * @return {Transport} for chaining
+ * @api public
+ */
+
+ Transport.prototype.onError = function(msg, desc){
+ var err = new Error(msg);
+ err.type = 'TransportError';
+ err.description = desc;
+ this.emit('error', err);
+ return this;
+ };
+
+ /**
+ * Opens the transport.
+ *
+ * @api public
+ */
+
+ Transport.prototype.open = function(){
+ if ('closed' == this.readyState || '' == this.readyState) {
+ this.readyState = 'opening';
+ this.doOpen();
+ }
+
+ return this;
+ };
+
+ /**
+ * Closes the transport.
+ *
+ * @api private
+ */
+
+ Transport.prototype.close = function(){
+ if ('opening' == this.readyState || 'open' == this.readyState) {
+ this.doClose();
+ this.onClose();
+ }
+
+ return this;
+ };
+
+ /**
+ * Sends multiple packets.
+ *
+ * @param {Array} packets
+ * @api private
+ */
+
+ Transport.prototype.send = function(packets){
+ if ('open' == this.readyState) {
+ this.write(packets);
+ } else {
+ throw new Error('Transport not open');
+ }
+ };
+
+ /**
+ * Called upon open
+ *
+ * @api private
+ */
+
+ Transport.prototype.onOpen = function(){
+ this.readyState = 'open';
+ this.writable = true;
+ this.emit('open');
+ };
+
+ /**
+ * Called with data.
+ *
+ * @param {String} data
+ * @api private
+ */
+
+ Transport.prototype.onData = function(data){
+ var packet = parser.decodePacket(data, this.socket.binaryType);
+ this.onPacket(packet);
+ };
+
+ /**
+ * Called with a decoded packet.
+ */
+
+ Transport.prototype.onPacket = function(packet){
+ this.emit('packet', packet);
+ };
+
+ /**
+ * Called upon close.
+ *
+ * @api private
+ */
+
+ Transport.prototype.onClose = function(){
+ this.readyState = 'closed';
+ this.emit('close');
+ };
+
+ }, {"component-emitter": 8, "engine.io-parser": 21}],
+ 14: [function(_dereq_, module, exports){
+ (function(global){
+ /**
+ * Module dependencies
+ */
+
+ var XMLHttpRequest = _dereq_('xmlhttprequest');
+ var XHR = _dereq_('./polling-xhr');
+ var JSONP = _dereq_('./polling-jsonp');
+ var websocket = _dereq_('./websocket');
+
+ /**
+ * Export transports.
+ */
+
+ exports.polling = polling;
+ exports.websocket = websocket;
+
+ /**
+ * Polling transport polymorphic constructor.
+ * Decides on xhr vs jsonp based on feature detection.
+ *
+ * @api private
+ */
+
+ function polling(opts){
+ var xhr;
+ var xd = false;
+ var xs = false;
+ var jsonp = false !== opts.jsonp;
+
+ if (global.location) {
+ var isSSL = 'https:' == location.protocol;
+ var port = location.port;
+
+ // some user agents have empty `location.port`
+ if (!port) {
+ port = isSSL ? 443 : 80;
+ }
+
+ xd = opts.hostname != location.hostname || port != opts.port;
+ xs = opts.secure != isSSL;
+ }
+
+ opts.xdomain = xd;
+ opts.xscheme = xs;
+ xhr = new XMLHttpRequest(opts);
+
+ if ('open' in xhr && !opts.forceJSONP) {
+ return new XHR(opts);
+ } else {
+ if (!jsonp) throw new Error('JSONP disabled');
+ return new JSONP(opts);
+ }
+ }
+
+ }).call(this, typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+ }, {"./polling-jsonp": 15, "./polling-xhr": 16, "./websocket": 18, "xmlhttprequest": 19}],
+ 15: [function(_dereq_, module, exports){
+ (function(global){
+
+ /**
+ * Module requirements.
+ */
+
+ var Polling = _dereq_('./polling');
+ var inherit = _dereq_('component-inherit');
+
+ /**
+ * Module exports.
+ */
+
+ module.exports = JSONPPolling;
+
+ /**
+ * Cached regular expressions.
+ */
+
+ var rNewline = /\n/g;
+ var rEscapedNewline = /\\n/g;
+
+ /**
+ * Global JSONP callbacks.
+ */
+
+ var callbacks;
+
+ /**
+ * Callbacks count.
+ */
+
+ var index = 0;
+
+ /**
+ * Noop.
+ */
+
+ function empty(){
+ }
+
+ /**
+ * JSONP Polling constructor.
+ *
+ * @param {Object} opts.
+ * @api public
+ */
+
+ function JSONPPolling(opts){
+ Polling.call(this, opts);
+
+ this.query = this.query || {};
+
+ // define global callbacks array if not present
+ // we do this here (lazily) to avoid unneeded global pollution
+ if (!callbacks) {
+ // we need to consider multiple engines in the same page
+ if (!global.___eio) global.___eio = [];
+ callbacks = global.___eio;
+ }
+
+ // callback identifier
+ this.index = callbacks.length;
+
+ // add callback to jsonp global
+ var self = this;
+ callbacks.push(function(msg){
+ self.onData(msg);
+ });
+
+ // append to query string
+ this.query.j = this.index;
+
+ // prevent spurious errors from being emitted when the window is unloaded
+ if (global.document && global.addEventListener) {
+ global.addEventListener('beforeunload', function(){
+ if (self.script) self.script.onerror = empty;
+ });
+ }
+ }
+
+ /**
+ * Inherits from Polling.
+ */
+
+ inherit(JSONPPolling, Polling);
+
+ /*
+ * JSONP only supports binary as base64 encoded strings
+ */
+
+ JSONPPolling.prototype.supportsBinary = false;
+
+ /**
+ * Closes the socket.
+ *
+ * @api private
+ */
+
+ JSONPPolling.prototype.doClose = function(){
+ if (this.script) {
+ this.script.parentNode.removeChild(this.script);
+ this.script = null;
+ }
+
+ if (this.form) {
+ this.form.parentNode.removeChild(this.form);
+ this.form = null;
+ this.iframe = null;
+ }
+
+ Polling.prototype.doClose.call(this);
+ };
+
+ /**
+ * Starts a poll cycle.
+ *
+ * @api private
+ */
+
+ JSONPPolling.prototype.doPoll = function(){
+ var self = this;
+ var script = document.createElement('script');
+
+ if (this.script) {
+ this.script.parentNode.removeChild(this.script);
+ this.script = null;
+ }
+
+ script.async = true;
+ script.src = this.uri();
+ script.onerror = function(e){
+ self.onError('jsonp poll error', e);
+ };
+
+ var insertAt = document.getElementsByTagName('script')[0];
+ insertAt.parentNode.insertBefore(script, insertAt);
+ this.script = script;
+
+ var isUAgecko = 'undefined' != typeof navigator && /gecko/i.test(navigator.userAgent);
+
+ if (isUAgecko) {
+ setTimeout(function(){
+ var iframe = document.createElement('iframe');
+ document.body.appendChild(iframe);
+ document.body.removeChild(iframe);
+ }, 100);
+ }
+ };
+
+ /**
+ * Writes with a hidden iframe.
+ *
+ * @param {String} data to send
+ * @param {Function} called upon flush.
+ * @api private
+ */
+
+ JSONPPolling.prototype.doWrite = function(data, fn){
+ var self = this;
+
+ if (!this.form) {
+ var form = document.createElement('form');
+ var area = document.createElement('textarea');
+ var id = this.iframeId = 'eio_iframe_' + this.index;
+ var iframe;
+
+ form.className = 'socketio';
+ form.style.position = 'absolute';
+ form.style.top = '-1000px';
+ form.style.left = '-1000px';
+ form.target = id;
+ form.method = 'POST';
+ form.setAttribute('accept-charset', 'utf-8');
+ area.name = 'd';
+ form.appendChild(area);
+ document.body.appendChild(form);
+
+ this.form = form;
+ this.area = area;
+ }
+
+ this.form.action = this.uri();
+
+ function complete(){
+ initIframe();
+ fn();
+ }
+
+ function initIframe(){
+ if (self.iframe) {
+ try {
+ self.form.removeChild(self.iframe);
+ } catch (e) {
+ self.onError('jsonp polling iframe removal error', e);
+ }
+ }
+
+ try {
+ // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
+ var html = '