diff --git a/gulpfile.js b/gulpfile.js index 4bc3f41..97e59b4 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -11,9 +11,15 @@ var gulp = require('gulp'), del = require('del'), cleanCSS = require('gulp-clean-css'), uncss = require('gulp-uncss'), - uglify = require('gulp-uglify'), useref = require('gulp-useref'), - neat = require('node-neat').includePaths; + //more + browserify = require('browserify'), + source = require('vinyl-source-stream'), + buffer = require('vinyl-buffer'), + gutil = require('gulp-util'), + uglify = require('gulp-uglify'), + sourcemaps = require('gulp-sourcemaps'), + babel = require('gulp-babel'); gulp.task('browser-sync', function() { browserSync({ @@ -24,32 +30,47 @@ gulp.task('browser-sync', function() { }); }); -gulp.task('styles', function() { - return gulp.src('src/sass/main.scss') + +gulp.task('styles', function () { + return gulp.src('src/scss/main.scss') .pipe(plumber()) - .pipe(sass({ - includePaths: ['styles'].concat(neat) - })) - //.pipe(uncss({ html: '*.html' })) - .pipe(autoprefixer({ browsers: ['last 15 versions', '> 1%', 'ie 9'], cascade: true })) + .pipe(sass()) + .pipe(autoprefixer({ + browsers: ['last 3 versions'], + cascade: false + })) .pipe(gulp.dest('src/css')) .pipe(browserSync.reload({stream: true})); -}); +}) gulp.task('scripts', function() { return gulp.src([ - 'src/libs/jquery/dist/jquery.min.js', - 'src/libs/modernizr/modernizr-custom.js', - 'src/libs/waypoints/waypoints.min.js', 'src/libs/swiper/js/swiper.min.js', ]) .pipe(plumber()) .pipe(concat('libs.min.js')) - //.pipe(uglify()) .pipe(gulp.dest('src/js')); }); -gulp.task('watch', ['styles', 'scripts', 'browser-sync'], function() { +gulp.task('js', function () { + var b = browserify({ + entries: 'src/js/main.js', + debug: false, + }) + return b.bundle() + .pipe(source('app.js')) + .pipe(buffer()) + .pipe(babel({ + presets: ['es2015'] + })) + .pipe(sourcemaps.init()) + .pipe(uglify()) + .on('error', gutil.log) + .pipe(sourcemaps.write('./')) + .pipe(gulp.dest('src/js')) +}) + +gulp.task('watch', ['styles', 'js', 'browser-sync'], function() { gulp.watch('src/sass/**/*.+(sass|scss)', ['styles']); gulp.watch('src/*.html', browserSync.reload); gulp.watch('src/js/**/*.js', browserSync.reload); @@ -62,12 +83,6 @@ gulp.task('clean', function() { gulp.task('images', function() { return gulp.src('src/img/**/*') .pipe(plumber()) - // .pipe(imagemin({ - // interlaced: true, - // progressive: true, - // svgoPlugins: [{removeViewBox: false}], - // use: [pngquant()] - // })) .pipe(gulp.dest('build/img')); }); @@ -81,35 +96,33 @@ gulp.task('dapps', function() { .pipe(gulp.dest('build/dapps')) }); -gulp.task('build', ['clean', 'styles', 'scripts', 'images', 'demo', 'dapps'], function() { +gulp.task('build', ['clean', 'styles', 'js', 'images', 'demo', 'dapps'], function() { gulp.src([ - 'src/css/main.css' + 'src/css/main.css' ]) - //.pipe(uncss({ html: '*.html' })) - .pipe(cleanCSS({compatibility: 'ie9'})) - .pipe(rename({suffix: '.min'})) - .pipe(gulp.dest('build/css')); + .pipe(cleanCSS({compatibility: 'ie9'})) + .pipe(rename({suffix: '.min'})) + .pipe(gulp.dest('build/css')); - // gulp.src('src/fonts/**/*') - // .pipe(gulp.dest('build/fonts')) - - gulp.src([ - 'src/js/libs.min.js', - 'src/js/common.js' - ]) - .pipe(concat('main.min.js')) - .pipe(uglify()) - .pipe(gulp.dest('build/js')); + gulp.src([ + 'src/js/app.js', + 'src/js/mc-validate.js' + ]) + .pipe(uglify()) + .pipe(concat('app.min.js')) + .pipe(gulp.dest('build/js')); gulp.src('src/*.html') - .pipe(useref({noAssets:true})) - .pipe(gulp.dest('build')); + .pipe(useref({noAssets:true})) + .pipe(gulp.dest('build')); + + gulp.src('src/fonts/**/*') + .pipe(gulp.dest('build/fonts')); gulp.src('src/*.php') - .pipe(useref({noAssets:true})) - .pipe(gulp.dest('build')); - + .pipe(useref({noAssets:true})) + .pipe(gulp.dest('build')); }); gulp.task('default', ['watch']); diff --git a/package.json b/package.json index 7b2f81f..f974d6b 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "Project Description", "devDependencies": { "browser-sync": "^2.11.1", + "del": "^2.2.0", "gulp": "^3.9.1", "gulp-autoprefixer": "^3.1.0", @@ -17,12 +18,26 @@ "gulp-uglify": "^1.5.3", "gulp-uncss": "^1.0.5", "gulp-useref": "^3.0.8", - "imagemin-pngquant": "^4.2.2" + "imagemin-pngquant": "^4.2.2", + "browserify": "^13.1.1", + "gulp-babel": "^6.1.2", + "babel-preset-es2015": "^6.14.0", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0", + "gulp-util": "^3.0.7", + "gulp-sourcemaps": "^1.6.0" }, "dependencies": { "bourbon": "^4.2.7", "bourbon-neat": "^1.7.4", "node-neat": "^1.7.2", - "normalize.css": "^4.0.0" + "normalize.css": "^4.0.0", + "d3-ease": "^1.0.1", + "d3-scale": "^1.0.3", + "lodash.assign": "^4.2.0", + "lodash.clone": "^4.0.1", + "lodash.foreach": "^4.0.0", + "lodash.isempty": "^4.0.0", + "lodash.isequal": "^4.0.0" } } diff --git a/src/css/main.css b/src/css/main.css index da3eefd..edc2950 100644 --- a/src/css/main.css +++ b/src/css/main.css @@ -1,2155 +1,1757 @@ -/* Import SASS Files */ -html { - -webkit-box-sizing: border-box; - box-sizing: border-box; } - -*, *::after, *::before { - -webkit-box-sizing: inherit; - box-sizing: inherit; } - -/* Put All Variables Here */ -/* Put All Fonts Here */ -section { - overflow: hidden; - min-height: 680px; - max-height: 855px; - width: 100%; - height: 86vh; - border-bottom: 1px solid #dde2e6; - background: -webkit-gradient(linear, left top, left bottom, from(#F5F7F9), to(#EEF2F5)); - background: -webkit-linear-gradient(top, #F5F7F9 0%, #EEF2F5 100%); - background: linear-gradient(-180deg, #F5F7F9 0%, #EEF2F5 100%); } - -.section-header { - position: relative; - display: table; - max-height: 1000px; - height: 100vh; - background: -webkit-gradient(linear, left top, left bottom, from(#EEF2F5), to(#F5F7F9)); - background: -webkit-linear-gradient(top, #EEF2F5 0%, #F5F7F9 100%); - background: linear-gradient(-180deg, #EEF2F5 0%, #F5F7F9 100%); } - .section-header .table-center { - border-bottom: 1px solid #dde2e6; } - -.container { - max-width: 1440px; - margin-left: auto; - margin-right: auto; } - .container::after { - clear: both; - content: ""; - display: table; } - -.wrapper { - margin: 0 auto; - max-width: 960px; } - -.logo-wrapper { - position: relative; - float: left; - width: 50px; - height: 50px; - -webkit-animation-delay: 1s; - animation-delay: 1s; } - -.main-logo { - position: absolute; - top: 0; - left: 0; - z-index: 10; - float: left; - margin-top: 20px; - width: 86px; - height: 77px; } - -.logo-shadow { - position: absolute; - top: 4px; - left: -10px; - z-index: 8; - width: 73px; - height: 73px; - background-image: url("../img/logo-shadow.png"); - background-position: center; - background-size: 73px; - background-repeat: no-repeat; } - -.main-navigation { - float: right; - margin-top: 30px; - -webkit-animation-delay: .8s; - animation-delay: .8s; } - .main-navigation li { - display: inline-block; - margin-left: 50px; } - .main-navigation li a { - color: #808591; - text-decoration: none; } - .main-navigation li a:hover { - color: #2ba6e9; } - -.main-header { - position: absolute; - margin: 0 auto; - width: 100%; - opacity: 0; - -webkit-transition: opacity .6s ease, -webkit-transform .6s ease; - transition: opacity .6s ease, -webkit-transform .6s ease; - transition: transform .6s ease, opacity .6s ease; - transition: transform .6s ease, opacity .6s ease, -webkit-transform .6s ease; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); } - -.status { - text-align: center; } - -.status-text { - -webkit-box-sizing: border-box; - box-sizing: border-box; - margin-top: 120px; - width: 360px; - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); } - .status-text p { - margin-top: 12px; - color: #808591; } - .status-text h1 { - margin: 0; - color: #515c71; - font-weight: 400; - font-size: 22px; - line-height: 33px; } - -.phone { - float: left; - display: block; - margin-right: 2.35765%; - width: 48.82117%; } - .phone:last-child { - margin-right: 0; } - -.phone-image { - position: relative; - z-index: 12; - display: block; - float: right; - width: 275px; - height: 562px; - background-image: url("../img/phone_new.svg"); - background-position: top; - background-size: 275px; - background-repeat: no-repeat; } - -.phone-inner-image { - position: absolute; - top: 61px; - left: 12px; - width: 252px; - height: 449px; - border: 1px solid #d2d7db; - -webkit-border-radius: 2px; - border-radius: 2px; - background-image: url("../img/multi6.png"); - background-position: top; - background-size: cover; - background-repeat: no-repeat; } - -h2 { - color: #5e626b; - font-weight: 400; - line-height: 35px; } - -p { - margin: 0; - color: #5e626b; - line-height: 24px; } - -.status-email { - width: 360px; - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); } - -.gradient-email { - width: 360px; - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); } - .gradient-email .email { - width: 240px; - height: auto; } - -input[type=email], input.input-email { - padding: 15px; - padding-right: 45px; - width: 100%; - height: 100%; - border: 0; - -webkit-border-radius: 8px; - border-radius: 8px; - background-color: #fff; - font-size: 14px; } - -input.input-email { - text-align: center; } - -.email { - position: relative; - margin: 0 auto; - margin-top: 30px; - width: auto; - height: auto; } - -.mc_email { - width: 360px; } - -.mc_email input[type=email] { - width: 240px; } - -.email-button { - position: absolute; - top: 6px; - right: 6px; - display: block; - width: 34px; - height: 34px; - border: none; - -webkit-border-radius: 50%; - border-radius: 50%; - background-color: rgba(182, 116, 241, 0.2); - background-image: url("../img/arrow.svg"); - background-position: center; - background-size: 24px; - background-repeat: no-repeat; - text-indent: -10000px; - cursor: pointer; } - -#mc-embedded-subscribe-form .email-button { - right: 66px; } - -#mc-embedded-subscribe-form .new-button { - position: absolute; - top: 0; - right: 15px; - padding: 15px 10px; - border: 0; - -webkit-border-radius: 8px; - border-radius: 8px; - background-color: #68c0f8; - color: #fff; - text-transform: uppercase; - cursor: pointer; } - #mc-embedded-subscribe-form .new-button:hover { - opacity: .8; } - -#mc-embedded-subscribe-form .new-input { - float: left; - margin-left: 15px; - padding: 15px; - width: 190px; } - -.mc-field-group { - overflow: hidden; } - -button.gradient-button { - display: block; - margin: 20px auto; - width: 34px; - height: 34px; - border: none; - -webkit-border-radius: 50%; - border-radius: 50%; - background-color: #fff; - background-image: url("../img/arrow.svg"); - background-position: center; - background-size: 24px; - background-repeat: no-repeat; - text-indent: -10000px; - cursor: pointer; } - -.section-heading { - margin: 0 auto; - margin-top: 80px; - text-align: center; } - .section-heading h2 { - color: #515c71; - font-size: 24px; } - -.section-text { - margin: 0 auto; - width: 360px; - height: 96px; - text-align: center; } - .section-text p { - color: #808591; - line-height: 24px; } - -.section-blocks { - margin: 10% auto; - max-width: 1160px; - vertical-align: middle; } - -.block, -.mobile-block { - display: inline-block; - padding: 30px; - width: 360px; - height: 220px; - -webkit-border-radius: 8px; - border-radius: 8px; - background-color: #fff; - vertical-align: top; - text-align: left; } - .block h3, - .mobile-block h3 { - margin: 0; - margin-top: 20px; - padding: 0; - color: #515c71; - font-weight: normal; - font-size: 16px; } - .block h4, - .mobile-block h4 { - margin-bottom: 0; } - .block p, - .mobile-block p { - margin-top: 10px; - color: #808591; - font-size: 14px; - line-height: 24px; } - -.block-white { - padding: 33px 50px; - border-right: 1px solid #dde2e6; - -webkit-border-radius: 0; - border-radius: 0; } - .block-white:last-child { - border-right: none; } - -.block1-icon { - width: 30px; - height: 30px; - background-image: url("../img/icon-key.svg"); - background-size: 30px; } - -.block2-icon { - width: 30px; - height: 30px; - background-image: url("../img/icon-wand.svg"); - background-size: 30px; } - -.block3-icon { - width: 30px; - height: 30px; - background-image: url("../img/icon-stablecoin.svg"); - background-size: 30px; } - -.section-white { - background: #fff; } - -.section-wrapper { - margin: 0 auto; - width: 1160px; } - -.section-text-column { - padding-left: 40px; - width: 360px; - text-align: center; } - .section-text-column h2 { - margin: 0; - margin-bottom: 20px; - padding: 0; - color: #515c71; - font-size: 22px; - line-height: 32px; } - .section-text-column p { - color: #808591; - font-size: 14px; - line-height: 24px; } - -.mobile-section-text { - display: none; - margin: 40px auto; - width: 360px; - text-align: center; } - .mobile-section-text h2 { - margin: 0; - margin-bottom: 20px; - padding: 0; - color: #515c71; - font-size: 22px; - line-height: 32px; } - .mobile-section-text p { - color: #808591; - font-size: 14px; - line-height: 24px; } - -.block-blue { - margin-right: 35px; - margin-bottom: 40px; - min-height: 228px; - width: 360px; - background-color: rgba(112, 153, 230, 0.2); - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); } - .block-blue h4 { - color: #586377; - font-weight: 500; - font-size: 14px; } - .block-blue p { - color: #515c71; - opacity: .6; } - -.block-blue-icon { - width: 30px; - height: 30px; - background-image: url("../img/icon-eye.svg"); - background-size: 30px; } - -.block-purple { - margin-bottom: 40px; - min-height: 228px; - width: 360px; - background-color: rgba(161, 135, 213, 0.2); - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); - -webkit-animation-delay: .2s; - animation-delay: .2s; } - .block-purple h4 { - color: #706584; - font-weight: 500; - font-size: 14px; } - .block-purple p { - color: #4f4564; - line-height: 24px; - opacity: .6; } - -.block-purple-icon { - width: 30px; - height: 30px; - background-image: url("../img/icon-decentralized.svg"); - background-size: 30px; } - -.block-green { - margin-right: 35px; - min-height: 228px; - width: 360px; - background-color: rgba(95, 196, 141, 0.2); - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); - -webkit-animation-delay: .3s; - animation-delay: .3s; } - .block-green h4 { - color: #586377; - font-weight: 500; - font-size: 14px; } - .block-green p { - color: #395144; - line-height: 24px; - opacity: .6; } - -.block-green-icon { - width: 30px; - height: 30px; - background-image: url("../img/icon-lock-green.svg"); - background-size: 30px; } - -.block-peach { - min-height: 228px; - width: 360px; - background-color: #fae6e4; - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); - -webkit-animation-delay: .4s; - animation-delay: .4s; } - .block-peach h4 { - color: #715856; - font-weight: 500; - font-size: 14px; } - .block-peach p { - color: #684441; - line-height: 24px; - opacity: .6; } - -.block-peach-icon { - width: 30px; - height: 30px; - background-image: url("../img/icon-etherium.svg"); - background-size: 30px; } - -.one-half, .two-half { - margin-top: 10%; - float: left; - display: block; - margin-right: 2.35765%; - width: 48.82117%; } - .one-half:last-child, .two-half:last-child { - margin-right: 0; } - -.no-float { - float: none; } - -.section-heading-odd { - float: none; - margin: 0 auto; - margin-left: 50px; - width: 360px; - vertical-align: middle; - text-align: center; } - .section-heading-odd h2 { - margin: 0; - margin-top: 60px; - color: #515c71; - font-weight: 400; - font-size: 22px; - line-height: 35px; } - .section-heading-odd p { - margin-top: 20px; - color: #808591; - font-weight: 400; - font-size: 14px; - line-height: 24px; } - -.tags { - position: relative; - margin-top: 60px; - width: 445px; - height: 245px; } - -.tag { - position: absolute; - padding: 12px; - -webkit-border-radius: 14px; - border-radius: 14px; - background-color: #fff; } - .tag p { - margin-top: 8px; - color: #212121; - text-align: left; - font-size: 14px; - line-height: 1.4; } - -.tag-status { - position: absolute; - top: 20px; - left: -40px; - width: 102px; - height: 74px; - opacity: 0; - -webkit-transition: all .6s ease; - transition: all .6s ease; - -webkit-transform: translate3d(-20px, -10px, 0) scale(1.1); - transform: translate3d(-20px, -10px, 0) scale(1.1); } - -.setstatus-pink { - width: 78px; - height: 24px; - -webkit-border-radius: 50px; - border-radius: 50px; - background-color: #d975cc; } - .setstatus-pink span { - color: #fff; - text-align: left; - font-weight: 400; - font-size: 12px; } - -.tag-transaction { - position: absolute; - top: 0; - left: 90px; - width: 127px; - height: 96px; - opacity: 0; - -webkit-transition: all .6s ease; - transition: all .6s ease; - -webkit-transform: translate3d(0, -20px, 0) scale(1.1); - transform: translate3d(0, -20px, 0) scale(1.1); } - .tag-transaction p { - color: #212121; - font-weight: 200; - font-size: 34px; } - .tag-transaction p span { - color: #BFC2C8; - letter-spacing: 1px; - font-weight: 400; - font-size: 16px; } - -.transaction-green { - width: 87px; - height: 24px; - -webkit-border-radius: 50px; - border-radius: 50px; - background: #5fc48d; } - .transaction-green span { - color: #fff; - text-align: left; - font-weight: 400; - font-size: 12px; } - -.tag-name { - position: absolute; - top: 20px; - left: 250px; - width: 95px; - height: 74px; - opacity: 0; - -webkit-transition: all .6s ease; - transition: all .6s ease; - -webkit-transform: translate3d(20px, -10px, 0) scale(1.1); - transform: translate3d(20px, -10px, 0) scale(1.1); } - .tag-name p { - font-size: 14px; } - -.name-brown { - width: 57px; - height: 24px; - -webkit-border-radius: 50px; - border-radius: 50px; - background: #dd847d; } - .name-brown span { - color: #fff; - text-align: left; - font-weight: 400; - font-size: 12px; } - -.tag-password { - position: absolute; - top: 125px; - left: -20px; - width: 175px; - height: 74px; - opacity: 0; - -webkit-transition: all .6s ease; - transition: all .6s ease; - -webkit-transform: translate3d(-10px, 20px, 0) scale(1.1); - transform: translate3d(-10px, 20px, 0) scale(1.1); } - .tag-password p { - font-weight: 400; - font-size: 14px; } - .tag-password .icon-lock { - position: absolute; - top: 16px; - right: 12px; - width: 16px; - height: 16px; - background-image: url("../img/icon-lock-gray.svg"); - background-size: 16px; } - -.password-blue { - width: 119px; - height: 24px; - -webkit-border-radius: 50px; - border-radius: 50px; - background: #7099e6; } - .password-blue span { - color: #fff; - text-align: left; - font-weight: 400; - font-size: 12px; } - -.tag-location { - position: absolute; - top: 125px; - left: 180px; - width: 220px; - height: 120px; - opacity: 0; - -webkit-transition: all .6s ease; - transition: all .6s ease; - -webkit-transform: translate3d(10px, 20px, 0) scale(1.1); - transform: translate3d(10px, 20px, 0) scale(1.1); } - .tag-location p { - font-size: 14px; } - -.location-purple { - width: 70px; - height: 24px; - -webkit-border-radius: 50px; - border-radius: 50px; - background: #a187d5; } - .location-purple span { - color: #fff; - text-align: left; - font-weight: 400; - font-size: 12px; } - -.location-map { - float: right; - margin-top: -55px; - width: 60px; - height: 60px; - -webkit-border-radius: 14px; - border-radius: 14px; - background-color: #ddd; - background-image: url("../img/map.png"); - background-position: center; - background-size: cover; - background-repeat: no-repeat; } - -.section-heading-even { - margin: 0 auto; - width: 360px; - text-align: center; } - .section-heading-even h2 { - margin: 0; - margin-top: 60px; - color: #515c71; - font-weight: 400; - font-size: 22px; - line-height: 32px; } - .section-heading-even p { - margin-top: 10px; - color: #808591; - font-weight: 400; - font-size: 14px; - line-height: 24px; } - .section-heading-even p.statuses { - position: absolute; - left: 65%; - margin-top: 30px; } - @media only screen and (max-width: 768px) { - .section-heading-even p.statuses { - position: static; } } - -.block-square { - display: inline-block; - margin-top: 60px; - margin-right: 36px; - padding: 25px 20px; - width: 160px; - height: 210px; - -webkit-border-radius: 4px; - border-radius: 4px; - background-color: #fff; - vertical-align: top; - text-align: center; - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(-40px, 0, 0) scale(1); - transform: translate3d(-40px, 0, 0) scale(1); } - .block-square:first-child { - -webkit-transition-delay: 0; - transition-delay: 0; } - .block-square:nth-child(2) { - -webkit-transition-delay: .120s; - transition-delay: .120s; } - .block-square:last-child { - margin-right: 0; - -webkit-transition-delay: .240s; - transition-delay: .240s; } - .block-square h3 { - margin-top: 10px; - margin-bottom: 0; - color: #515c71; - font-weight: 500; - font-size: 14px; } - .block-square p { - margin-top: 6px; - color: #808591; - font-size: 12px; - line-height: 18px; } - -.mobile-block-square { - display: inline-block; - margin-top: 30px; - padding: 25px 20px; - width: 160px; - height: 210px; - -webkit-border-radius: 4px; - border-radius: 4px; - background-color: #fff; - vertical-align: top; - text-align: center; } - .mobile-block-square h3 { - margin-top: 10px; - margin-bottom: 0; - color: #515c71; - font-weight: 500; - font-size: 14px; } - .mobile-block-square p { - margin-top: 6px; - color: #808591; - font-size: 12px; - line-height: 18px; } - -.shown .block-square { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0) scale(1); - transform: translate3d(0, 0, 0) scale(1); } - -.two-third { - margin-top: 10%; - text-align: center; - float: left; - display: block; - margin-right: 2.35765%; - width: 65.88078%; } - .two-third:last-child { - margin-right: 0; } - -.one-third { - margin-top: 10%; - float: left; - display: block; - margin-right: 2.35765%; - width: 31.76157%; } - .one-third:last-child { - margin-right: 0; } - -.card-avatar { - position: relative; - margin: 0 auto; - width: 50px; - height: 50px; - -webkit-border-radius: 50%; - border-radius: 50%; - background-color: #f5f7f9; - background-position: center; - background-size: cover; - background-repeat: no-repeat; - text-align: center; } - -.card-avatar::after { - position: absolute; - right: -4px; - bottom: -4px; - width: 23px; - height: 23px; - background-image: url("../img/badge.png"); - background-position: center; - background-size: 23px; - background-repeat: no-repeat; - content: ""; } - -.avatar-wallet { - background-image: url("../img/avatar1.png"); } - -.avatar-etherwall { - background-image: url("../img/avatar2.png"); } - -.avatar-etheroll { - background-image: url("../img/avatar3.png"); } - -.cirlce-blue { - position: absolute; - top: 55%; - left: 55%; - overflow: visible; - width: 25px; - height: 25px; - border: 3px solid #fff; - -webkit-border-radius: 50%; - border-radius: 50%; - background-color: #729be3; - text-align: center; } - -.white-dot { - display: inline-block; - margin-top: -5px; - width: 5px; - height: 5px; - -webkit-border-radius: 50%; - border-radius: 50%; - background-color: #fff; - vertical-align: middle; - text-align: center; } - -.section-gradient { - margin: 0 auto; - background: -webkit-linear-gradient(74deg, #b674f1 52%, #6b93e7 86%, #2babee 100%); - background: linear-gradient(16deg, #b674f1 52%, #6b93e7 86%, #2babee 100%); - background-position: center; - background-repeat: no-repeat; - text-align: center; } - .section-gradient .table-wrapper { - height: auto; } - .section-gradient h2 { - margin: 0; - color: #fff; - font-weight: 400; - font-size: 22px; - line-height: 32px; } - .section-gradient .section-gradient-text { - margin-top: 12px; - width: 360px; } - .section-gradient .section-gradient-text p { - color: #fff; - font-weight: 400; - font-size: 14px; - line-height: 24px; } - -.gradient-text { - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); } - -.section-email { - position: relative; - margin: 0 auto; - margin-top: 40px; - width: 240px; - height: 46px; } - -footer { - height: 320px; - background-color: #fff; } - -.footer-wrapper { - margin: 0 auto; - width: 600px; - text-align: center; } - -.footer-half { - margin: 46px auto; - padding: 50px 30px; - text-align: center; - float: left; - display: block; - margin-right: 2.35765%; - width: 48.82117%; } - .footer-half:last-child { - margin-right: 0; } - .footer-half p { - color: #808591; - font-size: 14px; - line-height: 24px; } - -.footer-icons-social { - margin-top: 25px; } - .footer-icons-social a { - margin-right: 20px; } - .footer-icons-social a:last-child { - margin-right: 0; } - -.footer-icon { - display: inline-block; - width: 30px; - height: 30px; - -webkit-border-radius: 50%; - border-radius: 50%; - background-color: #9A9EA7; - background-position: center; - background-size: 18px; - background-repeat: no-repeat; - -webkit-transition: background-color .1s linear; - transition: background-color .1s linear; } - .footer-icon:hover { - background-color: #2ba6e9; } - -.icon-github { - background-image: url("../img/icon-github.svg"); } - -.icon-email { - background-image: url("../img/icon-email.svg"); } - -.icon-twitter { - background-image: url("../img/icon-twitter.svg"); } - -.icon-facebook { - background-image: url("../img/icon-fb.svg"); } - -.icon-email { - background-image: url("../img/icon-email.svg"); } - -.footer-logo { - display: block; - margin: 0 auto; - margin-top: 17px; - width: 43px; - height: 39px; - background-image: url("../img/logo-gray.svg"); - background-position: center; - background-size: 43px; - background-repeat: no-repeat; } - -.footer-logo-mobile { - display: none; - margin: 0 auto; - margin-bottom: 40px; - width: 43px; - height: 39px; - background-image: url("../img/logo-gray.svg"); - background-position: center; - background-size: 43px; - background-repeat: no-repeat; } - -.footer-links { - margin-top: 40px; } - .footer-links a { - margin-right: 40px; - color: #808591; - text-decoration: none; - font-size: 14px; } - .footer-links a:last-child { - margin-right: 0; } - .footer-links a:hover { - color: #2ba6e9; } - -.section-table { - display: table; - width: 100%; - height: 86vh; } - -.table-center { - display: table-cell; - vertical-align: middle; } - -.table-wrapper { - position: relative; - display: table; - margin: 0 auto; - max-width: 960px; - height: 100%; } - -.table-container { - display: table; - margin: 0 auto; - max-width: 1160px; } - -.table-left, .table-right { - display: table-cell; - vertical-align: middle; } - -.table-left { - width: 560px; } - -.table-right { - width: 400px; } - -.table-two-third { - display: table-cell; - width: 760px; - vertical-align: middle; } - -.table-one-third { - display: table-cell; - width: 400px; - vertical-align: middle; } - -.phone-odd { - position: relative; - top: 73px; - float: right; } - -.header-wrapper { - position: relative; - z-index: 1; - display: table; - overflow: hidden; - margin: 0 auto; - max-width: 960px; - height: 100%; } - -.table-bottom { - vertical-align: bottom; } - -.phone-header { - position: relative; - top: 95px; } - -.phone-secondary { - position: absolute; - top: 40px; - right: 190px; - z-index: 10; - overflow: hidden; - background-image: url("../img/phone_new_ios.svg"); } - -.phone-secondary-image { - background-image: url("../img/discover.png"); } - -.phone-big { - width: 324px; - height: 664px; - background-image: url("../img/phone_big.svg"); - background-size: 324px; } - -.phone-big-image { - width: 299px; - height: 532px; - background-image: url("../img/chat.png"); } - -.phone-big-image-2 { - width: 299px; - height: 532px; - background-image: url("../img/browse.png"); } - -.phone-big-image-3 { - width: 299px; - height: 532px; - background-image: url("../img/discover.png"); } - -.phone-even { - position: relative; - top: 73px; } - -.phone-primary, -.phone-secondary { - opacity: 0; - -webkit-transition: opacity .4s ease, -webkit-transform .4s ease; - transition: opacity .4s ease, -webkit-transform .4s ease; - transition: transform .4s ease, opacity .4s ease; - transition: transform .4s ease, opacity .4s ease, -webkit-transform .4s ease; - -webkit-transform: translate3d(0, 60px, 0); - transform: translate3d(0, 60px, 0); } - -.shown { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0) scale(1); - transform: translate3d(0, 0, 0) scale(1); } - -.table-row { - z-index: 99; - display: table-row; - overflow: visible; - max-width: 1160px; - height: 220px; - border-top: 1px solid black; - background-color: #fff; - text-align: center; } - -@-webkit-keyframes shakeIt { - 0%, 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); } - 20%, 60% { - -webkit-transform: translate3d(-4px, 0, 0); - transform: translate3d(-4px, 0, 0); } - 40%, 80% { - -webkit-transform: translate3d(4px, 0, 0); - transform: translate3d(4px, 0, 0); } } - -@keyframes shakeIt { - 0%, 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); } - 20%, 60% { - -webkit-transform: translate3d(-4px, 0, 0); - transform: translate3d(-4px, 0, 0); } - 40%, 80% { - -webkit-transform: translate3d(4px, 0, 0); - transform: translate3d(4px, 0, 0); } } - -@-webkit-keyframes focuseIt { - 0%, 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); } - 50% { - -webkit-transform: scale(1.03); - transform: scale(1.03); } } - -@keyframes focuseIt { - 0%, 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); } - 50% { - -webkit-transform: scale(1.03); - transform: scale(1.03); } } - -.shaky { - -webkit-animation-name: shakeIt; - animation-name: shakeIt; - -webkit-animation-duration: .6s; - animation-duration: .6s; - -webkit-animation-timing-function: ease; - animation-timing-function: ease; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; } - -.focused { - -webkit-animation-name: focuseIt; - animation-name: focuseIt; - -webkit-animation-duration: .4s; - animation-duration: .4s; - -webkit-animation-timing-function: ease; - animation-timing-function: ease; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; } - -@-webkit-keyframes pulse { - from { - -webkit-transform: scale(1) rotate(-90deg); - transform: scale(1) rotate(-90deg); } - 50% { - -webkit-transform: scale(1.2) rotate(-90deg); - transform: scale(1.2) rotate(-90deg); } - to { - -webkit-transform: scale(1) rotate(-90deg); - transform: scale(1) rotate(-90deg); } } - -@keyframes pulse { - from { - -webkit-transform: scale(1) rotate(-90deg); - transform: scale(1) rotate(-90deg); } - 50% { - -webkit-transform: scale(1.2) rotate(-90deg); - transform: scale(1.2) rotate(-90deg); } - to { - -webkit-transform: scale(1) rotate(-90deg); - transform: scale(1) rotate(-90deg); } } - -.pulse { - -webkit-animation-name: pulse; - animation-name: pulse; - -webkit-animation-duration: 2s; - animation-duration: 2s; - -webkit-animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1); - animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1); - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; } - -.hashtag { - color: #7099e6; } - -.section-row { - display: none; } - -.hide { - display: none; } - -.show { - display: block; } - -#maitre-widget-container div[data-maitre-field-submit] { - position: relative; } - -#maitre-widget-container input { - position: relative; - margin: 0 auto; - margin-bottom: 20px; - padding: 15px; - padding-right: 45px; - width: 270px; - height: 46px; - border: 0; - -webkit-border-radius: 8px; - border-radius: 8px; - background-color: #fff; - font-size: 14px; } - -#maitre-widget-container button { - position: absolute; - top: -60px; - right: 56px; - display: block; - width: 34px; - height: 34px; - border: none; - -webkit-border-radius: 50%; - border-radius: 50%; - background-color: rgba(182, 116, 241, 0.2); - background-image: url("../img/arrow.svg"); - background-position: center; - background-size: 24px; - background-repeat: no-repeat; - text-indent: -10000px; - cursor: pointer; } - @media (max-width: 320px) { - #maitre-widget-container button { - right: 36px; } } - -#maitre-widget-container div[data-maitre-content] { - display: none; } - #maitre-widget-container div[data-maitre-content].show { - display: block; } - -#maitre-widget-container a[data-maitre-status] { - display: none; } - -a.maitre-widget-social { - position: relative !important; - display: inline-block !important; - margin-right: 5px !important; - width: 55px !important; - height: 55px !important; - background-position: center center !important; - background-size: 100% 100%; - background-repeat: no-repeat !important; } - -#maitre-content { - position: relative; - margin-top: -120px; - width: 440px; } - #maitre-content h2 { - margin: 0 0 10px; - font-size: 22px; } - #maitre-content p[data-maitre-verification] { - color: #808591; - font-size: 14px; } - #maitre-content p[data-maitre-verification] strong { - font-weight: 500; } - #maitre-content h4[data-maitre-people-ahead-number] { - position: absolute; - top: 40%; - left: 20%; - margin: 0; - color: #7099e6; - font-weight: 400; - font-size: 2.5em; } - #maitre-content p[data-maitre-people-ahead-text] { - position: absolute; - top: 55%; - left: 14%; - color: #7099e6; - font-weight: 400; - font-size: 1.1em; } - #maitre-content h4[data-maitre-people-behind-number] { - position: absolute; - top: 40%; - left: 59%; - margin: 0; - color: #a784db; - font-weight: 400; - font-size: 2.5em; } - #maitre-content p[data-maitre-people-behind-text] { - position: absolute; - top: 55%; - left: 55%; - color: #a784db; - font-weight: 400; - font-size: 1.1em; } - #maitre-content p[data-maitre-instructions] { - margin-top: 12px; - color: #808591; } - #maitre-content div[data-maitre-share-container] { - padding-top: 50px; } - -#maitre-share-container { - position: relative; - top: 50px; } - #maitre-share-container a.maitre-widget-social { - display: inline-block; - margin-right: 20px !important; - width: 30px !important; - height: 30px !important; - -webkit-border-radius: 50%; - border-radius: 50%; - background-color: #9A9EA7; - background-position: center; - background-size: 18px; - background-repeat: no-repeat; - -webkit-transition: background-color .1s linear; - transition: background-color .1s linear; } - #maitre-share-container a.maitre-widget-social:hover { - background-color: #2ba6e9; } - #maitre-share-container #maitre-share-plain-url { - margin: 20px auto; - padding: 10px; - width: 320px; - -webkit-border-radius: 8px; - border-radius: 8px; - background-color: #fff; } - #maitre-share-container #maitre-social-plain { - display: none !important; } - #maitre-share-container #maitre-social-email { - margin-right: 0 !important; } - #maitre-share-container #maitre-share-plain-explanation { - color: #808591; - font-size: 14px; } - #maitre-share-container #maitre-social-facebook { - background-image: url("../img/icon-fb.svg"); } - #maitre-share-container #maitre-social-twitter { - background-image: url("../img/icon-twitter.svg"); } - #maitre-share-container #maitre-social-email { - background-image: url("../img/icon-email.svg"); } - #maitre-share-container #maitre-social-whatsapp { - display: none !important; } - -#maitre-resend-email { - display: none !important; } - -.gradient-text #maitre-content h4[data-maitre-people-behind-number], -.gradient-text #maitre-content p[data-maitre-people-behind-text] { - color: #67449b; } - -.gradient-text #maitre-content p[data-maitre-verification] { - color: #fff; } - -.gradient-text #maitre-content h4[data-maitre-people-ahead-number], -.gradient-text #maitre-content p[data-maitre-people-ahead-text] { - color: #bde6ff; } - -.gradient-text #maitre-content .footer-icon { - background-color: #2ba6e9; - opacity: .7; } - .gradient-text #maitre-content .footer-icon:hover { - opacity: 1; } - -@media only screen and (min-width: 768px) { - #maitre-widget-container a.show-mobile { - display: none !important; } } - -.popup { - position: relative; - margin: 0 auto; - padding: 20px; - max-width: 500px; - width: auto; - background: #FFF; - text-align: center; } - -.popup.medium { - max-width: 600px; } - -.footer-icons-social iframe { - margin-right: 5px; } - -div.mce_inline_error, #mce-error-response { - clear: both; - padding-top: 10px; - color: #e85c41; } - -/* Import Libs SASS/CSS */ -/** - * Swiper 3.3.1 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * - * http://www.idangero.us/swiper/ - * - * Copyright 2016, Vladimir Kharlampidi - * The iDangero.us - * http://www.idangero.us/ - * - * Licensed under MIT - * - * Released on: February 7, 2016 - */ -.swiper-container { - margin: 0 auto; - position: relative; - overflow: hidden; - z-index: 1; } - -.swiper-container-no-flexbox .swiper-slide { - float: left; } - -.swiper-container-vertical > .swiper-wrapper { - -webkit-box-orient: vertical; - -ms-flex-direction: column; - -webkit-flex-direction: column; - flex-direction: column; } - -.swiper-wrapper { - position: relative; - width: 100%; - height: 100%; - z-index: 1; - display: -webkit-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-transition-property: -webkit-transform; - transition-property: -webkit-transform; - transition-property: transform; - transition-property: transform, -webkit-transform; - -webkit-box-sizing: content-box; - box-sizing: content-box; } - -.swiper-container-android .swiper-slide, .swiper-wrapper { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); } - -.swiper-container-multirow > .swiper-wrapper { - -webkit-box-lines: multiple; - -moz-box-lines: multiple; - -ms-flex-wrap: wrap; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; } - -.swiper-container-free-mode > .swiper-wrapper { - -webkit-transition-timing-function: ease-out; - transition-timing-function: ease-out; - margin: 0 auto; } - -.swiper-slide { - -webkit-flex-shrink: 0; - -ms-flex: 0 0 auto; - -ms-flex-negative: 0; - flex-shrink: 0; - width: 100%; - height: 100%; - position: relative; } - -.swiper-container-autoheight, .swiper-container-autoheight .swiper-slide { - height: auto; } - -.swiper-container-autoheight .swiper-wrapper { - -webkit-box-align: start; - -ms-flex-align: start; - -webkit-align-items: flex-start; - -ms-grid-row-align: flex-start; - align-items: flex-start; - -webkit-transition-property: -webkit-transform,height; - -webkit-transition-property: height,-webkit-transform; - transition-property: height,-webkit-transform; - transition-property: transform,height; - transition-property: transform,height,-webkit-transform; } - -.swiper-container .swiper-notification { - position: absolute; - left: 0; - top: 0; - pointer-events: none; - opacity: 0; - z-index: -1000; } - -.swiper-wp8-horizontal { - -ms-touch-action: pan-y; - touch-action: pan-y; } - -.swiper-wp8-vertical { - -ms-touch-action: pan-x; - touch-action: pan-x; } - -.swiper-button-next, .swiper-button-prev { - position: absolute; - top: 50%; - width: 27px; - height: 44px; - margin-top: -22px; - z-index: 10; - cursor: pointer; - background-size: 27px 44px; - background-position: center; - background-repeat: no-repeat; } - -.swiper-button-next.swiper-button-disabled, .swiper-button-prev.swiper-button-disabled { - opacity: .35; - cursor: auto; - pointer-events: none; } - -.swiper-button-prev, .swiper-container-rtl .swiper-button-next { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); - left: 10px; - right: auto; } - -.swiper-button-prev.swiper-button-black, .swiper-container-rtl .swiper-button-next.swiper-button-black { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); } - -.swiper-button-prev.swiper-button-white, .swiper-container-rtl .swiper-button-next.swiper-button-white { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); } - -.swiper-button-next, .swiper-container-rtl .swiper-button-prev { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); - right: 10px; - left: auto; } - -.swiper-button-next.swiper-button-black, .swiper-container-rtl .swiper-button-prev.swiper-button-black { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); } - -.swiper-button-next.swiper-button-white, .swiper-container-rtl .swiper-button-prev.swiper-button-white { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); } - -.swiper-pagination { - position: absolute; - text-align: center; - -webkit-transition: .3s; - transition: .3s; - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - z-index: 10; } - -.swiper-pagination.swiper-pagination-hidden { - opacity: 0; } - -.swiper-container-horizontal > .swiper-pagination-bullets, .swiper-pagination-custom, .swiper-pagination-fraction { - bottom: 10px; - left: 0; - width: 100%; } - -.swiper-pagination-bullet { - width: 8px; - height: 8px; - display: inline-block; - -webkit-border-radius: 100%; - border-radius: 100%; - background: #000; - opacity: .2; } - -button.swiper-pagination-bullet { - border: none; +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; - -webkit-box-shadow: none; - box-shadow: none; - -moz-appearance: none; - -ms-appearance: none; - -webkit-appearance: none; - appearance: none; } + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; } -.swiper-pagination-clickable .swiper-pagination-bullet { - cursor: pointer; } - -.swiper-pagination-white .swiper-pagination-bullet { - background: #fff; } - -.swiper-pagination-bullet-active { - opacity: 1; - background: #007aff; } - -.swiper-pagination-white .swiper-pagination-bullet-active { - background: #fff; } - -.swiper-pagination-black .swiper-pagination-bullet-active { - background: #000; } - -.swiper-container-vertical > .swiper-pagination-bullets { - right: 10px; - top: 50%; - -webkit-transform: translate3d(0, -50%, 0); - -ms-transform: translate3d(0, -50%, 0); - transform: translate3d(0, -50%, 0); } - -.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { - margin: 5px 0; +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } -.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet { - margin: 0 5px; } - -.swiper-pagination-progress { - background: rgba(0, 0, 0, 0.25); - position: absolute; } - -.swiper-pagination-progress .swiper-pagination-progressbar { - background: #007aff; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - -webkit-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); - -webkit-transform-origin: left top; - -ms-transform-origin: left top; - transform-origin: left top; } - -.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar { - -webkit-transform-origin: right top; - -ms-transform-origin: right top; - transform-origin: right top; } - -.swiper-container-horizontal > .swiper-pagination-progress { - width: 100%; - height: 4px; - left: 0; - top: 0; } - -.swiper-container-vertical > .swiper-pagination-progress { - width: 4px; - height: 100%; - left: 0; - top: 0; } - -.swiper-pagination-progress.swiper-pagination-white { - background: rgba(255, 255, 255, 0.5); } - -.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar { - background: #fff; } - -.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar { - background: #000; } - -.swiper-container-3d { - -webkit-perspective: 1200px; - -o-perspective: 1200px; - perspective: 1200px; } - -.swiper-container-3d .swiper-cube-shadow, .swiper-container-3d .swiper-slide, .swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-wrapper { - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; } - -.swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - pointer-events: none; - z-index: 10; } - -.swiper-container-3d .swiper-slide-shadow-left { - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent)); - background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), transparent); - background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent)); - background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), transparent); } - -.swiper-container-3d .swiper-slide-shadow-right { - background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent)); - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), transparent); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent)); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent); } - -.swiper-container-3d .swiper-slide-shadow-top { - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent)); - background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), transparent); - background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent)); - background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent); } - -.swiper-container-3d .swiper-slide-shadow-bottom { - background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent)); - background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), transparent); - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent)); - background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent); } - -.swiper-container-coverflow .swiper-wrapper, .swiper-container-flip .swiper-wrapper { - -ms-perspective: 1200px; } - -.swiper-container-cube, .swiper-container-flip { - overflow: visible; } - -.swiper-container-cube .swiper-slide, .swiper-container-flip .swiper-slide { - pointer-events: none; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - z-index: 1; } - -.swiper-container-cube .swiper-slide .swiper-slide, .swiper-container-flip .swiper-slide .swiper-slide { - pointer-events: none; } - -.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-active .swiper-slide-active, .swiper-container-flip .swiper-slide-active, .swiper-container-flip .swiper-slide-active .swiper-slide-active { - pointer-events: auto; } - -.swiper-container-cube .swiper-slide-shadow-bottom, .swiper-container-cube .swiper-slide-shadow-left, .swiper-container-cube .swiper-slide-shadow-right, .swiper-container-cube .swiper-slide-shadow-top, .swiper-container-flip .swiper-slide-shadow-bottom, .swiper-container-flip .swiper-slide-shadow-left, .swiper-container-flip .swiper-slide-shadow-right, .swiper-container-flip .swiper-slide-shadow-top { - z-index: 0; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; } - -.swiper-container-cube .swiper-slide { - visibility: hidden; - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - width: 100%; - height: 100%; } - -.swiper-container-cube.swiper-container-rtl .swiper-slide { - -webkit-transform-origin: 100% 0; - -ms-transform-origin: 100% 0; - transform-origin: 100% 0; } - -.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-next, .swiper-container-cube .swiper-slide-next + .swiper-slide, .swiper-container-cube .swiper-slide-prev { - pointer-events: auto; - visibility: visible; } - -.swiper-container-cube .swiper-cube-shadow { - position: absolute; - left: 0; - bottom: 0; - width: 100%; - height: 100%; - background: #000; - opacity: .6; - -webkit-filter: blur(50px); - filter: blur(50px); - z-index: 0; } - -.swiper-container-fade.swiper-container-free-mode .swiper-slide { - -webkit-transition-timing-function: ease-out; - transition-timing-function: ease-out; } - -.swiper-container-fade .swiper-slide { - pointer-events: none; - -webkit-transition-property: opacity; - transition-property: opacity; } - -.swiper-container-fade .swiper-slide .swiper-slide { - pointer-events: none; } - -.swiper-container-fade .swiper-slide-active, .swiper-container-fade .swiper-slide-active .swiper-slide-active { - pointer-events: auto; } - -.swiper-scrollbar { - -webkit-border-radius: 10px; - border-radius: 10px; - position: relative; - -ms-touch-action: none; - background: rgba(0, 0, 0, 0.1); } - -.swiper-container-horizontal > .swiper-scrollbar { - position: absolute; - left: 1%; - bottom: 3px; - z-index: 50; - height: 5px; - width: 98%; } - -.swiper-container-vertical > .swiper-scrollbar { - position: absolute; - right: 3px; - top: 1%; - z-index: 50; - width: 5px; - height: 98%; } - -.swiper-scrollbar-drag { - height: 100%; - width: 100%; - position: relative; - background: rgba(0, 0, 0, 0.5); - -webkit-border-radius: 10px; - border-radius: 10px; - left: 0; - top: 0; } - -.swiper-scrollbar-cursor-drag { - cursor: move; } - -.swiper-lazy-preloader { - width: 42px; - height: 42px; - position: absolute; - left: 50%; - top: 50%; - margin-left: -21px; - margin-top: -21px; - z-index: 10; - -webkit-transform-origin: 50%; - -ms-transform-origin: 50%; - transform-origin: 50%; - -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite; - animation: swiper-preloader-spin 1s steps(12, end) infinite; } - -.swiper-lazy-preloader:after { - display: block; - content: ""; - width: 100%; - height: 100%; - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); - background-position: 50%; - background-size: 100%; - background-repeat: no-repeat; } - -.swiper-lazy-preloader-white:after { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); } - -@-webkit-keyframes swiper-preloader-spin { - 100% { - -webkit-transform: rotate(360deg); } } - -@keyframes swiper-preloader-spin { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -/* General Project Styles */ -* { - -webkit-box-sizing: border-box; - box-sizing: border-box; } - body { - position: relative; - display: block; - overflow-x: hidden; + line-height: 1; } + +ol, ul { + list-style: none; } + +blockquote, q { + quotes: none; } + +blockquote:before, blockquote:after { + content: ""; + content: none; } + +q:before, q:after { + content: ""; + content: none; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +div { + box-sizing: border-box; } + +/* ---------------------------------------------------------------------------------------------------- + +Super Form Reset + +A couple of things to watch out for: + +- IE8: If a text input doesn't have padding on all sides or none the text won't be centered. +- The default border sizes on text inputs in all UAs seem to be slightly different. You're better off using custom borders. +- You NEED to set the font-size and family on all form elements +- Search inputs need to have their appearance reset and the box-sizing set to content-box to match other UAs +- You can style the upload button in webkit using ::-webkit-file-upload-button +- ::-webkit-file-upload-button selectors can't be used in the same selector as normal ones. FF and IE freak out. +- IE: You don't need to fake inline-block with labels and form controls in IE. They function as inline-block. +- By turning off ::-webkit-search-decoration, it removes the extra whitespace on the left on search inputs + +----------------------------------------------------------------------------------------------------*/ +input, +label, +select, +button, +textarea { margin: 0; + border: 0; padding: 0; - min-width: 320px; - background-color: #eef2f5; + display: inline-block; + vertical-align: middle; + white-space: normal; + background: none; + line-height: 1; + /* Browsers have different default form fonts */ + font-size: 13px; + font-family: Arial; } + +/* Remove the stupid outer glow in Webkit */ +input:focus { + outline: 0; } + +/* Box Sizing Reset +-----------------------------------------------*/ +/* All of our custom controls should be what we expect them to be */ +input, +textarea { + box-sizing: content-box; } + +/* These elements are usually rendered a certain way by the browser */ +button, +input[type=reset], +input[type=button], +input[type=submit], +input[type=checkbox], +input[type=radio], +select { + box-sizing: border-box; } + +/* Text Inputs +-----------------------------------------------*/ +/* Button Controls +-----------------------------------------------*/ +input[type=checkbox], +input[type=radio] { + width: 13px; + height: 13px; } + +/* File Uploads +-----------------------------------------------*/ +/* Search Input +-----------------------------------------------*/ +/* Make webkit render the search input like a normal text field */ +input[type=search] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; } + +/* Turn off the recent search for webkit. It adds about 15px padding on the left */ +::-webkit-search-decoration { + display: none; } + +/* Buttons +-----------------------------------------------*/ +button, +input[type="reset"], +input[type="button"], +input[type="submit"] { + /* Fix IE7 display bug */ + overflow: visible; + width: auto; } + +/* IE8 and FF freak out if this rule is within another selector */ +::-webkit-file-upload-button { + padding: 0; + border: 0; + background: none; } + +/* Textarea +-----------------------------------------------*/ +textarea { + /* Move the label to the top */ + vertical-align: top; + /* Turn off scroll bars in IE unless needed */ + overflow: auto; } + +/* Selects +-----------------------------------------------*/ +select[multiple] { + /* Move the label to the top */ + vertical-align: top; } + +@font-face { + font-family: PostGrotesk-Medium; + src: url(../fonts/PostGrotesk-Medium.eot); + src: url(../fonts/PostGrotesk-Medium.eot?#iefix) format("embedded-opentype"), url(../fonts/PostGrotesk-Medium.woff) format("woff"), url(../fonts/PostGrotesk-Medium.svg#PostGrotesk-Medium) format("svg"); font-weight: 400; - font-size: 14px; - font-family: 'Roboto', sans-serif; - line-height: 1.6; + font-style: normal; } + +@font-face { + font-family: PostGrotesk-Book; + src: url(../fonts/PostGrotesk-Book.eot); + src: url(../fonts/PostGrotesk-Book.eot?#iefix) format("embedded-opentype"), url(../fonts/PostGrotesk-Book.woff) format("woff"), url(../fonts/PostGrotesk-Book.svg#PostGrotesk-Book) format("svg"); + font-weight: 400; + font-style: normal; } + +body { + background-color: #eef2f5; + font-family: 'PostGrotesk-Book', -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; + font-weight: 400; + font-size: 15px; + line-height: 25px; + color: #49555f; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } -ul, li { - margin: 0; - padding: 0; - list-style-type: none; } +a { + color: #49555f; + text-decoration: none; + transition: opacity .2s ease; } -*:focus { - outline: none; } +.button { + display: block; + height: 44px; + line-height: 43px; + padding: 0 20px; + font-family: PostGrotesk-Medium; + font-size: 13px; + text-transform: uppercase; + text-align: center; + letter-spacing: 1px; + color: white; + background-color: #68c0f8; + box-shadow: 0 8px 14px 0 #DEE2E5; + border-radius: 8px; + transform: translate3d(0, 0, 0) scale(1); + transition: transform .1s ease, box-shadow .2s ease, background-color .2s ease; + -webkit-appearance: none; + cursor: pointer; } -.clearfix::after { - display: table; - clear: both; - content: ''; } +.button:active { + transform: translate3d(0, 0, 0) scale(0.99); } -.hidden { +.button:hover { + background-color: #84cfff; } + +.button.button--disabled { + color: rgba(255, 255, 255, 0.5); + cursor: default; } + +.header { + position: absolute; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + width: 100%; + z-index: 900; + top: 40px; + left: 0; } + +.header__inner { + width: 1012px; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: justify; + justify-content: space-between; } + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; } + +a.logo { + display: -ms-flexbox; + display: flex; + width: 260px; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + +.logo__icon { + height: 58px; + width: 58px; + background-image: url(../img/new-site/logo3.png); + background-size: 58px; + background-position: left; } + +.logo_text { + margin: 2px 0 0 8px; } + +.logo__title { + display: block; + font-family: PostGrotesk-Medium; + font-size: 22px; + line-height: 25px; + color: white; } + +.logo__description { + display: block; + font-size: 15px; + line-height: 25px; + color: white; + opacity: .5; } + +.nav a { + font-family: PostGrotesk-Medium; + font-size: 15px; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 10px 15px 15px; } + +.header .nav a { + color: white; } + +.header .nav a.nav__item--blog::before { + content: ""; + width: 16px; + height: 16px; + background-image: url(../img/new-site/icon_external.png); + background-size: 16px; + opacity: 0; + transform: translate3d(5px, 0, 0) rotate(5deg); + margin: 0 10px 0 0; + transition: transform .2s ease, opacity .2s ease; } + +.header .nav a.nav__item--blog:hover::before { + transform: translate3d(0, 0, 0) rotate(0deg); + opacity: .4; } + +.nav a:hover { + opacity: .9; } + +.shares { + width: 260px; + height: 50px; } + +.social-links { + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; } + +.shares .social-links { + -ms-flex-pack: end; + justify-content: flex-end; } + +.social-links li.social-link { + margin: 0 5px; } + +li.social-link a { + display: block; + width: 40px; + height: 40px; + border-radius: 50%; + background-color: #3F4A97; + background-repeat: no-repeat; + background-size: 20px; + background-position: center; + transition: transform .2s ease; + cursor: pointer; + box-shadow: 0 10px 10px 0 rgba(62, 76, 167, 0.25); } + +.social-link.social-link--fb a { + background-color: #4675DF; + background-image: url(../img/new-site/icon_fb.svg); } + +.social-link.social-link--tw a { + background-color: #4DB9FE; + background-image: url(../img/new-site/icon_tw.svg); } + +.social-link.social-link--sl a { + background-color: #E3306D; + background-image: url(../img/new-site/icon_sl.svg); } + +.social-link:hover a { + -ms-transform: scale(1.06); + transform: scale(1.06); } + +@media (max-width: 1140px) { + .header { + top: 0; } + .header__inner { + width: 100%; + margin: 40px; + -ms-flex-align: center; + align-items: center; } } + +@media (max-width: 960px) { + .nav { + display: none; } + a.logo, + .shares { + width: auto; } } + +@media (max-width: 840px) { + .header__inner { + margin: 30px; } } + +@media (max-width: 767px) { + .header__inner { + margin: 20px 20px 20px 17px; + -ms-flex-align: start; + align-items: flex-start; } + .logo__icon { + height: 48px; + width: 48px; + background-size: 48px; + -ms-flex-negative: 0; + flex-shrink: 0; + -ms-flex-positive: 0; + flex-grow: 0; } + .logo__title { + font-size: 18px; + line-height: 24px; } + .logo__description { + font-size: 14px; + line-height: 15px; } + .logo__description span { + display: none; } + .logo_text { + margin: 0px 0 0 4px; } + .shares .social-links li.social-link { + margin: 0 0 0 7px; } + .header .social-link.social-link--fb { + display: none; } } + +.the-iphone { + position: relative; + width: 292px; + height: 610px; + background: #FFFFFF; + box-shadow: 11px 15px 39px 0 rgba(31, 35, 61, 0.2), 0 2px 4px 0 rgba(88, 100, 177, 0.01), inset 0 0 4px 4px #dfe1ec; + border-radius: 40px; + z-index: 600; } + +.the-iphone-dot { + width: 8px; + height: 8px; + position: absolute; + left: 50%; + top: 22px; + transform: translate3d(-50%, 0, 0); + border-radius: 50%; + opacity: 0.5; + background: #DAE1EA; + box-shadow: inset 0 1px 2px 0 #B3B8D0; } + +.the-iphone-line { + width: 44px; + height: 6px; + position: absolute; + left: 50%; + top: 36px; + transform: translate3d(-50%, 0, 0); + border-radius: 5px; + opacity: 0.5; + background: #DAE1EA; + box-shadow: inset 0 1px 2px 0 #B3B8D0; } + +.the-iphone-screen { + width: 270px; + height: 479px; + border: 1px solid #E7E9F0; + background-color: #F3F4F8; + position: absolute; + left: 50%; + top: 60px; + border-radius: 4px; + transform: translate3d(-50%, 0, 0); + background-image: url(../img/new-site/ios_screen.png); + background-size: 270px; } + +.the-iphone-button { + width: 40px; + height: 40px; + position: absolute; + left: 50%; + bottom: 18px; + transform: translate3d(-50%, 0, 0); + border-radius: 50%; + opacity: 0.5; + background: #DAE1EA; + box-shadow: inset 0 1px 2px 0 #B3B8D0; } + +.the-android { + position: relative; + width: 290px; + height: 574px; + background: #FFFFFF; + box-shadow: 11px 15px 39px 0 rgba(31, 35, 61, 0.2), 0 2px 4px 0 rgba(88, 100, 177, 0.01), inset 0 0 4px 4px #dfe1ec; + border-radius: 30px; } + +.the-android-dot { + width: 7px; + height: 7px; + position: absolute; + left: 76px; + top: 25px; + border-radius: 50%; + opacity: 0.5; + background: #DAE1EA; + box-shadow: inset 0 1px 2px 0 #B3B8D0; } + +.the-android-line { + width: 94px; + height: 6px; + position: absolute; + left: 50%; + top: 25px; + transform: translate3d(-50%, 0, 0); + border-radius: 5px; + opacity: 0.5; + background: #DAE1EA; + box-shadow: inset 0 1px 2px 0 #B3B8D0; } + +.the-android-screen { + width: 262px; + height: 466px; + border: 1px solid #E7E9F0; + background-color: #F3F4F8; + position: absolute; + left: 50%; + top: 50px; + border-radius: 4px; + transform: translate3d(-50%, 0, 0); + background-image: url(../img/new-site/screen_android2.png); + background-size: 262px; } + +.the-android-button { + width: 94px; + height: 6px; + position: absolute; + left: 50%; + bottom: 26px; + transform: translate3d(-50%, 0, 0); + border-radius: 5px; + opacity: 0.5; + background: #DAE1EA; + box-shadow: inset 0 1px 2px 0 #B3B8D0; } + +.overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + z-index: 999; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + display: none; + opacity: 0; + transform: translate3d(0, 0, 0) scale(1); + visibility: hidden; + transition: visibility .5s linear 0s, opacity .2s ease; } + +.overlay.overlay--shown { + transition-delay: 0s; + visibility: visible; + opacity: 1; + transform: translate3d(0, 0, 0) scale(1); } + +.popup { + max-width: 600px; display: none; } -.hr-clear { - clear: both; - padding: 15px 0; - border: 0; } +.popup__inner { + margin: 0 20px; + background-color: white; + border-radius: 8px; + padding: 60px; + position: relative; + opacity: 0; + transform: translate3d(0, 15px, 0) scale(0.96); + visibility: hidden; + transition-delay: .2s; + transition: visibility 0.5s linear 0s, opacity 0.2s ease, transform 0.4s cubic-bezier(0.175, 0.885, 0.135, 1.425); } -.no-borders { - border: 0; } +.popup--shown .popup__inner { + transition-delay: 0s; + visibility: visible; + opacity: 1; + transform: translate3d(0, 0, 0) scale(1); } -.mobile-slider { - display: none; +.popup__title { + font-family: PostGrotesk-Medium; + font-size: 22px; + line-height: 30px; + margin: 0 0 20px 0; } + +.popup__text { + font-size: 18px; + line-height: 26px; + margin: 0 0 25px 0; + color: #70808D; } + +.popup__close { + position: absolute; + right: 20px; + top: 20px; + width: 24px; + height: 24px; + background-image: url(../img/new-site/icon_close.svg); + background-size: 24px; + background-repeat: no-repeat; + cursor: pointer; + transition: opacity .2s ease; } + +.popup__close:hover { + opacity: .8; } + +.popup__buttons a { + margin: 0 10px 0 0; } + +@media (max-width: 767px) { + .popup__inner { + margin: 0 20px; + padding: 40px; } + .popup__title { + font-size: 18px; + line-height: 26px; + margin: 0 0 10px 0; } + .popup__text { + font-size: 14px; + line-height: 22px; + margin: 0 0 15px 0; } } + +.container { + max-width: 1280px; margin: 0 auto; - width: 360px; + overflow: hidden; } + +.slides { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; } + +.slide { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: center; + align-items: center; } + +.slide__inner { + width: 1080px; + position: relative; } + +.slide__header { + margin: 0 auto; + width: 400px; text-align: center; } -.swiper-container { - width: 100%; - height: 100%; } +.slide__title { + font-family: PostGrotesk-Medium; + font-size: 24px; + line-height: 30px; + margin: 0 0 15px 0; } -.swiper-slide { - background-position: center; +.slide__description { + color: #70808D; + font-size: 16px; + line-height: 25px; } + +.slide__footer { + text-align: center; + width: 250px; + margin: 0 auto; + color: #70808D; + opacity: .6; + font-size: 15px; + line-height: 25px; } + +.slide__header--inversed .slide__title { + color: white; } + +.slide__header--inversed .slide__description { + color: white; + opacity: .6; } + +@media (max-width: 1140px) { + .slide__inner { + width: 100%; + margin: 0; } } + +@media (max-width: 767px) { + .slide__header { + padding: 0 20px; + margin: 0 auto; + width: auto; + max-width: 300px; } + .slide__title { + font-size: 19px; + line-height: 26px; + margin: 0 0 6px 0; } + .slide__description { + font-size: 15px; + line-height: 21px; } + .slide__footer { + font-size: 14px; + line-height: 20px; } } + +.slide.slide--one .slide__inner { + margin: 30px 0 0 0; + height: 780px; + background-color: #4957B8; + background-image: url(../img/new-site/dot.svg); + box-shadow: 0px 10px 14px 0px rgba(79, 90, 166, 0.35); + border-radius: 10px; + transform: translate3d(0, 0, 0); + transition: transform .6s ease, opacity .3s ease; } + +.tagline { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: center; + justify-content: center; + position: absolute; + z-index: 200; + text-align: center; + width: 440px; + left: 90px; + top: 260px; } + +.tagline .tagline__title { + font-family: PostGrotesk-Medium; + color: white; + font-size: 25px; + line-height: 35px; + margin: 0 0 5px 0; + opacity: 0; + transform: translate3d(0, 20px, 0); + transition: transform .6s ease,opacity .6s ease; + transition-delay: .1s; } + +.shown .tagline__title { + opacity: 1; + transform: translate3d(0, 0, 0); } + +.tagline .tagline__body { + color: white; + opacity: .6; + font-size: 18px; + line-height: 25px; + margin: 0 0 20px 0; + opacity: 0; + transform: translate3d(0, 20px, 0); + transition: transform .6s ease,opacity .6s ease; + transition-delay: .2s; } + +.shown .tagline__body { + opacity: .6; + transform: translate3d(0, 0, 0); } + +.tagline__form { + opacity: 0; + transform: translate3d(0, 20px, 0); + transition: transform .6s ease,opacity .6s ease; + transition-delay: .3s; } + +.shown .tagline__form { + opacity: 1; + transform: translate3d(0, 0, 0); } + +.email-form { + display: -ms-flexbox; + display: flex; + width: 400px; + position: relative; } + +.email-form a { + color: white; + font-family: PostGrotesk-Medium; } + +.email-form__responces { + color: rgba(255, 255, 255, 0.8); + width: 100%; + text-align: left; + margin: 10px 0 0 0; } + +.email-form__success-message { + width: 100%; + padding: 15px; + font-size: 15px; + border-radius: 8px; + text-align: left; + background-color: rgba(255, 255, 255, 0.12); + color: white; + line-height: 22px; + opacity: 0; + transform: translate3d(0, 10px, 0); + transition: transform .6s ease,opacity .6s ease; } + +.email-form--valid .email-form__success-message { + opacity: 1; + transform: translate3d(0, 0, 0); } + +.email-form__inner { + display: -ms-flexbox; + display: flex; + width: 400px; + position: relative; } + +.email-form__input { + height: 45px; + line-height: 45px; + border-radius: 8px !important; } + +.email-form__input--email { + text-align: left; + background-color: rgba(255, 255, 255, 0.12); + color: white; + width: 215px; + padding: 0 15px; + margin: 0 10px 0 0; + font-family: 'PostGrotesk-Book', sans-serif; + box-sizing: border-box; + transition: background-color .2s ease; + font-weight: 400; + font-size: 15px; } + +input.email-form__input--email:disabled { + color: rgba(255, 255, 255, 0.4); + background-color: rgba(255, 255, 255, 0.12); + opacity: 1; } + +.email-form--valid .email-form__input--email { + color: rgba(255, 255, 255, 0.4); + background-image: url(../img/new-site/icon_valid.png); + background-size: 24px; + background-repeat: no-repeat; + background-position: right 10px center; } + +.email-form__input--email:focus { + background-color: rgba(255, 255, 255, 0.2); + color: white; } + +.email-form__input--email::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.6); } + +.email-form__input--email::-moz-placeholder { + color: rgba(255, 255, 255, 0.6); } + +.email-form__input--email:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.6); } + +.email-form__input--email:-moz-placeholder { + color: rgba(255, 255, 255, 0.6); } + +.email-form input[type="submit"] { + width: 175px; + -ms-flex-negative: 0; + flex-shrink: 0; + -ms-flex-positive: 0; + flex-grow: 0; + box-shadow: 0px 10px 10px 0px rgba(80, 92, 174, 0.3); } + +.email-form input[type="submit"]:disabled { + cursor: default; + color: rgba(255, 255, 255, 0.5); } + +.email-form input[type="submit"]:disabled:hover { + background-color: #68c0f8; } + +.tagline__footer { + text-align: center; + color: white; + margin: 0 auto; + padding: 25px; + width: 200px; + font-size: 16px; + line-height: 24px; + opacity: 0; + transform: translate3d(0, 20px, 0); + transition: transform .6s ease,opacity .6s ease; + transition-delay: .3s; + display: none; } + +.shown .tagline__footer { + opacity: 1; + transform: translate3d(0, 0, 0); } + +.tagline__footer-inner { + transition: opacity .2s ease; } + +.tagline__footer.tagline__footer--hidden .tagline__footer-inner { + opacity: 0; } + +.phones { + width: 476px; + height: 636px; + position: absolute; + right: -20px; + top: 106px; } + +.phone-wrap { + position: absolute; + transform: translate3d(0, 0, 0); } + +.phone { + position: absolute; + opacity: 0; + transform: translate3d(0, 40px, 0); + transition: transform .6s ease, opacity .3s ease; } + +.phone.phone--iphone { + transition-delay: .3s; } + +.phone.phone--android { + transition-delay: .4s; + transform: translate3d(0, 40px, 0); } + +.shown .phone { + opacity: 1; + transform: translate3d(0, 0, 0); } + +.phone-wrap--iphone { + width: 292px; + height: 610px; + left: 0; + top: 0; + z-index: 500; } + +.phone-wrap--android { + width: 290px; + height: 574px; + left: 186px; + top: 62px; + z-index: 400; } + +.features-wrap { + position: relative; + top: -139px; + width: 1180px; + height: 300px; } + +.features { + display: -ms-flexbox; + display: flex; + width: 100%; + height: 100%; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 20px 80px; + background: white; + box-shadow: 0px -2px 18px 0px rgba(72, 89, 102, 0.25); + border-radius: 10px; + opacity: 0; + transform: translate3d(0, 40px, 0); + transition: transform .6s ease, opacity .6s ease; + transition-delay: .8s; } + +.shown .features { + opacity: 1; + transform: translate3d(0, 0, 0); } + +.more-button { + font-family: PostGrotesk-Medium; + text-transform: uppercase; + line-height: 15px; + text-align: center; + transform: translate3d(-50%, 0, 0); + padding: 14px 35px 14px; + font-size: 13px; + letter-spacing: 1px; + color: #6370CA; + background-color: rgba(99, 112, 202, 0.1); + border-radius: 10px; + position: absolute; + bottom: 30px; + left: 50%; + transition: transform .2s ease, background-color .2s ease; } + +.more-button:hover { + background-color: rgba(99, 112, 202, 0.2); } + +.more-button:active { + transform: translate3d(-50%, 0, 0) scale(0.99); } + +.features__item { + text-align: center; + width: 240px; } + +.features__icon { + display: inline-block; + width: 130px; + height: 60px; + background-size: 130px; + background-repeat: no-repeat; } + +.features__item--send .features__icon { + background-image: url(../img/new-site/send_icon.png); } + +.features__item--browse .features__icon { + background-image: url(../img/new-site/browse_icon.png); } + +.features__item--buy .features__icon { + background-image: url(../img/new-site/buy_icon.png); } + +.features__title { + font-family: PostGrotesk-Medium; + font-size: 17px; + line-height: 20px; + margin: 15px 0 12px 0; } + +.features__description { + color: #70808D; + font-size: 15px; + line-height: 25px; } + +@media (max-width: 1220px) { + .features-wrap { + width: 1040px; } + .features { + padding: 20px 50px; } + .tagline { + left: 65px; } + .phones { + right: 40px; } } + +@media (max-width: 1140px) { + .slide.slide--one { + margin: 20px 20px 0 20px; } + .slide.slide--one .slide__inner { + margin: 0 0 0 0; + width: 100%; } + .features-wrap { + width: 100%; } + .features { + width: auto; + margin: 0 20px; } + .tagline { + -ms-flex-pack: start; + justify-content: flex-start; + text-align: left; + left: 40px; } } + +@media (max-width: 1030px) { + .tagline { + width: 300px; + top: 230px; } + .email-form.email-form--valid input[type="submit"] { + display: none; } + .email-form { + -ms-flex-direction: column; + flex-direction: column; + width: 300px; } + .email-form__inner { + -ms-flex-direction: column; + flex-direction: column; + width: 300px; } + .email-form__input--email { + width: 100%; + margin: 0 0 10px 0; } + .email-form input[type="submit"] { + width: 100%; } } + +@media (max-width: 960px) { + .tagline, + .email-form, + .email-form__inner { + width: 280px; } + .features-wrap { + width: 100%; } + .features { + padding: 20px; } } + +@media (max-width: 922px) { + .slide.slide--one .slide__inner { + height: 693px; } + .tagline { + width: 260px; + top: 180px; } + .email-form, + .email-form__inner { + width: 260px; } + .phones { + width: 404px; + height: 548px; + top: 91px; } + .phone-wrap--iphone { + width: 247px; + height: 516px; } + .phone-wrap--android { + width: 246px; + height: 486px; + left: 149px; } + .the-iphone { + width: 252px; + height: 516px; } + .the-iphone-dot { + top: 26px; + width: 6px; + height: 6px; } + .the-iphone-line { + top: 38px; + height: 5px; } + .the-iphone-screen { + width: 229px; + height: 405px; + background-size: 229px; } + .the-iphone-button { + width: 30px; + height: 30px; + bottom: 13px; } + .the-android { + width: 246px; + height: 486px; } + .the-android-screen { + width: 222px; + height: 394px; + background-size: 222px; } + .the-android-button { + bottom: 21px; } + .features__item { + margin: 0 15px; } } + +@media (max-width: 840px) { + .slide.slide--one .slide__inner { + height: 670px; } + .tagline { + left: 30px; } + .tagline, + .email-form, + .email-form__inner { + width: 246px; } + .tagline .tagline__title { + font-size: 21px; + line-height: 35px; + margin: 0 0 0 0; } + .tagline .tagline__body { + font-size: 16px; + line-height: 24px; + margin: 0 0 10px 0; } + .features { + margin: 0 15px; } + .features-wrap { + height: 260px; } + .features__icon { + width: 95px; + height: 44px; + background-size: 95px; } + .features__title { + font-size: 15px; + line-height: 20px; + margin: 5px 0; } + .features__description { + font-size: 14px; + line-height: 20px; } + .phones { + right: 20px; + top: 69px; } } + +@media (max-width: 767px) { + input.email-form__input--email { + font-size: 16px; } + .slide.slide--one { + margin: 0; } + .slide.slide--one .slide__inner { + height: auto; + border-radius: 0; } + .tagline { + position: static; + -ms-flex-direction: column; + flex-direction: column; + width: auto; + left: 0; + top: 0; + margin: 110px 0 0px 0; + padding: 0 20px; } + .tagline, + .email-form, + .email-form__inner { + width: auto; } + .email-form__responces { + margin-top: 5px; } + .tagline .tagline__body { + margin: 0 0 10px 0; } + .tagline__footer { + display: block; + margin-top: 24px; } + .phones { + position: relative; + top: 0; + left: 0; + height: 340px; + width: auto; + max-width: 500px; + overflow: hidden; + margin: 0 auto; } + .phone-wrap--iphone { + left: 10px; + transform: translate3d(0, 0, 0) !important; } + .phone-wrap--android { + left: auto; + right: 10px; + transform: translate3d(0, 0, 0) !important; } + .features-wrap { + top: 0; + height: auto; } + .features { + margin: 0; + border-radius: 0; + height: auto; + -ms-flex-direction: column; + flex-direction: column; + padding: 5px 20px 5px 10px; } + .features__item { + width: auto; + text-align: left; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + margin: 0; } + .features__title { + font-size: 16px; + line-height: 20px; } + .features__icon { + width: 80px; + height: 80px; + -ms-flex-negative: 0; + flex-shrink: 0; + -ms-flex-positive: 0; + flex-grow: 0; + background-position: center center; } + .features__item--send .features__icon { + background-size: 70px; } + .features-text { + margin: 0 0 0 10px; + padding: 25px 0; + border-bottom: 1px solid #EEF2F5; } + .features__item:nth-child(3) .features-text { + border-bottom: none; } + .more-button { + display: none; } } + +.slide.slide--two { + padding: 40px 0 40px 0; + margin: -140px 0 0 0; } + +.dapps { + margin: 50px auto 30px; + width: 880px; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-line-pack: start; + align-content: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; } + +.dapp { + width: 25%; + opacity: 0; + transform: translate3d(0, 20px, 0); + transition: transform .6s ease, opacity .4s ease; + transition-delay: .1s; } + +.dapp:nth-child(2) { + transition-delay: .2s; } + +.dapp:nth-child(3) { + transition-delay: .3s; } + +.dapp:nth-child(4) { + transition-delay: .4s; } + +.dapp:nth-child(5) { + transition-delay: .5s; } + +.dapp:nth-child(6) { + transition-delay: .6s; } + +.dapp:nth-child(7) { + transition-delay: .7s; } + +.dapp:nth-child(8) { + transition-delay: 1s; } + +.slide--shown .dapp { + opacity: 1; + transform: translate3d(0, 0, 0); } + +.dapp.dapp--plus { + display: -ms-flexbox; + display: flex; } + +.dapp.dapp--plus a.dapp--plus__link { + text-align: center; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; } + +.dapp__inner { + background-color: white; + height: 220px; + margin: 10px; + box-shadow: 0px 4px 18px 0px rgba(189, 208, 223, 0.26); + border-radius: 8px; + padding: 20px; + position: relative; } + +.dapp__title { + font-size: 15px; + line-height: 15px; + font-family: PostGrotesk-Medium; + margin: 0 0 10px 0; } + +.dapp__description { + font-size: 14px; + line-height: 20px; + color: #5A6F7E; + opacity: .8; } + +.dapp__icon { + display: block; + width: 72px; + height: 72px; + margin: 0 0 10px 0; + -ms-transform: scale(1); + transform: scale(1); + transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.135, 1.425); } + +.dapp--plus:hover .dapp__icon { + -ms-transform: scale(1.12); + transform: scale(1.12); } + +.dapp__icon-inner { + width: 72px; + height: 72px; + background-image: url(../img/new-site/plus.svg); + background-repeat: no-repeat; + background-size: cover; + opacity: 0; + -ms-transform: scale(0.6); + transform: scale(0.6); + transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.135, 1.425), opacity 0.2s ease; + transition-delay: 1.2s; } + +.slide--shown .dapp__icon-inner { + -ms-transform: scale(1); + transform: scale(1); + opacity: 1; } + +.dapp--plus .dapp__description { + text-align: center; + display: inline-block; + width: 80%; } + +.dapp__image { + width: 50px; + height: 50px; + border-radius: 50%; + position: absolute; + left: 20px; + bottom: 20px; + background-color: white; background-size: cover; } -*::-webkit-input-placeholder { - color: #808591; - font-size: 14px; - font-family: 'Roboto', sans-serif; - opacity: .6; } +.dapp.dapp--one .dapp__image { + background-image: url(../img/new-site/image-messaging.png); } -*:-moz-placeholder { - color: #808591; - font-size: 14px; - font-family: 'Roboto', sans-serif; - opacity: .6; } +.dapp.dapp--two .dapp__image { + background-image: url(../img/new-site/image-payments.png); } -*::-moz-placeholder { - color: #808591; - font-size: 14px; - font-family: 'Roboto', sans-serif; - opacity: .6; } +.dapp.dapp--three .dapp__image { + background-image: url(../img/new-site/image-contracts.png); } -*:-ms-input-placeholder { - color: #808591; - font-size: 14px; - font-family: 'Roboto', sans-serif; - opacity: .6; } +.dapp.dapp--four .dapp__image { + background-image: url(../img/new-site/image-wallet.png); } -body input:focus:required:invalid, body textarea:focus:required:invalid { - color: #666; } +.dapp.dapp--five .dapp__image { + background-image: url(../img/new-site/image-multiuser.png); } -body input:required:valid, body textarea:required:valid { - color: #666; } +.dapp.dapp--six .dapp__image { + background-image: url(../img/new-site/image-exchange.png); } -*::-moz-selection { - background: #b574f0; - color: #fff; } +.dapp.dapp--seven .dapp__image { + background-image: url(../img/new-site/image-devtools.png); } -*::selection { - background: #b574f0; - color: #fff; } +@media (max-width: 922px) { + .dapps { + margin: 50px auto 30px; + width: 748px; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-line-pack: start; + align-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; } + .dapp { + width: 25%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-negative: 1; + flex-shrink: 1; } + .dapp__inner { + height: 260px; } } -/* Custom Styles Here */ -/* ALWAYS END */ -/*========== Desktop First Method ========== */ -/* Large Devices, Wide Screens */ -@media only screen and (max-width: 1200px) { - /* */ } - -/* Medium Devices, Desktops */ -@media only screen and (max-width: 992px) { - /* */ } - -/* Small Devices, Tablets */ -@media only screen and (max-width: 768px) { - .table-center { - overflow: hidden; } - .table-left, .table-right { - display: block; - width: 100%; } - .header-wrapper { - overflow: visible; } - .phone-header { - top: 65px; - left: 45px; } - .phone-even { - display: none; } - .section-table { - height: 43vh; } - .table-one-third { - display: none; } - .table-two-third { - display: block; - width: 100%; } - .mobile-slider { - display: block; } - .white-blocks { - display: none; } - .mobile-section-text { - display: block; } - .block { - display: block; - margin: 0 auto; - margin-bottom: 20px; } - .mobile-hidden { - display: none; } - .section-row { - display: block; - border-bottom: 1px solid #ddd; } } - -/* Extra Small Devices, Phones */ -@media only screen and (max-width: 480px) { - .swiper-button-prev, .swiper-button-next { - top: 55%; - width: 20px; - height: 30px; - background-size: 20px 30px; } - .swiper-button-prev { - left: 20px; } - .swiper-button-next { - right: 20px; } - .main-navigation { - display: none; } - .main-header { - margin-top: 20px; } - .logo-wrapper { - position: static; } - .main-logo { - left: 45%; } - .logo-shadow { - left: 42%; } - footer { - position: relative; } - .footer-wrapper { - width: 100%; } - .footer-links { - display: none; } - .footer-logo { - position: absolute; - top: 0; - left: 50%; } - .footer-half { - padding: 0; - width: 100%; } - .footer-half:nth-child(2) { - display: none; } - .footer-logo-mobile { - display: block; } - .section-heading-odd { - margin-left: 0; } - .tags { - left: -10px; - -webkit-transform: scale(0.8); - -ms-transform: scale(0.8); - transform: scale(0.8); } - #maitre-content { - padding: 15px; - width: 360px; } - #maitre-content h4[data-maitre-people-ahead-number] { - top: 50%; - left: 17%; - font-size: 2em; } - #maitre-content p[data-maitre-people-ahead-text] { - top: 60%; - left: 7%; - font-size: 1em; } - #maitre-content h4[data-maitre-people-behind-number] { - top: 50%; - left: 66%; - font-size: 2em; } - #maitre-content p[data-maitre-people-behind-text] { - top: 60%; - left: 57%; - font-size: 1em; } - #maitre-content div[data-maitre-share-container] { - padding-top: 70px; } - .section-heading-even, .section-heading-odd > p, .section-gradient-text { - padding: 0 15px; } } - -/* Custom, iPhone Retina */ -@media only screen and (max-width: 320px) { - .mobile-block { - padding: 30px; - width: 320px; } - .status-email, .status-text { - width: 320px; } - .status-email > h1, .status-text > h1 { - font-size: 20px; } - .status-email > p, .status-text > p { - padding: 0 15px; } - .mobile-slider { - width: 320px; } - .section-heading-even, .section-heading-odd { - width: 320px; } - .section-heading-even > h2, .section-heading-odd > h2 { - font-size: 18px; } - .section-heading-even > p, .section-heading-odd > p { - padding: 0 15px; } - .tags { - left: -35px; - -webkit-transform: scale(0.7); - -ms-transform: scale(0.7); - transform: scale(0.7); } - .gradient-email, .gradient-text { - width: 320px; } - .gradient-email h2, .gradient-text h2 { - font-size: 20px; } - .section-gradient .section-gradient-text { - width: 320px; } - .section-gradient .section-gradient-text p { - font-weight: normal; } - #maitre-content { - padding: 15px; - width: 320px; } - #maitre-share-container #maitre-share-plain-url { - width: 280px; } - #mc-embedded-subscribe-form .new-input { - margin-left: 5px; +@media (max-width: 767px) { + .slide.slide--two { + margin: 0; + padding: 0; } + .dapps { + margin: 20px auto 10px; + width: auto; + padding: 0 10px; } + .dapp__inner { + margin: 5px; + height: 240px; padding: 15px; } - #mc-embedded-subscribe-form .new-button { - right: 50px; } } + .dapp { + width: 50%; + opacity: 1; + transform: translate3d(0, 0, 0); } + .dapp__image { + width: 40px; + height: 40px; + left: 15px; + bottom: 15px; } + .dapp:nth-child(4), + .dapp:nth-child(5) { + display: none; } + .dapp__icon, + .dapp__icon-inner { + width: 60px; + height: 60px; + -ms-transform: scale(1); + transform: scale(1); + opacity: 1; } } -/*========== Mobile First Method ========== */ -/* Custom, iPhone Retina */ -@media only screen and (min-width: 320px) { - /* */ } +.slide.slide--three { + display: -ms-flexbox; + display: flex; + padding: 40px 0 60px; } -/* Extra Small Devices, Phones */ -@media only screen and (min-width: 480px) { - /* */ } +.slide.slide--three .slide__inner { + background-image: linear-gradient(-180deg, #5A6F7E 0%, #445561 100%); + box-shadow: 0px 12px 23px 0px rgba(74, 92, 105, 0.33); + border-radius: 8px; + padding: 50px 0; + height: 740px; + width: 1080px; } -/* Small Devices, Tablets */ -@media only screen and (min-width: 768px) { - /* */ } +.circles { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + overflow: hidden; + z-index: 500; } -/* Medium Devices, Desktops */ -@media only screen and (min-width: 992px) { - .block { - padding: 30px; - width: 320px; } } +.slide__circles { + position: absolute; + top: 56%; + left: 0; + width: 1080px; + height: 740px; } -/* Large Devices, Wide Screens */ -@media only screen and (min-width: 1200px) { - /* */ } +.slide__circle-wrap { + position: absolute; + left: 50%; + top: 110%; + transform: translate3d(-50%, -50%, 0); } + +.slide__circle { + border-radius: 50%; + opacity: 0.1; + background: #A6B0BA; + border: 2px solid #FFFFFF; + opacity: .1; + transform: scale(1) translate3d(0, 0, 0); + transition: transform 1s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.4s linear; } + +.slide__circle--one .slide__circle { + width: 1200px; + height: 1200px; + transition-delay: .7s; } + +.slide__circle--two .slide__circle { + width: 1000px; + height: 1000px; + transition-delay: .6s; } + +.slide__circle--three .slide__circle { + width: 800px; + height: 800px; + transition-delay: .5s; } + +.slide__circle--four .slide__circle { + width: 600px; + height: 600px; + transition-delay: .4s; } + +.slide__circle--five .slide__circle { + width: 400px; + height: 400px; + transition-delay: .3s; } + +.slide__circle--six .slide__circle { + width: 200px; + height: 200px; + transition-delay: .2s; } + +.points { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 600; } + +.point { + position: absolute; + width: 260px; } + +.point.point--one { + top: 198px; + left: -50px; } + +.point.point--two { + top: 439px; + left: 273px; } + +.point.point--three { + top: 192px; + left: 490px; } + +.point.point--four { + top: 336px; + left: 844px; } + +.point__point { + width: 20px; + height: 20px; + margin: 10px auto; + border-radius: 50%; + background-color: #3AAAF2; + border: 6px solid white; + box-shadow: 0px 13px 11px 0px rgba(69, 81, 90, 0.16); + opacity: 0; + transform: scale(0.2) translate3d(0, -20px, 0); + transition: transform 0.4s cubic-bezier(0.23, 1, 0.32, 1), opacity 0.2s ease; } + +.slide--shown .point__point { + opacity: 1; + transform: scale(1) translate3d(0, 0, 0); } + +.point.point--one .point__point { + transition-delay: 1.2s; } + +.point.point--two .point__point { + transition-delay: .6s; } + +.point.point--three .point__point { + transition-delay: .8s; } + +.point.point--four .point__point { + transition-delay: 1s; } + +.point__title { + font-family: PostGrotesk-Medium; + line-height: 15px; + margin-bottom: 10px; } + +.point__description { + color: #5A6F7E; + font-size: 14px; + line-height: 20px; } + +.point__content { + width: 260px; + position: relative; + background: white; + box-shadow: 0px 13px 11px 0px rgba(69, 81, 90, 0.16); + border-radius: 8px; + opacity: 0; + transform: scale(1) translate3d(0, -20px, 0); + transition: transform 0.7s cubic-bezier(0.175, 0.885, 0.135, 1.425), opacity 0.3s ease; } + +.slide--shown .point__content { + opacity: 1; + transform: scale(1) translate3d(0, 0, 0); } + +.point.point--one .point__content { + transition-delay: 1.3s; } + +.point.point--two .point__content { + transition-delay: .7s; } + +.point.point--three .point__content { + transition-delay: .9s; } + +.point.point--four .point__content { + transition-delay: 1.1s; } + +.point__top { + padding: 30px 25px 20px 30px; } + +.point__footer { + font-family: PostGrotesk-Medium; + color: #68C0FF; + padding: 15px 30px; + background-color: #E6F2FD; + border-radius: 0px 0px 8px 8px; } + +.point__avatar { + float: right; + width: 40px; + height: 40px; + border-radius: 50%; + background-color: #eef2f5; + margin: 0 0 10px 10px; + background-size: cover; } + +.point.point--one .point__avatar { + background-image: url(../img/new-site/image-jarrad-dapp.png); } + +.point.point--two .point__avatar { + background-image: url(../img/new-site/image-etherplay-dapp.png); } + +.point.point--three .point__avatar { + background-image: url(../img/new-site/image-carl-dapp.png); } + +.point.point--four .point__avatar { + background-image: url(../img/new-site/image-moments-dapp.png); } + +@media (max-width: 1220px) { + .point.point--one { + top: 127px; + left: 20px; } + .point.point--four { + top: 425px; + left: 778px; } } + +@media (max-width: 1140px) { + .slide.slide--three .slide__inner { + width: 860px; } + .point.point--one { + top: 183px; + left: -30px; } + .point.point--two { + top: 454px; + left: 243px; } + .point.point--four { + top: 240px; + left: 630px; } + .point.point--three { + display: none; } } + +@media (max-width: 960px) { + .point.point--one { + top: 183px; + left: 20px; } + .point.point--two { + top: 454px; + left: 243px; } + .point.point--four { + top: 240px; + left: 580px; } } + +@media (max-width: 922px) { + .slide.slide--three .slide__inner { + width: 728px; } + .point.point--one { + top: 183px; + left: 20px; } + .point.point--two { + top: 454px; + left: 170px; } + .point.point--four { + top: 240px; + left: 450px; } } + +@media (max-width: 767px) { + .slide.slide--three { + padding: 40px 0 40px; } + .slide.slide--three .slide__inner { + padding: 30px 0; + width: 100%; + border-radius: 0; + height: 570px; } + .slide__circle-wrap { + top: 145%; } + .point { + width: auto; } + .point__top { + padding: 5px; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; } + .point__title { + margin: 0 10px 0 10px; } + .point__content { + width: auto; + border-radius: 40px; } + .point__avatar { + float: none; + margin: 0; } + .point__description { + display: none; } + .point__footer { + display: none; } + .point.point--one { + top: 290px; + left: 20px; } + .point.point--two { + top: 210px; + right: 50px; + left: auto; } + .point.point--three { + top: 440px; + left: 70px; + display: block; } + .point.point--four { + top: 360px; + right: 20px; + left: auto; } } + +.slide.slide--four { + display: -ms-flexbox; + display: flex; + padding: 40px 0 60px; } + +.slide.slide--four .slide__inner { + border-radius: 8px; + padding: 20px 0 0 0; + height: auto; + width: auto; } + +.slide.slide--four .button { + margin: 20px auto 0; + width: 170px; } + +@media (max-width: 767px) { + .slide.slide--four { + padding: 0px; } } + +.footer { + display: -ms-flexbox; + display: flex; + text-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-direction: column; + flex-direction: column; + padding: 0 0 60px 0; } + +.address { + width: 160px; + opacity: .8; } + +.footer .social-links { + margin: 0 0 20px 0; } + +.social-link.social-link--inversed a { + box-shadow: 0px 4px 6px 0px rgba(189, 208, 223, 0.12); } + +.social-link.social-link--fb.social-link--inversed a { + background-image: url(../img/new-site/icon_fb.svg); + background-color: #6081CB; } + +.social-link.social-link--tw.social-link--inversed a { + background-image: url(../img/new-site/icon_tw.svg); + background-color: #6DBDFB; } + +.social-link.social-link--sl.social-link--inversed a { + background-image: url(../img/new-site/icon_sl.svg); + background-color: #E3306D; } + +.footer .social-links li.social-link { + margin: 0 5px; } + +@media (max-width: 767px) { + .address { + font-size: 15px; + line-height: 21px; } + .footer { + padding: 60px 0 60px 0; } } diff --git a/src/fonts/PostGrotesk-Book.eot b/src/fonts/PostGrotesk-Book.eot new file mode 100644 index 0000000..06846d3 Binary files /dev/null and b/src/fonts/PostGrotesk-Book.eot differ diff --git a/src/fonts/PostGrotesk-Book.svg b/src/fonts/PostGrotesk-Book.svg new file mode 100644 index 0000000..dd80f2c --- /dev/null +++ b/src/fonts/PostGrotesk-Book.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/fonts/PostGrotesk-Book.woff b/src/fonts/PostGrotesk-Book.woff new file mode 100644 index 0000000..47b48d0 Binary files /dev/null and b/src/fonts/PostGrotesk-Book.woff differ diff --git a/src/fonts/PostGrotesk-Medium.eot b/src/fonts/PostGrotesk-Medium.eot new file mode 100644 index 0000000..e0171ff Binary files /dev/null and b/src/fonts/PostGrotesk-Medium.eot differ diff --git a/src/fonts/PostGrotesk-Medium.svg b/src/fonts/PostGrotesk-Medium.svg new file mode 100644 index 0000000..2e26fe7 --- /dev/null +++ b/src/fonts/PostGrotesk-Medium.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/fonts/PostGrotesk-Medium.woff b/src/fonts/PostGrotesk-Medium.woff new file mode 100644 index 0000000..933c51b Binary files /dev/null and b/src/fonts/PostGrotesk-Medium.woff differ diff --git a/src/img/new-site/browse_icon.png b/src/img/new-site/browse_icon.png new file mode 100644 index 0000000..8a0a1f1 Binary files /dev/null and b/src/img/new-site/browse_icon.png differ diff --git a/src/img/new-site/buy_icon.png b/src/img/new-site/buy_icon.png new file mode 100644 index 0000000..18852d5 Binary files /dev/null and b/src/img/new-site/buy_icon.png differ diff --git a/src/img/new-site/dot.svg b/src/img/new-site/dot.svg new file mode 100644 index 0000000..45df23c --- /dev/null +++ b/src/img/new-site/dot.svg @@ -0,0 +1 @@ +Artboard \ No newline at end of file diff --git a/src/img/new-site/icon_external.png b/src/img/new-site/icon_external.png new file mode 100644 index 0000000..c8e9771 Binary files /dev/null and b/src/img/new-site/icon_external.png differ diff --git a/src/img/new-site/icon_fb.svg b/src/img/new-site/icon_fb.svg new file mode 100644 index 0000000..d1cded4 --- /dev/null +++ b/src/img/new-site/icon_fb.svg @@ -0,0 +1 @@ +icon_fb \ No newline at end of file diff --git a/src/img/new-site/icon_sl.svg b/src/img/new-site/icon_sl.svg new file mode 100644 index 0000000..3c0034c --- /dev/null +++ b/src/img/new-site/icon_sl.svg @@ -0,0 +1 @@ +icon_sl \ No newline at end of file diff --git a/src/img/new-site/icon_tw.svg b/src/img/new-site/icon_tw.svg new file mode 100644 index 0000000..e52deff --- /dev/null +++ b/src/img/new-site/icon_tw.svg @@ -0,0 +1 @@ +icon_tw \ No newline at end of file diff --git a/src/img/new-site/image-carl-dapp.png b/src/img/new-site/image-carl-dapp.png new file mode 100644 index 0000000..f0b0f08 Binary files /dev/null and b/src/img/new-site/image-carl-dapp.png differ diff --git a/src/img/new-site/image-contracts.png b/src/img/new-site/image-contracts.png new file mode 100644 index 0000000..e493f06 Binary files /dev/null and b/src/img/new-site/image-contracts.png differ diff --git a/src/img/new-site/image-devtools.png b/src/img/new-site/image-devtools.png new file mode 100644 index 0000000..0167e9c Binary files /dev/null and b/src/img/new-site/image-devtools.png differ diff --git a/src/img/new-site/image-etherplay-dapp.png b/src/img/new-site/image-etherplay-dapp.png new file mode 100644 index 0000000..016ca19 Binary files /dev/null and b/src/img/new-site/image-etherplay-dapp.png differ diff --git a/src/img/new-site/image-exchange.png b/src/img/new-site/image-exchange.png new file mode 100644 index 0000000..8699686 Binary files /dev/null and b/src/img/new-site/image-exchange.png differ diff --git a/src/img/new-site/image-jarrad-dapp.png b/src/img/new-site/image-jarrad-dapp.png new file mode 100644 index 0000000..bee0f9e Binary files /dev/null and b/src/img/new-site/image-jarrad-dapp.png differ diff --git a/src/img/new-site/image-messaging.png b/src/img/new-site/image-messaging.png new file mode 100644 index 0000000..c6161e5 Binary files /dev/null and b/src/img/new-site/image-messaging.png differ diff --git a/src/img/new-site/image-moments-dapp.png b/src/img/new-site/image-moments-dapp.png new file mode 100644 index 0000000..0537ebe Binary files /dev/null and b/src/img/new-site/image-moments-dapp.png differ diff --git a/src/img/new-site/image-multiuser.png b/src/img/new-site/image-multiuser.png new file mode 100644 index 0000000..a0fbd56 Binary files /dev/null and b/src/img/new-site/image-multiuser.png differ diff --git a/src/img/new-site/image-payments.png b/src/img/new-site/image-payments.png new file mode 100644 index 0000000..38b395b Binary files /dev/null and b/src/img/new-site/image-payments.png differ diff --git a/src/img/new-site/image-wallet.png b/src/img/new-site/image-wallet.png new file mode 100644 index 0000000..8c8a533 Binary files /dev/null and b/src/img/new-site/image-wallet.png differ diff --git a/src/img/new-site/ios_screen.png b/src/img/new-site/ios_screen.png new file mode 100644 index 0000000..2b6919d Binary files /dev/null and b/src/img/new-site/ios_screen.png differ diff --git a/src/img/new-site/logo3.png b/src/img/new-site/logo3.png new file mode 100644 index 0000000..752cfbb Binary files /dev/null and b/src/img/new-site/logo3.png differ diff --git a/src/img/new-site/plus.svg b/src/img/new-site/plus.svg new file mode 100644 index 0000000..aca72ff --- /dev/null +++ b/src/img/new-site/plus.svg @@ -0,0 +1 @@ +plus \ No newline at end of file diff --git a/src/img/new-site/screen_android2.png b/src/img/new-site/screen_android2.png new file mode 100644 index 0000000..e041f9b Binary files /dev/null and b/src/img/new-site/screen_android2.png differ diff --git a/src/img/new-site/send_icon.png b/src/img/new-site/send_icon.png new file mode 100644 index 0000000..4f4de6b Binary files /dev/null and b/src/img/new-site/send_icon.png differ diff --git a/src/index.html b/src/index.html index de2e32b..b05e75e 100755 --- a/src/index.html +++ b/src/index.html @@ -1,695 +1,345 @@ - - + + + + + + Status, a Mobile Ethereum OS + + - + + - - - Status | The Mobile Ethereum Client - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
- -
-
- -
-
-
-
-

Status, more than a mobile wallet.

-

Status is a browser, messenger, and gateway to the decentralised world of Ethereum.

-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-

Send, Receive, and Store Ether

-

Safely secure your Ether and other Ethereum crypto-assets.

-
-
-
-
-

Browse Decentralised Apps

-

Explore the next generation of apps, with the next generation of Browser.

-
-
-
-
-

Buy and Sell Ether Locally

-

Discover nearby Status users to exchange goods, services and ideas.

-
-
- -
- - - -
-
-
-
-
-
-
-
-

Send, Receive, and Store Ether

-

Safely secure your Ether and other Ethereum crypto-assets.

-
-
-
-
-
-
-

Browse Decentralised Apps

-

Explore the next generation of apps, with the next generation of Browser.

-
-
-
-
-
-
-

Buy and Sell Ether Locally

-

Discover nearby Status users to exchange goods, services and ideas.

-
-
-
-
-
-
-
- -
+ + + + + + - + + + + + +
+
+
+
+
+
+ - - - - -
-
-
- -
-
-
-
-
-
-
-
- -
-
- -

Decentralised Apps at your fingertips

-

Status is a new type of Browser. Seamlessly interact with Decentralized Applications, and begin making Ethereum part of your every day life.

- -
- - - -
-
-
-
-
- -
+ -

Wallet

-

Store multiple currencies and wallets, review your transactions, and much more.

-
-
-
-
-
-
-

Exchange

-

Trade, communicate and collaborate with a community who also believes Ethereum will improve society.

-
-
-
-
- -
-
-

Your DAPP Here

-

Status is an Open Platform, and anyone can list their DApp. Stay tuned for updates.

+
+
-
-
-
-
- - -
- -
- -
-
-

Wallet

-

Store multiple currencies and wallets, review your transactions, and much more.

-
- -
- -
-
-

Exchange

-

Trade, communicate and collaborate with a community who also believes Ethereum will improve society.

-
- -
- -
-
-

Your DApp Here

-

Status is an Open Platform, and anyone can list their DApp. Stay tuned for updates.

-
-
-
- -
- -
- -
- -
-
-
- -
-
-

Smarter messaging has arrived

-

Status aims to replace your Messenger, enabling more meaningful conversations. Send payments, smart contracts, and more, directly from within chats.

-
-
-
- !setStatus -
-

Away

-
- -
-
- !transaction -
-

346 ETH

-
- -
-
- !name -
-

Alex Petrov

-
- -
-
- !keypairPassword -
-
-

********

-
- -
-
- !location -
-

Two Bar Mountain, -
Maricopa County, -
AZ, US

-
-
- -
-
-
- -
-
-
-
-
-
-
-
- -
- -
- -
- -
-
-
- -
-
-
-
-
-
-
-
- -
-
-

Buy and sell Ether nearby

-

Find nearby Status users through our Discover feature. Exchange currency, services, and ideas to help grow the Ethereum community.

-

Sample Statuses:

- -
- - - -
-
-
-
-
- -
-
-

Jarrad

-

Offering fiat to ether exchange services in #Berlin #USDtoETH #localexchange

+
+

Ethereum. Anywhere.

+
Status is a browser, messenger, and gateway to a decentralised world.
+
+
-
-
- -
-
-

Carl

-

Trading #BTCtoETH. Smart contracts only. Reputable Trader. #virtualexchange

-
-
-
-
- -
-
-

Dan

-

Looking to buy #DGDtoETH or to chat about #solidity or #serpent

+
-
-
-
-
- +
+
+
+
+
+
+
+
+
-
- -
- -
+
+
+
+
+
+
+
+
-

Jarrad

-

Offering fiat to ether exchange services in #Berlin #USDtoETH #localexchange

+
- -
- -
+
+
+
+ +
+

Send, Receive, Store Ether

+

Safely store your ETH and other Ethereum crypto-assets.

+
+
+
+ +
+

Browse Decentralised Apps

+

Explore the next generation of apps, with the next generation of Browser.

+
+
+
+ +
+

Buy and Sell Ether Locally

+

Discover nearby Status users to exchange goods, services and ideas.

+
+
+ Learn more
-

Carl

-

Trading #BTCtoETH. Smart contracts only. Reputable Trader. #virtualexchange

+
-
+
+
+
+

A Mobile Ethereum Interface

+

Seamlessly interact with the emerging ecosystem of DApps, wave goodbye to central intermediaries, and take control of your data. Coming soon to Android & iOS.

+
+ +
+ +
+
+

Messaging

+

One-to-one and group chats, with end-to-end encryption by default over the Whisper protocol.

+
+
+
+ +
+
+

Payments

+

Send or request ETH and other ERC20 tokens from friends, DApps and contacts.

+
+
+
+ +
+
+

Contracts

+

Social smart contracts are coming. Send and sign smart contracts directly from within a chat.

+
+
+
+ +
+
+

HD Wallet

+

Store ETH and other Ethereum-based assets, review your transactions, and much more.

+
+
+
+ +
+
+

Multi-User

+

Manage multiple accounts with simple account switching directly from within Status.

+
+
+
+ +
+
+

Exchange

+

Enjoy near-instant digital asset exchange between ETH and ERC20 tokens, powered by Shapeshift.

+
+
+
+ +
+
+

Developer Tools

+

Integrate your own DApp with webview, a conversation UI or both with the Status API.

+
+
+
+ + + +
+ -
-

Dan

-

Looking to buy #DGDtoETH or to chat about #solidity or #serpent

-
+
+ +
+
+
+

Discover a decentralized economy

+

Find DApps and other Status users through the Discover feature. Exchange currency, services, and ideas, and help to grow the movement for decentralization.

+
+ +
+ +
+
+
+
+

Jarrad

+

Offering SGD to ETH exchange services locally in Singapore.

+
+ +
+
+
+ +
+
+
+
+

Etherplay

+

Transparent skill-based games where players compete for high scores.

+
+ +
+
+
+ +
+
+
+
+

Carl

+

Trading REP for ETH. Smart contracts only. Reputable Trader.

+
+ +
+
+
+ +
+
+
+
+

Moments

+

A censorship-resistent decentralized microblogging tool.

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

Early access

+

We're working hard to make Status available to everyone. Join our private waitlist for early access, and be a part of the transition to a more open internet.

+
+ GET EARLY ACCESS +
+
+
+ +
+ + + + + - - - - - - - - - - + ga('create', 'UA-79146816-1', 'auto'); + ga('send', 'pageview'); + + + diff --git a/src/js/app.js b/src/js/app.js new file mode 100644 index 0000000..9cbb824 --- /dev/null +++ b/src/js/app.js @@ -0,0 +1,5 @@ +"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function e(t,n,r){function a(i,u){if(!n[i]){if(!t[i]){var c="function"==typeof require&&require;if(!u&&c)return c(i,!0);if(o)return o(i,!0);var f=new Error("Cannot find module '"+i+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[i]={exports:{}};t[i][0].call(l.exports,function(e){var n=t[i][1][e];return a(n?n:e)},l,l.exports,e,t,n,r)}return n[i].exports}for(var o="function"==typeof require&&require,i=0;i=w?a*=10:o>=M?a*=5:o>=_&&(a*=2),tt?1:e>=t?0:NaN},o=function(e){return 1===e.length&&(e=t(e)),{left:function(t,n,r,a){for(null==r&&(r=0),null==a&&(a=t.length);r>>1;e(t[o],n)<0?r=o+1:a=o}return r},right:function(t,n,r,a){for(null==r&&(r=0),null==a&&(a=t.length);r>>1;e(t[o],n)>0?a=o:r=o+1}return r}}},i=o(a),u=i.right,c=i.left,f=function(e,t){return te?1:t>=e?0:NaN},l=function(e){return null===e?NaN:+e},s=function(e,t){var n,r,a=e.length,o=0,i=0,u=-1,c=0;if(null==t)for(;++u1)return i/(c-1)},d=function(e,t){var n=s(e,t);return n?Math.sqrt(n):n},h=function(e,t){var n,r,a,o=-1,i=e.length;if(null==t){for(;++o=r){n=a=r;break}for(;++or&&(n=r),a=r){n=a=r;break}for(;++or&&(n=r),a=s;)d.pop(),--h;var p,b=new Array(h+1);for(a=0;a<=h;++a)p=b[a]=[],p.x0=a>0?d[a-1]:l,p.x1=a=1)return+n(e[r-1],r-1,e);var r,a=(r-1)*t,o=Math.floor(a),i=+n(e[o],o,e),u=+n(e[o+1],o+1,e);return i+(u-i)*(a-o)}},O=function(e,t,n){return e=g.call(e,l).sort(a),Math.ceil((n-t)/(2*(k(e,.75)-k(e,.25))*Math.pow(e.length,-1/3)))},A=function(e,t,n){return Math.ceil((n-t)/(3.5*d(e)*Math.pow(e.length,-1/3)))},C=function(e,t){var n,r,a=-1,o=e.length;if(null==t){for(;++a=r){n=r;break}for(;++an&&(n=r)}else{for(;++a=r){n=r;break}for(;++an&&(n=r)}return n},T=function(e,t){var n,r=0,a=e.length,o=-1,i=a;if(null==t)for(;++o=0;)for(r=e[a],t=r.length;--t>=0;)n[--i]=r[t];return n},F=function(e,t){var n,r,a=-1,o=e.length;if(null==t){for(;++a=r){n=r;break}for(;++ar&&(n=r)}else{for(;++a=r){n=r;break}for(;++ar&&(n=r)}return n},Y=function R(e){for(var t=0,n=e.length-1,r=e[0],R=new Array(n<0?0:n);t=f.length)return null!=c?c(t):null!=u?t.sort(u):t;for(var i,l,s,d=-1,h=t.length,p=f[r++],b=n(),g=a();++df.length)return e;var r,a=l[n-1];return null!=c&&n>=f.length?r=e.entries():(r=[],e.each(function(e,a){r.push({key:a,values:t(e,n)})})),null!=a?r.sort(function(e,t){return a(e.key,t.key)}):r}var u,c,m,f=[],l=[];return m={object:function(t){return e(t,0,r,a)},map:function(t){return e(t,0,o,i)},entries:function(n){return t(e(n,0,o,i),0)},key:function(e){return f.push(e),m},sortKeys:function(e){return l[f.length-1]=e,m},sortValues:function(e){return u=e,m},rollup:function(e){return c=e,m}}},s=n.prototype;u.prototype=c.prototype={constructor:u,has:s.has,add:function(e){return e+="",this[f+e]=e,this},remove:s.remove,clear:s.clear,values:s.keys,size:s.size,empty:s.empty,each:s.each};var d=function w(e){var w=[];for(var t in e)w.push(t);return w},h=function M(e){var M=[];for(var t in e)M.push(e[t]);return M},p=function _(e){var _=[];for(var t in e)_.push({key:t,value:e[t]});return _};e.nest=l,e.set=c,e.map=n,e.keys=d,e.values=h,e.entries=p,Object.defineProperty(e,"__esModule",{value:!0})})},{}],3:[function(e,t,n){!function(e,r){"object"===("undefined"==typeof n?"undefined":_typeof(n))&&"undefined"!=typeof t?r(n):"function"==typeof define&&define.amd?define(["exports"],r):r(e.d3=e.d3||{})}(this,function(e){function t(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function n(){}function r(e){var t;return e=(e+"").trim().toLowerCase(),(t=F.exec(e))?(t=parseInt(t[1],16),new c(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1)):(t=Y.exec(e))?a(parseInt(t[1],16)):(t=E.exec(e))?new c(t[1],t[2],t[3],1):(t=U.exec(e))?new c(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=I.exec(e))?o(t[1],t[2],t[3],t[4]):(t=P.exec(e))?o(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=q.exec(e))?f(t[1],t[2]/100,t[3]/100,1):(t=L.exec(e))?f(t[1],t[2]/100,t[3]/100,t[4]):H.hasOwnProperty(e)?a(H[e]):"transparent"===e?new c(NaN,NaN,NaN,0):null}function a(e){return new c(e>>16&255,e>>8&255,255&e,1)}function o(e,t,n,r){return r<=0&&(e=t=n=NaN),new c(e,t,n,r)}function i(e){return e instanceof n||(e=r(e)),e?(e=e.rgb(),new c(e.r,e.g,e.b,e.opacity)):new c}function u(e,t,n,r){return 1===arguments.length?i(e):new c(e,t,n,null==r?1:r)}function c(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function f(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new d(e,t,n,r)}function l(e){if(e instanceof d)return new d(e.h,e.s,e.l,e.opacity);if(e instanceof n||(e=r(e)),!e)return new d;if(e instanceof d)return e;e=e.rgb();var t=e.r/255,a=e.g/255,o=e.b/255,i=Math.min(t,a,o),u=Math.max(t,a,o),c=NaN,f=u-i,l=(u+i)/2;return f?(c=t===u?(a-o)/f+6*(a0&&l<1?0:c,new d(c,f,l,e.opacity)}function s(e,t,n,r){return 1===arguments.length?l(e):new d(e,t,n,null==r?1:r)}function d(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function h(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}function p(e){if(e instanceof g)return new g(e.l,e.a,e.b,e.opacity);if(e instanceof x){var t=e.h*$;return new g(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof c||(e=i(e));var n=w(e.r),r=w(e.g),a=w(e.b),o=y((.4124564*n+.3575761*r+.1804375*a)/X),u=y((.2126729*n+.7151522*r+.072175*a)/W),f=y((.0193339*n+.119192*r+.9503041*a)/z);return new g(116*u-16,500*(o-u),200*(u-f),e.opacity)}function b(e,t,n,r){return 1===arguments.length?p(e):new g(e,t,n,null==r?1:r)}function g(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function y(e){return e>G?Math.pow(e,1/3):e/Z+V}function v(e){return e>Q?e*e*e:Z*(e-V)}function m(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function w(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function M(e){if(e instanceof x)return new x(e.h,e.c,e.l,e.opacity);e instanceof g||(e=p(e));var t=Math.atan2(e.b,e.a)*R;return new x(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function _(e,t,n,r){return 1===arguments.length?M(e):new x(e,t,n,null==r?1:r)}function x(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}function j(e){if(e instanceof k)return new k(e.h,e.s,e.l,e.opacity);e instanceof c||(e=i(e));var t=e.r/255,n=e.g/255,r=e.b/255,a=(oe*r+re*t-ae*n)/(oe+re-ae),o=r-a,u=(ne*(n-a)-ee*o)/te,f=Math.sqrt(u*u+o*o)/(ne*a*(1-a)),l=f?Math.atan2(u,o)*R-120:NaN;return new k(l<0?l+360:l,f,a,e.opacity)}function S(e,t,n,r){return 1===arguments.length?j(e):new k(e,t,n,null==r?1:r)}function k(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}var O=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e},A=.7,C=1/A,T="\\s*([+-]?\\d+)\\s*",N="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",D="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",F=/^#([0-9a-f]{3})$/,Y=/^#([0-9a-f]{6})$/,E=new RegExp("^rgb\\("+[T,T,T]+"\\)$"),U=new RegExp("^rgb\\("+[D,D,D]+"\\)$"),I=new RegExp("^rgba\\("+[T,T,T,N]+"\\)$"),P=new RegExp("^rgba\\("+[D,D,D,N]+"\\)$"),q=new RegExp("^hsl\\("+[N,D,D]+"\\)$"),L=new RegExp("^hsla\\("+[N,D,D,N]+"\\)$"),H={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,rebeccapurple:6697881,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};O(n,r,{displayable:function(){return this.rgb().displayable()},toString:function(){return this.rgb()+""}}),O(c,u,t(n,{brighter:function(e){return e=null==e?C:Math.pow(C,e),new c(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=null==e?A:Math.pow(A,e),new c(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},toString:function(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(1===e?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),O(d,s,t(n,{brighter:function(e){return e=null==e?C:Math.pow(C,e),new d(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?A:Math.pow(A,e),new d(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,a=2*n-r;return new c(h(e>=240?e-240:e+120,a,r),h(e,a,r),h(e<120?e+240:e-120,a,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,R=180/Math.PI,B=18,X=.95047,W=1,z=1.08883,V=4/29,Q=6/29,Z=3*Q*Q,G=Q*Q*Q;O(g,b,t(n,{brighter:function(e){return new g(this.l+B*(null==e?1:e),this.a,this.b,this.opacity)},darker:function(e){return new g(this.l-B*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function(){var e=(this.l+16)/116,t=isNaN(this.a)?e:e+this.a/500,n=isNaN(this.b)?e:e-this.b/200;return e=W*v(e),t=X*v(t),n=z*v(n),new c(m(3.2404542*t-1.5371385*e-.4985314*n),m(-.969266*t+1.8760108*e+.041556*n),m(.0556434*t-.2040259*e+1.0572252*n),this.opacity)}})),O(x,_,t(n,{brighter:function(e){return new x(this.h,this.c,this.l+B*(null==e?1:e),this.opacity)},darker:function(e){return new x(this.h,this.c,this.l-B*(null==e?1:e),this.opacity)},rgb:function(){return p(this).rgb()}}));var J=-.14861,K=1.78277,ee=-.29227,te=-.90649,ne=1.97294,re=ne*te,ae=ne*K,oe=K*ee-te*J;O(k,S,t(n,{brighter:function(e){return e=null==e?C:Math.pow(C,e),new k(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?A:Math.pow(A,e),new k(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),a=Math.sin(e);return new c(255*(t+n*(J*r+K*a)),255*(t+n*(ee*r+te*a)),255*(t+n*(ne*r)),this.opacity)}})),e.color=r,e.rgb=u,e.hsl=s,e.lab=b,e.hcl=_,e.cubehelix=S,Object.defineProperty(e,"__esModule",{value:!0})})},{}],4:[function(e,t,n){!function(e,r){"object"===("undefined"==typeof n?"undefined":_typeof(n))&&"undefined"!=typeof t?r(n):"function"==typeof define&&define.amd?define(["exports"],r):r(e.d3=e.d3||{})}(this,function(e){function t(e){return+e}function n(e){return e*e}function r(e){return e*(2-e)}function a(e){return((e*=2)<=1?e*e:--e*(2-e)+1)/2}function o(e){return e*e*e}function i(e){return--e*e*e+1}function u(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}function c(e){return 1-Math.cos(e*S)}function f(e){return Math.sin(e*S)}function l(e){return(1-Math.cos(j*e))/2}function s(e){return Math.pow(2,10*e-10)}function d(e){return 1-Math.pow(2,-10*e)}function h(e){return((e*=2)<=1?Math.pow(2,10*e-10):2-Math.pow(2,10-10*e))/2}function p(e){return 1-Math.sqrt(1-e*e)}function b(e){return Math.sqrt(1- --e*e)}function g(e){return((e*=2)<=1?1-Math.sqrt(1-e*e):Math.sqrt(1-(e-=2)*e)+1)/2}function y(e){return 1-v(1-e)}function v(e){return(e=+e)1?r[0]+r.slice(2):r,+e.slice(n+1)]}function n(e){return e=t(Math.abs(e)),e?e[1]:NaN}function r(e,t){return function(n,r){for(var a=n.length,o=[],i=0,u=e[0],c=0;a>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),o.push(n.substring(a-=u,a+u)),!((c+=u+1)>r));)u=e[i=(i+1)%e.length];return o.reverse().join(t)}}function a(e,t){e=e.toPrecision(t);e:for(var n,r=e.length,a=1,o=-1;a0&&(o=0)}return o>0?e.slice(0,o)+e.slice(n+1):e}function o(e,n){var r=t(e,n);if(!r)return e+"";var a=r[0],o=r[1],i=o-(b=3*Math.max(-8,Math.min(8,Math.floor(o/3))))+1,u=a.length;return i===u?a:i>u?a+new Array(i-u+1).join("0"):i>0?a.slice(0,i)+"."+a.slice(i):"0."+new Array(1-i).join("0")+t(e,Math.max(0,n+i-1))[0]}function i(e,n){var r=t(e,n);if(!r)return e+"";var a=r[0],o=r[1];return o<0?"0."+new Array((-o)).join("0")+a:a.length>o+1?a.slice(0,o+1)+"."+a.slice(o+1):a+new Array(o-a.length+2).join("0")}function u(e){return new c(e)}function c(e){if(!(t=y.exec(e)))throw new Error("invalid format: "+e);var t,n=t[1]||" ",r=t[2]||">",a=t[3]||"-",o=t[4]||"",i=!!t[5],u=t[6]&&+t[6],c=!!t[7],f=t[8]&&+t[8].slice(1),l=t[9]||"";"n"===l?(c=!0,l="g"):g[l]||(l=""),(i||"0"===n&&"="===r)&&(i=!0,n="0",r="="),this.fill=n,this.align=r,this.sign=a,this.symbol=o,this.zero=i,this.width=u,this.comma=c,this.precision=f,this.type=l}function f(e){return e}function l(e){function t(e){function t(e){var t,i,u,f=y,g=v;if("c"===p)g=w(e)+g,e="";else{e=+e;var _=(e<0||1/e<0)&&(e*=-1,!0);if(e=w(e,h),_)for(t=-1,i=e.length,_=!1;++tu||u>57){g=(46===u?c+e.slice(t+1):e.slice(t))+g,e=e.slice(0,t);break}}d&&!l&&(e=o(e,1/0));var x=f.length+e.length+g.length,j=x>1)+f+e+g+j.slice(x)}return j+f+e+g}e=u(e);var n=e.fill,r=e.align,a=e.sign,f=e.symbol,l=e.zero,s=e.width,d=e.comma,h=e.precision,p=e.type,y="$"===f?i[0]:"#"===f&&/[boxX]/.test(p)?"0"+p.toLowerCase():"",v="$"===f?i[1]:/[%p]/.test(p)?"%":"",w=g[p],M=!p||/[defgprs%]/.test(p);return h=null==h?p?6:12:/[gprs]/.test(p)?Math.max(1,Math.min(21,h)):Math.max(0,Math.min(20,h)),t.toString=function(){return e+""},t}function a(e,r){var a=t((e=u(e),e.type="f",e)),o=3*Math.max(-8,Math.min(8,Math.floor(n(r)/3))),i=Math.pow(10,-o),c=m[8+o/3];return function(e){return a(i*e)+c}}var o=e.grouping&&e.thousands?r(e.grouping,e.thousands):f,i=e.currency,c=e.decimal;return{format:t,formatPrefix:a}}function s(t){return v=l(t),e.format=v.format,e.formatPrefix=v.formatPrefix,v}function d(e){return Math.max(0,-n(Math.abs(e)))}function h(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(n(t)/3)))-n(Math.abs(e)))}function p(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,n(t)-n(e))+1}var b,g={"":a,"%":function(e,t){return(100*e).toFixed(t)},b:function(e){return Math.round(e).toString(2)},c:function(e){return e+""},d:function(e){return Math.round(e).toString(10)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},g:function(e,t){return e.toPrecision(t)},o:function(e){return Math.round(e).toString(8)},p:function(e,t){return i(100*e,t)},r:i,s:o,X:function(e){return Math.round(e).toString(16).toUpperCase()},x:function(e){return Math.round(e).toString(16)}},y=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;c.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var v,m=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];s({decimal:".",thousands:",",grouping:[3],currency:["$",""]}),e.formatDefaultLocale=s,e.formatLocale=l,e.formatSpecifier=u,e.precisionFixed=d,e.precisionPrefix=h,e.precisionRound=p,Object.defineProperty(e,"__esModule",{value:!0})})},{}],6:[function(e,t,n){!function(r,a){"object"===("undefined"==typeof n?"undefined":_typeof(n))&&"undefined"!=typeof t?a(n,e("d3-color")):"function"==typeof define&&define.amd?define(["exports","d3-color"],a):a(r.d3=r.d3||{},r.d3)}(this,function(e,t){function n(e,t,n,r,a){var o=e*e,i=o*e;return((1-3*e+3*o-i)*t+(4-6*o+3*i)*n+(1+3*e+3*o-3*i)*r+i*a)/6}function r(e,t){return function(n){return e+n*t}}function a(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function o(e,t){var n=t-e;return n?r(e,n>180||n<-180?n-360*Math.round(n/360):n):O(isNaN(e)?t:e)}function i(e){return 1===(e=+e)?u:function(t,n){return n-t?a(t,n,e):O(isNaN(t)?n:t)}}function u(e,t){var n=t-e;return n?r(e,n):O(isNaN(e)?t:e)}function c(e){return function(n){var r,a,o=n.length,i=new Array(o),u=new Array(o),c=new Array(o);for(r=0;r180?t+=360:t-e>180&&(e+=360),o.push({i:n.push(a(n)+"rotate(",null,r)-2,x:F(e,t)})):t&&n.push(a(n)+"rotate("+t+r)}function u(e,t,n,o){e!==t?o.push({i:n.push(a(n)+"skewX(",null,r)-2,x:F(e,t)}):t&&n.push(a(n)+"skewX("+t+r)}function c(e,t,n,r,o,i){if(e!==n||t!==r){var u=o.push(a(o)+"scale(",null,",",null,")");i.push({i:u-4,x:F(e,n)},{i:u-2,x:F(t,r)})}else 1===n&&1===r||o.push(a(o)+"scale("+n+","+r+")")}return function(t,n){var r=[],a=[];return t=e(t),n=e(n),o(t.translateX,t.translateY,n.translateX,n.translateY,r,a),i(t.rotate,n.rotate,r,a),u(t.skewX,n.skewX,r,a),c(t.scaleX,t.scaleY,n.scaleX,n.scaleY,r,a),t=n=null,function(e){for(var t,n=-1,o=a.length;++n=1?(r=1,t-1):Math.floor(r*t),o=e[a],i=e[a+1],u=a>0?e[a-1]:2*o-i,c=ao&&(a=t.slice(o,a),u[i]?u[i]+=a:u[++i]=a),(n=n[0])===(r=r[0])?u[i]?u[i]+=r:u[++i]=r:(u[++i]=null,c.push({i:i,x:F(n,r)})),o=U.lastIndex;return o=n?1:r(e)}}}function p(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}function b(e,t,n,r){var a=e[0],o=e[1],i=t[0],u=t[1];return o2?g:b,i=u=null,a}function a(t){return(i||(i=o(c,f,s?h(e):e,l)))(+t)}var o,i,u,c=W,f=W,l=r.interpolate,s=!1;return a.invert=function(e){return(u||(u=o(f,c,d,s?p(t):t)))(+e)},a.domain=function(e){return arguments.length?(c=H.call(e,X),n()):c.slice()},a.range=function(e){return arguments.length?(f=$.call(e),n()):f.slice()},a.rangeRound=function(e){return f=$.call(e),l=r.interpolateRound,n()},a.clamp=function(e){return arguments.length?(s=!!e,n()):s},a.interpolate=function(e){return arguments.length?(l=e,n()):l},n()}function m(e){var n=e.domain;return e.ticks=function(e){var r=n();return t.ticks(r[0],r[r.length-1],null==e?10:e)},e.tickFormat=function(e,t){return z(n(),e,t)},e.nice=function(r){var a=n(),o=a.length-1,i=null==r?10:r,u=a[0],c=a[o],f=t.tickStep(u,c,i);return f&&(f=t.tickStep(Math.floor(u/f)*f,Math.ceil(c/f)*f,i),a[0]=Math.floor(u/f)*f,a[o]=Math.ceil(c/f)*f,n(a)),e},e}function w(){var e=v(d,r.interpolateNumber);return e.copy=function(){return y(e,w())},m(e)}function M(){function e(e){return+e}var t=[0,1];return e.invert=e,e.domain=e.range=function(n){return arguments.length?(t=H.call(n,X),e):t.slice()},e.copy=function(){return M().domain(t)},m(e)}function _(e,t){return(t=Math.log(t/e))?function(n){return Math.log(n/e)/t}:B(t)}function x(e,t){return e<0?function(n){return-Math.pow(-t,n)*Math.pow(-e,1-n)}:function(n){return Math.pow(t,n)*Math.pow(e,1-n)}}function j(e){return isFinite(e)?+("1e"+e):e<0?0:e}function S(e){return 10===e?j:e===Math.E?Math.exp:function(t){return Math.pow(e,t)}}function k(e){return e===Math.E?Math.log:10===e&&Math.log10||2===e&&Math.log2||(e=Math.log(e),function(t){return Math.log(t)/e})}function O(e){return function(t){return-e(-t)}}function A(){function e(){return i=k(o),u=S(o),r()[0]<0&&(i=O(i),u=O(u)),n}var n=v(_,x).domain([1,10]),r=n.domain,o=10,i=k(10),u=S(10);return n.base=function(t){return arguments.length?(o=+t,e()):o},n.domain=function(t){return arguments.length?(r(t),e()):r()},n.ticks=function(e){var n,a=r(),c=a[0],f=a[a.length-1];(n=f0){for(;hf)break;g.push(d)}}else for(;h=1;--s)if(d=l*s,!(df)break;g.push(d)}}else g=t.ticks(h,p,Math.min(p-h,b)).map(u);return n?g.reverse():g},n.tickFormat=function(e,t){if(null==t&&(t=10===o?".0e":","),"function"!=typeof t&&(t=a.format(t)),e===1/0)return t;null==e&&(e=10);var r=Math.max(1,o*e/n.ticks().length);return function(e){var n=e/u(Math.round(i(e)));return n*o0?o[t-1]:r[0],t=o?[i[o-1],a]:[i[t-1],i[t]]},e.copy=function(){return F().domain([r,a]).range(u)},m(e)}function Y(){function e(e){if(e<=e)return r[t.bisect(n,e,0,a)]}var n=[.5],r=[0,1],a=1;return e.domain=function(t){return arguments.length?(n=$.call(t),a=Math.min(n.length,r.length-1),e):n.slice()},e.range=function(t){return arguments.length?(r=$.call(t),a=Math.min(n.length,r.length-1),e):r.slice()},e.invertExtent=function(e){var t=r.indexOf(e);return[n[t-1],n[t]]},e.copy=function(){return Y().domain(n).range(r)},e}function E(e){return new Date(e)}function U(e){return e instanceof Date?+e:+new Date((+e))}function I(e,n,a,o,i,u,c,f,l){function s(t){return(c(t)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return de.h=360*e-100,de.s=1.5-1.5*t,de.l=.8-.9*t,de+""},pe=P(ae("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),be=P(ae("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),ge=P(ae("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),ye=P(ae("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));e.scaleBand=f,e.scalePoint=s,e.scaleIdentity=M,e.scaleLinear=w,e.scaleLog=A,e.scaleOrdinal=c,e.scaleImplicit=R,e.scalePow=T,e.scaleSqrt=N,e.scaleQuantile=D,e.scaleQuantize=F,e.scaleThreshold=Y,e.scaleTime=ne,e.scaleUtc=re,e.schemeCategory10=oe,e.schemeCategory20b=ie,e.schemeCategory20c=ue,e.schemeCategory20=ce,e.interpolateCubehelixDefault=fe,e.interpolateRainbow=he,e.interpolateWarm=le,e.interpolateCool=se,e.interpolateViridis=pe,e.interpolateMagma=be,e.interpolateInferno=ge,e.interpolatePlasma=ye,e.scaleSequential=q,Object.defineProperty(e,"__esModule",{value:!0})})},{"d3-array":1,"d3-collection":2,"d3-color":3,"d3-format":5,"d3-interpolate":6,"d3-time":9,"d3-time-format":8}],8:[function(e,t,n){!function(r,a){"object"===("undefined"==typeof n?"undefined":_typeof(n))&&"undefined"!=typeof t?a(n,e("d3-time")):"function"==typeof define&&define.amd?define(["exports","d3-time"],a):a(r.d3=r.d3||{},r.d3)}(this,function(e,t){function n(e){if(0<=e.y&&e.y<100){var t=new Date((-1),e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function r(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function a(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}function o(e){function t(e,t){return function(n){var r,a,o,i=[],u=-1,c=0,f=e.length;for(n instanceof Date||(n=new Date((+n)));++u=c)return-1;if(a=t.charCodeAt(i++),37===a){if(a=t.charAt(i++),o=Ie[a in re?t.charAt(i++):a],!o||(r=o(e,n,r))<0)return-1}else if(a!=n.charCodeAt(r++))return-1}return r}function u(e,t,n){var r=Se.exec(t.slice(n));return r?(e.p=ke[r[0].toLowerCase()],n+r[0].length):-1}function K(e,t,n){var r=Ce.exec(t.slice(n));return r?(e.w=Te[r[0].toLowerCase()],n+r[0].length):-1}function ee(e,t,n){var r=Oe.exec(t.slice(n));return r?(e.w=Ae[r[0].toLowerCase()],n+r[0].length):-1}function te(e,t,n){var r=Fe.exec(t.slice(n));return r?(e.m=Ye[r[0].toLowerCase()],n+r[0].length):-1}function ne(e,t,n){var r=Ne.exec(t.slice(n));return r?(e.m=De[r[0].toLowerCase()],n+r[0].length):-1}function ae(e,t,n){return i(e,ye,t,n)}function oe(e,t,n){return i(e,ve,t,n)}function ie(e,t,n){return i(e,me,t,n)}function ue(e){return _e[e.getDay()]}function ce(e){return Me[e.getDay()]}function fe(e){return je[e.getMonth()]}function le(e){return xe[e.getMonth()]}function se(e){return we[+(e.getHours()>=12)]}function de(e){return _e[e.getUTCDay()]}function he(e){return Me[e.getUTCDay()]}function pe(e){return je[e.getUTCMonth()]}function be(e){return xe[e.getUTCMonth()]}function ge(e){return we[+(e.getUTCHours()>=12)]}var ye=e.dateTime,ve=e.date,me=e.time,we=e.periods,Me=e.days,_e=e.shortDays,xe=e.months,je=e.shortMonths,Se=c(we),ke=f(we),Oe=c(Me),Ae=f(Me),Ce=c(_e),Te=f(_e),Ne=c(xe),De=f(xe),Fe=c(je),Ye=f(je),Ee={a:ue,A:ce,b:fe,B:le,c:null,d:j,e:j,H:S,I:k,j:O,L:A,m:C,M:T,p:se,S:N,U:D,w:F,W:Y,x:null,X:null,y:E,Y:U,Z:I,"%":J},Ue={a:de,A:he,b:pe,B:be,c:null,d:P,e:P,H:q,I:L,j:H,L:$,m:R,M:B,p:ge,S:X,U:W,w:z,W:V,x:null,X:null,y:Q,Y:Z,Z:G,"%":J},Ie={a:K,A:ee,b:te,B:ne,c:ae,d:y,e:y,H:m,I:m,j:v,L:_,m:g,M:w,p:u,S:M,U:s,w:l,W:d,x:oe,X:ie,y:p,Y:h,Z:b,"%":x};return Ee.x=t(ve,Ee),Ee.X=t(me,Ee),Ee.c=t(ye,Ee),Ue.x=t(ve,Ue),Ue.X=t(me,Ue),Ue.c=t(ye,Ue),{format:function(e){var n=t(e+="",Ee);return n.toString=function(){return e},n},parse:function(e){var t=o(e+="",n);return t.toString=function(){return e},t},utcFormat:function(e){var n=t(e+="",Ue);return n.toString=function(){return e},n},utcParse:function(e){var t=o(e,r);return t.toString=function(){return e},t}}}function i(e,t,n){var r=e<0?"-":"",a=(r?-e:e)+"",o=a.length;return r+(o68?1900:2e3),n+r[0].length):-1}function b(e,t,n){var r=/^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function g(e,t,n){var r=ae.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function y(e,t,n){var r=ae.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function v(e,t,n){var r=ae.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function m(e,t,n){var r=ae.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function w(e,t,n){var r=ae.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function M(e,t,n){var r=ae.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function _(e,t,n){var r=ae.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function x(e,t,n){var r=oe.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function j(e,t){return i(e.getDate(),t,2)}function S(e,t){return i(e.getHours(),t,2)}function k(e,t){return i(e.getHours()%12||12,t,2)}function O(e,n){return i(1+t.timeDay.count(t.timeYear(e),e),n,3)}function A(e,t){return i(e.getMilliseconds(),t,3)}function C(e,t){return i(e.getMonth()+1,t,2)}function T(e,t){return i(e.getMinutes(),t,2)}function N(e,t){return i(e.getSeconds(),t,2)}function D(e,n){return i(t.timeSunday.count(t.timeYear(e),e),n,2)}function F(e){return e.getDay()}function Y(e,n){return i(t.timeMonday.count(t.timeYear(e),e),n,2)}function E(e,t){return i(e.getFullYear()%100,t,2)}function U(e,t){return i(e.getFullYear()%1e4,t,4)}function I(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+i(t/60|0,"0",2)+i(t%60,"0",2)}function P(e,t){return i(e.getUTCDate(),t,2)}function q(e,t){return i(e.getUTCHours(),t,2)}function L(e,t){return i(e.getUTCHours()%12||12,t,2)}function H(e,n){return i(1+t.utcDay.count(t.utcYear(e),e),n,3)}function $(e,t){return i(e.getUTCMilliseconds(),t,3)}function R(e,t){return i(e.getUTCMonth()+1,t,2)}function B(e,t){return i(e.getUTCMinutes(),t,2)}function X(e,t){return i(e.getUTCSeconds(),t,2)}function W(e,n){return i(t.utcSunday.count(t.utcYear(e),e),n,2)}function z(e){return e.getUTCDay()}function V(e,n){return i(t.utcMonday.count(t.utcYear(e),e),n,2)}function Q(e,t){return i(e.getUTCFullYear()%100,t,2)}function Z(e,t){return i(e.getUTCFullYear()%1e4,t,4)}function G(){return"+0000"}function J(){return"%"}function K(t){return ne=o(t),e.timeFormat=ne.format,e.timeParse=ne.parse,e.utcFormat=ne.utcFormat,e.utcParse=ne.utcParse,ne}function ee(e){return e.toISOString()}function te(e){var t=new Date(e);return isNaN(t)?null:t}var ne,re={"-":"",_:" ",0:"0"},ae=/^\s*\d+/,oe=/^%/,ie=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;K({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});var ue="%Y-%m-%dT%H:%M:%S.%LZ",ce=Date.prototype.toISOString?ee:e.utcFormat(ue),fe=+new Date("2000-01-01T00:00:00.000Z")?te:e.utcParse(ue);e.timeFormatDefaultLocale=K,e.timeFormatLocale=o,e.isoFormat=ce,e.isoParse=fe,Object.defineProperty(e,"__esModule",{value:!0})})},{"d3-time":9}],9:[function(e,t,n){!function(e,r){"object"===("undefined"==typeof n?"undefined":_typeof(n))&&"undefined"!=typeof t?r(n):"function"==typeof define&&define.amd?define(["exports"],r):r(e.d3=e.d3||{})}(this,function(e){function t(e,n,r,i){function u(t){return e(t=new Date((+t))),t}return u.floor=u,u.ceil=function(t){return e(t=new Date(t-1)),n(t,1),e(t),t},u.round=function(e){var t=u(e),n=u.ceil(e);return e-t0))return o;do o.push(new Date((+t)));while(n(t,a),e(t),t=t)for(;e(t),!r(t);)t.setTime(t-1)},function(e,t){if(e>=e)for(;--t>=0;)for(;n(e,1),!r(e););})},r&&(u.count=function(t,n){return a.setTime(+t),o.setTime(+n),e(a),e(o),Math.floor(r(a,o))},u.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?u.filter(i?function(t){return i(t)%e===0}:function(t){return u.count(0,t)%e===0}):u:null}),u}function n(e){return t(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*f)/d})}function r(e){return t(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/d})}var a=new Date,o=new Date,i=t(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});i.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?t(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):i:null};var u=i.range,c=1e3,f=6e4,l=36e5,s=864e5,d=6048e5,h=t(function(e){e.setTime(Math.floor(e/c)*c)},function(e,t){e.setTime(+e+t*c)},function(e,t){return(t-e)/c},function(e){return e.getUTCSeconds()}),p=h.range,b=t(function(e){e.setTime(Math.floor(e/f)*f)},function(e,t){e.setTime(+e+t*f)},function(e,t){return(t-e)/f},function(e){return e.getMinutes()}),g=b.range,y=t(function(e){var t=e.getTimezoneOffset()*f%l;t<0&&(t+=l),e.setTime(Math.floor((+e-t)/l)*l+t)},function(e,t){e.setTime(+e+t*l)},function(e,t){return(t-e)/l},function(e){return e.getHours()}),v=y.range,m=t(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*f)/s},function(e){return e.getDate()-1}),w=m.range,M=n(0),_=n(1),x=n(2),j=n(3),S=n(4),k=n(5),O=n(6),A=M.range,C=_.range,T=x.range,N=j.range,D=S.range,F=k.range,Y=O.range,E=t(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()}),U=E.range,I=t(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()});I.every=function(e){return isFinite(e=Math.floor(e))&&e>0?t(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var P=I.range,q=t(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*f)},function(e,t){return(t-e)/f},function(e){return e.getUTCMinutes()}),L=q.range,H=t(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+t*l)},function(e,t){return(t-e)/l},function(e){return e.getUTCHours()}),$=H.range,R=t(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/s},function(e){return e.getUTCDate()-1}),B=R.range,X=r(0),W=r(1),z=r(2),V=r(3),Q=r(4),Z=r(5),G=r(6),J=X.range,K=W.range,ee=z.range,te=V.range,ne=Q.range,re=Z.range,ae=G.range,oe=t(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()}),ie=oe.range,ue=t(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()});ue.every=function(e){return isFinite(e=Math.floor(e))&&e>0?t(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var ce=ue.range;e.timeInterval=t,e.timeMillisecond=i,e.timeMilliseconds=u,e.utcMillisecond=i,e.utcMilliseconds=u,e.timeSecond=h,e.timeSeconds=p,e.utcSecond=h,e.utcSeconds=p,e.timeMinute=b,e.timeMinutes=g,e.timeHour=y,e.timeHours=v,e.timeDay=m,e.timeDays=w,e.timeWeek=M,e.timeWeeks=A,e.timeSunday=M,e.timeSundays=A,e.timeMonday=_,e.timeMondays=C,e.timeTuesday=x,e.timeTuesdays=T,e.timeWednesday=j,e.timeWednesdays=N,e.timeThursday=S,e.timeThursdays=D, +e.timeFriday=k,e.timeFridays=F,e.timeSaturday=O,e.timeSaturdays=Y,e.timeMonth=E,e.timeMonths=U,e.timeYear=I,e.timeYears=P,e.utcMinute=q,e.utcMinutes=L,e.utcHour=H,e.utcHours=$,e.utcDay=R,e.utcDays=B,e.utcWeek=X,e.utcWeeks=J,e.utcSunday=X,e.utcSundays=J,e.utcMonday=W,e.utcMondays=K,e.utcTuesday=z,e.utcTuesdays=ee,e.utcWednesday=V,e.utcWednesdays=te,e.utcThursday=Q,e.utcThursdays=ne,e.utcFriday=Z,e.utcFridays=re,e.utcSaturday=G,e.utcSaturdays=ae,e.utcMonth=oe,e.utcMonths=ie,e.utcYear=ue,e.utcYears=ce,Object.defineProperty(e,"__esModule",{value:!0})})},{}],10:[function(e,t,n){function r(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function a(e,t){for(var n=-1,r=Array(e);++n1?n[a-1]:void 0,i=a>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(a--,o):void 0,i&&h(n[0],n[1],i)&&(o=a<3?void 0:o,a=1),t=Object(t);++r-1&&e%1==0&&e-1&&e%1==0&&e<=j}function M(e){var t="undefined"==typeof e?"undefined":_typeof(e);return!!e&&("object"==t||"function"==t)}function _(e){return!!e&&"object"==("undefined"==typeof e?"undefined":_typeof(e))}function x(e){return y(e)?i(e):c(e)}var j=9007199254740991,S="[object Arguments]",k="[object Function]",O="[object GeneratorFunction]",A=/^(?:0|[1-9]\d*)$/,C=Object.prototype,T=C.hasOwnProperty,N=C.toString,D=C.propertyIsEnumerable,F=o(Object.keys,Object),Y=Math.max,E=!D.call({valueOf:1},"valueOf"),U=Array.isArray,I=s(function(e,t){if(E||p(t)||y(t))return void l(t,x(t),e);for(var n in t)T.call(t,n)&&u(e,n,t[n])});t.exports=I},{}],11:[function(e,t,n){(function(e){function r(e,t){return e.set(t[0],t[1]),e}function a(e,t){return e.add(t),e}function o(e,t){for(var n=-1,r=e?e.length:0;++n-1}function S(e,t){var n=this.__data__,r=L(n,e);return r<0?n.push([e,t]):n[r][1]=t,this}function k(e){var t=-1,n=e?e.length:0;for(this.clear();++t-1&&e%1==0&&e-1&&e%1==0&&e<=Te}function xe(e){var t="undefined"==typeof e?"undefined":_typeof(e);return!!e&&("object"==t||"function"==t)}function je(e){return!!e&&"object"==("undefined"==typeof e?"undefined":_typeof(e))}function Se(e){return me(e)?P(e):z(e)}function ke(){return[]}function Oe(){return!1}var Ae=200,Ce="__lodash_hash_undefined__",Te=9007199254740991,Ne="[object Arguments]",De="[object Array]",Fe="[object Boolean]",Ye="[object Date]",Ee="[object Error]",Ue="[object Function]",Ie="[object GeneratorFunction]",Pe="[object Map]",qe="[object Number]",Le="[object Object]",He="[object Promise]",$e="[object RegExp]",Re="[object Set]",Be="[object String]",Xe="[object Symbol]",We="[object WeakMap]",ze="[object ArrayBuffer]",Ve="[object DataView]",Qe="[object Float32Array]",Ze="[object Float64Array]",Ge="[object Int8Array]",Je="[object Int16Array]",Ke="[object Int32Array]",et="[object Uint8Array]",tt="[object Uint8ClampedArray]",nt="[object Uint16Array]",rt="[object Uint32Array]",at=/[\\^$.*+?()[\]{}|]/g,ot=/\w*$/,it=/^\[object .+?Constructor\]$/,ut=/^(?:0|[1-9]\d*)$/,ct={};ct[Ne]=ct[De]=ct[ze]=ct[Ve]=ct[Fe]=ct[Ye]=ct[Qe]=ct[Ze]=ct[Ge]=ct[Je]=ct[Ke]=ct[Pe]=ct[qe]=ct[Le]=ct[$e]=ct[Re]=ct[Be]=ct[Xe]=ct[et]=ct[tt]=ct[nt]=ct[rt]=!0,ct[Ee]=ct[Ue]=ct[We]=!1;var ft="object"==("undefined"==typeof e?"undefined":_typeof(e))&&e&&e.Object===Object&&e,lt="object"==("undefined"==typeof self?"undefined":_typeof(self))&&self&&self.Object===Object&&self,st=ft||lt||Function("return this")(),dt="object"==("undefined"==typeof n?"undefined":_typeof(n))&&n&&!n.nodeType&&n,ht=dt&&"object"==("undefined"==typeof t?"undefined":_typeof(t))&&t&&!t.nodeType&&t,pt=ht&&ht.exports===dt,bt=Array.prototype,gt=Function.prototype,yt=Object.prototype,vt=st["__core-js_shared__"],mt=function(){var e=/[^.]+$/.exec(vt&&vt.keys&&vt.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),wt=gt.toString,Mt=yt.hasOwnProperty,_t=yt.toString,xt=RegExp("^"+wt.call(Mt).replace(at,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),jt=pt?st.Buffer:void 0,St=st.Symbol,kt=st.Uint8Array,Ot=d(Object.getPrototypeOf,Object),At=Object.create,Ct=yt.propertyIsEnumerable,Tt=bt.splice,Nt=Object.getOwnPropertySymbols,Dt=jt?jt.isBuffer:void 0,Ft=d(Object.keys,Object),Yt=ue(st,"DataView"),Et=ue(st,"Map"),Ut=ue(st,"Promise"),It=ue(st,"Set"),Pt=ue(st,"WeakMap"),qt=ue(Object,"create"),Lt=be(Yt),Ht=be(Et),$t=be(Ut),Rt=be(It),Bt=be(Pt),Xt=St?St.prototype:void 0,Wt=Xt?Xt.valueOf:void 0;p.prototype.clear=b,p.prototype["delete"]=g,p.prototype.get=y,p.prototype.has=v,p.prototype.set=m,w.prototype.clear=M,w.prototype["delete"]=_,w.prototype.get=x,w.prototype.has=j,w.prototype.set=S,k.prototype.clear=O,k.prototype["delete"]=A,k.prototype.get=C,k.prototype.has=T,k.prototype.set=N,D.prototype.clear=F,D.prototype["delete"]=Y,D.prototype.get=E,D.prototype.has=U,D.prototype.set=I;var zt=Nt?d(Nt,Object):ke,Vt=X;(Yt&&Vt(new Yt(new ArrayBuffer(1)))!=Ve||Et&&Vt(new Et)!=Pe||Ut&&Vt(Ut.resolve())!=He||It&&Vt(new It)!=Re||Pt&&Vt(new Pt)!=We)&&(Vt=function(e){var t=_t.call(e),n=t==Le?e.constructor:void 0,r=n?be(n):void 0;if(r)switch(r){case Lt:return Ve;case Ht:return Pe;case $t:return He;case Rt:return Re;case Bt:return We}return t});var Qt=Array.isArray,Zt=Dt||Oe;t.exports=ge}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],12:[function(e,t,n){function r(e,t){for(var n=-1,r=e?e.length:0;++n-1&&e%1==0&&e-1&&e%1==0&&e<=x}function m(e){var t="undefined"==typeof e?"undefined":_typeof(e);return!!e&&("object"==t||"function"==t)}function w(e){return!!e&&"object"==("undefined"==typeof e?"undefined":_typeof(e))}function M(e){return b(e)?i(e):c(e)}function _(e){return e}var x=9007199254740991,j="[object Arguments]",S="[object Function]",k="[object GeneratorFunction]",O=/^(?:0|[1-9]\d*)$/,A=Object.prototype,C=A.hasOwnProperty,T=A.toString,N=A.propertyIsEnumerable,D=o(Object.keys,Object),F=f(u),Y=l(),E=Array.isArray;t.exports=h},{}],13:[function(e,t,n){(function(e){function r(e,t){return null==e?void 0:e[t]}function a(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(n){}return t}function o(e,t){return function(n){return e(t(n))}}function i(e){return X.call(e)}function u(e){if(!v(e)||f(e))return!1;var t=g(e)||a(e)?W:D;return t.test(s(e))}function c(e,t){var n=r(e,t);return u(n)?n:void 0}function f(e){return!!$&&$ in e}function l(e){var t=e&&e.constructor,n="function"==typeof t&&t.prototype||L;return e===n}function s(e){if(null!=e){try{return R.call(e)}catch(t){}try{return e+""}catch(t){}}return""}function d(e){return p(e)&&B.call(e,"callee")&&(!V.call(e,"callee")||X.call(e)==_)}function h(e){return null!=e&&y(e.length)&&!g(e)}function p(e){return m(e)&&h(e)}function b(e){if(h(e)&&(fe(e)||"string"==typeof e||"function"==typeof e.splice||le(e)||d(e)))return!e.length;var t=ce(e);if(t==S||t==A)return!e.size;if(ne||l(e))return!Z(e).length;for(var n in e)if(B.call(e,n))return!1;return!0}function g(e){var t=v(e)?X.call(e):"";return t==x||t==j}function y(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=M}function v(e){var t="undefined"==typeof e?"undefined":_typeof(e);return!!e&&("object"==t||"function"==t)}function m(e){return!!e&&"object"==("undefined"==typeof e?"undefined":_typeof(e))}function w(){return!1}var M=9007199254740991,_="[object Arguments]",x="[object Function]",j="[object GeneratorFunction]",S="[object Map]",k="[object Object]",O="[object Promise]",A="[object Set]",C="[object WeakMap]",T="[object DataView]",N=/[\\^$.*+?()[\]{}|]/g,D=/^\[object .+?Constructor\]$/,F="object"==("undefined"==typeof e?"undefined":_typeof(e))&&e&&e.Object===Object&&e,Y="object"==("undefined"==typeof self?"undefined":_typeof(self))&&self&&self.Object===Object&&self,E=F||Y||Function("return this")(),U="object"==("undefined"==typeof n?"undefined":_typeof(n))&&n&&!n.nodeType&&n,I=U&&"object"==("undefined"==typeof t?"undefined":_typeof(t))&&t&&!t.nodeType&&t,P=I&&I.exports===U,q=Function.prototype,L=Object.prototype,H=E["__core-js_shared__"],$=function(){var e=/[^.]+$/.exec(H&&H.keys&&H.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),R=q.toString,B=L.hasOwnProperty,X=L.toString,W=RegExp("^"+R.call(B).replace(N,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),z=P?E.Buffer:void 0,V=L.propertyIsEnumerable,Q=z?z.isBuffer:void 0,Z=o(Object.keys,Object),G=c(E,"DataView"),J=c(E,"Map"),K=c(E,"Promise"),ee=c(E,"Set"),te=c(E,"WeakMap"),ne=!V.call({valueOf:1},"valueOf"),re=s(G),ae=s(J),oe=s(K),ie=s(ee),ue=s(te),ce=i;(G&&ce(new G(new ArrayBuffer(1)))!=T||J&&ce(new J)!=S||K&&ce(K.resolve())!=O||ee&&ce(new ee)!=A||te&&ce(new te)!=C)&&(ce=function(e){var t=X.call(e),n=t==k?e.constructor:void 0,r=n?s(n):void 0;if(r)switch(r){case re:return T;case ae:return S;case oe:return O;case ie:return A;case ue:return C}return t});var fe=Array.isArray,le=Q||w;t.exports=b}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],14:[function(e,t,n){(function(e){function r(e,t){for(var n=-1,r=e?e.length:0;++n-1}function _(e,t){var n=this.__data__,r=q(n,e);return r<0?n.push([e,t]):n[r][1]=t,this}function x(e){var t=-1,n=e?e.length:0;for(this.clear();++tc))return!1;var l=i.get(e);if(l&&i.get(t))return l==t;var s=-1,d=!0,h=o&pe?new C:void 0;for(i.set(e,t),i.set(t,e);++s-1&&e%1==0&&e-1&&e%1==0&&e<=ge}function fe(e){var t="undefined"==typeof e?"undefined":_typeof(e);return!!e&&("object"==t||"function"==t)}function le(e){return!!e&&"object"==("undefined"==typeof e?"undefined":_typeof(e))}function se(e){return ae(e)?P(e):X(e)}var de=200,he="__lodash_hash_undefined__",pe=1,be=2,ge=9007199254740991,ye="[object Arguments]",ve="[object Array]",me="[object Boolean]",we="[object Date]",Me="[object Error]",_e="[object Function]",xe="[object GeneratorFunction]",je="[object Map]",Se="[object Number]",ke="[object Object]",Oe="[object Promise]",Ae="[object RegExp]",Ce="[object Set]",Te="[object String]",Ne="[object Symbol]",De="[object WeakMap]",Fe="[object ArrayBuffer]",Ye="[object DataView]",Ee="[object Float32Array]",Ue="[object Float64Array]",Ie="[object Int8Array]",Pe="[object Int16Array]",qe="[object Int32Array]",Le="[object Uint8Array]",He="[object Uint8ClampedArray]",$e="[object Uint16Array]",Re="[object Uint32Array]",Be=/[\\^$.*+?()[\]{}|]/g,Xe=/^\[object .+?Constructor\]$/,We=/^(?:0|[1-9]\d*)$/,ze={};ze[Ee]=ze[Ue]=ze[Ie]=ze[Pe]=ze[qe]=ze[Le]=ze[He]=ze[$e]=ze[Re]=!0,ze[ye]=ze[ve]=ze[Fe]=ze[me]=ze[Ye]=ze[we]=ze[Me]=ze[_e]=ze[je]=ze[Se]=ze[ke]=ze[Ae]=ze[Ce]=ze[Te]=ze[De]=!1;var Ve="object"==("undefined"==typeof e?"undefined":_typeof(e))&&e&&e.Object===Object&&e,Qe="object"==("undefined"==typeof self?"undefined":_typeof(self))&&self&&self.Object===Object&&self,Ze=Ve||Qe||Function("return this")(),Ge="object"==("undefined"==typeof n?"undefined":_typeof(n))&&n&&!n.nodeType&&n,Je=Ge&&"object"==("undefined"==typeof t?"undefined":_typeof(t))&&t&&!t.nodeType&&t,Ke=Je&&Je.exports===Ge,et=Ke&&Ve.process,tt=function(){try{return et&&et.binding("util")}catch(e){}}(),nt=tt&&tt.isTypedArray,rt=Array.prototype,at=Function.prototype,ot=Object.prototype,it=Ze["__core-js_shared__"],ut=function(){var e=/[^.]+$/.exec(it&&it.keys&&it.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),ct=at.toString,ft=ot.hasOwnProperty,lt=ot.toString,st=RegExp("^"+ct.call(ft).replace(Be,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),dt=Ze.Symbol,ht=Ze.Uint8Array,pt=ot.propertyIsEnumerable,bt=rt.splice,gt=f(Object.keys,Object),yt=Z(Ze,"DataView"),vt=Z(Ze,"Map"),mt=Z(Ze,"Promise"),wt=Z(Ze,"Set"),Mt=Z(Ze,"WeakMap"),_t=Z(Object,"create"),xt=te(yt),jt=te(vt),St=te(mt),kt=te(wt),Ot=te(Mt),At=dt?dt.prototype:void 0,Ct=At?At.valueOf:void 0;s.prototype.clear=d,s.prototype["delete"]=h,s.prototype.get=p,s.prototype.has=b,s.prototype.set=g,y.prototype.clear=v,y.prototype["delete"]=m,y.prototype.get=w,y.prototype.has=M,y.prototype.set=_,x.prototype.clear=j,x.prototype["delete"]=S,x.prototype.get=k,x.prototype.has=O,x.prototype.set=A,C.prototype.add=C.prototype.push=T,C.prototype.has=N,D.prototype.clear=F,D.prototype["delete"]=Y,D.prototype.get=E,D.prototype.has=U,D.prototype.set=I;var Tt=L;(yt&&Tt(new yt(new ArrayBuffer(1)))!=Ye||vt&&Tt(new vt)!=je||mt&&Tt(mt.resolve())!=Oe||wt&&Tt(new wt)!=Ce||Mt&&Tt(new Mt)!=De)&&(Tt=function(e){var t=lt.call(e),n=t==ke?e.constructor:void 0,r=n?te(n):void 0;if(r)switch(r){case xt:return Ye;case jt:return je;case St:return Oe;case kt:return Ce;case Ot:return De}return t});var Nt=Array.isArray,Dt=nt?o(nt):B;t.exports=ie}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],15:[function(e,t,n){function r(e){this.callback=e,this.ticking=!1}window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,r.prototype={constructor:r,update:function(){this.callback&&this.callback(),this.ticking=!1},requestTick:function(){this.ticking||(requestAnimationFrame(this.rafCallback||(this.rafCallback=this.update.bind(this))),this.ticking=!0)},handleEvent:function(){this.requestTick()}},t.exports=r},{}],16:[function(e,t,n){function r(e){e=a(r.options,e),this.lastKnownScrollY=0,this.initialised=!1,this.onScrollCallback=e.onScrollCallback}var a=(e("lodash.isequal"),e("lodash.foreach"),e("lodash.isempty"),e("lodash.clone"),e("lodash.assign")),o=e("./Debouncer");r.prototype={constructor:r,init:function(){return this.debouncer=new o(this.update.bind(this)),setTimeout(this.attachEvent.bind(this),100),this},attachEvent:function(){this.initialised||(this.lastKnownScrollY=this.getScrollY(),this.initialised=!0,window.addEventListener("scroll",this.debouncer,!1),this.debouncer.handleEvent())},getScrollY:function(){return void 0!==window.pageYOffset?window.pageYOffset:void 0!==window.scrollTop?window.scrollTop:(document.documentElement||document.body.parentNode||document.body).scrollTop},update:function(){var e=this.getScrollY();e>this.lastKnownScrollY?"down":"up";this.onScrollCallback(e),this.lastKnownScrollY=e},destroy:function(){this.initialised=!1,window.removeEventListener("scroll",this.debouncer,!1)}},r.options={onScrollCallback:function(){}},t.exports=r},{"./Debouncer":15,"lodash.assign":10,"lodash.clone":11,"lodash.foreach":12,"lodash.isempty":13,"lodash.isequal":14}],17:[function(e,t,n){function r(e){e=a(e,r.options),this.PROPERTIES=["translateX","translateY","opacity","scale"],this.keyframes=e.keyframes}function a(e){if(arguments.length<=0)throw new Error("Missing arguments in extend function");var t,n,r=e||{};for(n=1;n=n.reveal.when&&t.updateCSSClass(n.element,n.reveal.className)})}var t=this;return new i({onScrollCallback:e.bind(this)}).init(),this.toAnimate=this.keyframes.filter(function(e){return e.animate}),this.toReveal=this.keyframes.filter(function(e){return e.reveal}),this.toAnimate.forEach(function(e){e&&e.animate.forEach(function(n){n.scale=t.createScale(n.property,e.domain,n.range)})}),this},calculatePropertyValues:function(e,t){var n=this,r=new Object;return this.PROPERTIES.forEach(function(a){r[a]=n.getDefaultPropertyValue(a),e.forEach(function(e){e.property==a&&(r[a]=n.scaleValue(e.scale,t))})}),r},scaleValue:function(e,t){return e(t)},updateCSSValues:function(e,t){return e.style.transform="translate3d("+t.translateX+"px, "+t.translateY+"px, 0) scale("+t.scale+")",e.style.opacity=t.opacity,e},updateCSSClass:function(e,t){return e.classList?e.classList.add(t):e.className+=" "+t,e},getDefaultPropertyValue:function(e){switch(e){case"translateX":return 0;case"translateY":return 0;case"scale":return 1;case"rotate":return 0;case"opacity":return 1;default:return null}},createScale:function(e,t,n){switch(e){case"translateX":case"translateY":case"scale":case"opacity":return u.scaleLinear().domain(t).range(n).interpolate(this.easeInterpolate(f.easeCubicOut)).clamp(!0);default:return null}},easeInterpolate:function(e){return function(t,n){var r=c.interpolate(t,n);return function(t){return Math.round(100*r(e(t)))/100}}}},r.options={keyframes:{}},t.exports=r},{"./Scrllr.js":16,"d3-ease":4,"d3-interpolate":6,"d3-scale":7}],18:[function(e,t,n){function r(e,t,n,a,o,i){a=a?a:0;var u=document.documentElement,c=u.clientHeight,f="scrollMaxY"in window?window.scrollMaxY:u.scrollHeight-c,l=window.pageYOffset,s=l,d=isNaN(e)?e.getBoundingClientRect():0;"center"===o?(s+=isNaN(e)?d.top+d.height/2:e,s-=c/2,s-=a):"bottom"===o?(s+=d.bottom||e,s-=c,s+=a):(s+=d.top||e,s-=a),s=Math.max(Math.min(f,s),0);var h=s-l,p={targetY:s,deltaY:h,duration:t?t:0,easing:n in r.Easing?r.Easing[n]:r.Easing.linear,onFinish:i,startTime:Date.now(),lastY:l,step:r.step};window.requestAnimationFrame(p.step.bind(p))}r.Easing={linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return e*(2-e)},easeInOutQuad:function(e){return e<.5?2*e*e:-1+(4-2*e)*e},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return--e*e*e+1},easeInOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return 1- --e*e*e*e},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return 1+--e*e*e*e*e},easeInOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e}},r.step=function(){if(this.lastY!==window.pageYOffset&&this.onFinish)return void this.onFinish();var e=Math.min((Date.now()-this.startTime)/this.duration,1),t=this.targetY-(1-this.easing(e))*this.deltaY; +window.scrollTo(window.scrollX,t),1!==e?(this.lastY=window.pageYOffset,window.requestAnimationFrame(this.step.bind(this))):this.onFinish&&this.onFinish()},t.exports=r},{}],19:[function(e,t,n){var r=e("./lib/ScrollOver.js"),a=e("./lib/animateScroll.js"),o=document.querySelectorAll("body")[0],i=(document.querySelectorAll(".tagline")[0],document.querySelectorAll(".phone-wrap--iphone")[0]),u=document.querySelectorAll(".phone-wrap--android")[0],c=document.querySelectorAll(".features-wrap")[0],f=document.querySelectorAll(".slide--two")[0],l=document.querySelectorAll(".slide--three")[0];setTimeout(function(){return o.classList.add("shown")},400),document.querySelectorAll(".more-button")[0].addEventListener("click",function(e){a(f,600,"easeInOutCubic",0),e.preventDefault()}),document.querySelectorAll(".nav__item--features")[0].addEventListener("click",function(e){a(f,600,"easeInOutCubic",0),e.preventDefault()}),document.querySelectorAll(".nav__item--about")[0].addEventListener("click",function(e){a(l,600,"easeInOutCubic",0),e.preventDefault()}),document.querySelectorAll(".button--scroll-top")[0].addEventListener("click",function(e){a(o,1e3,"easeInOutCubic",0),e.preventDefault()}),new r({keyframes:[{element:i,domain:[0,800],animate:[{property:"translateY",range:[0,60]}]},{element:u,domain:[0,800],animate:[{property:"translateY",range:[0,110]}]},{element:c,domain:[200,800],animate:[{property:"translateY",range:[0,-40]}]},{element:f,reveal:{when:700,className:"slide--shown"}},{element:l,reveal:{when:1400,className:"slide--shown"}}]}).init()},{"./lib/ScrollOver.js":17,"./lib/animateScroll.js":18}]},{},[19]); +//# sourceMappingURL=app.js.map diff --git a/src/js/app.js.map b/src/js/app.js.map new file mode 100644 index 0000000..1b21a33 --- /dev/null +++ b/src/js/app.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["app.js"],"names":["_typeof","Symbol","iterator","obj","constructor","prototype","e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","global","factory","define","amd","d3","this","ascendingComparator","d","x","ascending","tickStep","start","stop","count","step0","Math","abs","max","step1","pow","floor","log","LN10","error","e10","e5","e2","b","NaN","bisector","compare","left","lo","hi","mid","right","ascendingBisect","bisectRight","bisectLeft","descending","number","variance","array","m","j","isNaN","deviation","v","sqrt","extent","c","Array","slice","map","constant","identity","range","step","arguments","ceil","ticks","sturges","values","LN2","histogram","data","value","xz","domain","x0","x1","tz","threshold","isArray","shift","pop","bin","bins","push","_","thresholds","quantile","p","h","freedmanDiaconis","min","sort","scott","mean","median","numbers","merge","arrays","merged","pairs","permute","indexes","permutes","scan","xi","xj","shuffle","i0","i1","random","sum","transpose","matrix","row","zip","bisect","thresholdFreedmanDiaconis","thresholdScott","thresholdSturges","Object","defineProperty","2","Map","object","each","key","set","createObject","setObject","createMap","setMap","map$$1","Set","add","prefix","has","get","remove","property","clear","keys","entries","size","empty","nest","apply","depth","createResult","setResult","_rollup","_sortValues","keyValue","valuesByKey","result","_entries","sortKey","_sortKeys","k","sortKeys","order","sortValues","rollup","proto","3","extend","parent","definition","create","Color","color","format","trim","toLowerCase","reHex3","exec","parseInt","Rgb","reHex6","rgbn","reRgbInteger","reRgbPercent","reRgbaInteger","rgba","reRgbaPercent","reHslPercent","hsla","reHslaPercent","named","hasOwnProperty","g","rgbConvert","rgb","opacity","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","labConvert","Lab","Hcl","deg2rad","cos","sin","rgb2xyz","xyz2lab","Xn","y","Yn","z","Zn","lab","t3","t2","t0","lab2xyz","t1","xyz2rgb","hclConvert","atan2","rad2deg","hcl","cubehelixConvert","Cubehelix","BC_DA","ED","EB","bl","E","C","D","cubehelix","_darker","_brighter","reI","reN","reP","RegExp","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","displayable","toString","brighter","darker","round","PI","Kn","A","B","cosh","sinh","4","linear","quadIn","quadOut","quadInOut","cubicIn","cubicOut","cubicInOut","sinIn","halfPi","sinOut","sinInOut","pi","expIn","expOut","expInOut","circleIn","circleOut","circleInOut","bounceIn","bounceOut","b1","b0","b3","b2","b4","b6","b5","b7","b8","b9","bounceInOut","exponent","polyIn","custom","polyOut","polyInOut","overshoot","backIn","backOut","backInOut","tau","amplitude","period","elasticIn","asin","elasticOut","elasticInOut","easeLinear","easeQuad","easeQuadIn","easeQuadOut","easeQuadInOut","easeCubic","easeCubicIn","easeCubicOut","easeCubicInOut","easePoly","easePolyIn","easePolyOut","easePolyInOut","easeSin","easeSinIn","easeSinOut","easeSinInOut","easeExp","easeExpIn","easeExpOut","easeExpInOut","easeCircle","easeCircleIn","easeCircleOut","easeCircleInOut","easeBounce","easeBounceIn","easeBounceOut","easeBounceInOut","easeBack","easeBackIn","easeBackOut","easeBackInOut","easeElastic","easeElasticIn","easeElasticOut","easeElasticInOut","5","formatDecimal","toExponential","indexOf","coefficient","formatGroup","grouping","thousands","width","substring","reverse","join","formatDefault","toPrecision","out","formatPrefixAuto","prefixExponent","formatRounded","formatSpecifier","specifier","FormatSpecifier","match","re","fill","align","sign","symbol","zero","comma","precision","type","formatTypes","formatLocale","locale","newFormat","valuePrefix","valueSuffix","suffix","formatType","valueNegative","charCodeAt","prefixes","maybeSuffix","decimal","group","Infinity","padding","currency","test","formatPrefix","defaultLocale","precisionFixed","precisionPrefix","precisionRound","","%","toFixed","_p","X","toUpperCase","_x","formatDefaultLocale","6","d3Color","basis","v0","v1","v2","v3","exponential","hue","gamma","nogamma","rgbSpline","spline","colors","color$$1","one","parseCss","cssNode","document","createElement","cssRoot","documentElement","cssView","defaultView","style","transform","getComputedStyle","appendChild","getPropertyValue","removeChild","split","decompose","parseSvg","svgNode","createElementNS","setAttribute","baseVal","consolidate","interpolateTransform","parse","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","q","rotate","skewX","scale","translateX","translateY","scaleX","scaleY","exp","tanh","hsl$1","hue$$1","end","lab$1","hcl$1","cubehelix$1","cubehelixGamma","cubehelix$$1","basis$1","basisClosed","rgb$1","rgbGamma","rgb$$1","rgbBasis","rgbBasisClosed","nb","na","date","Date","setTime","reA","reB","source","string","am","bm","bs","bi","lastIndex","index","degrees","atan","interpolateTransformCss","interpolateTransformSvg","rho","SQRT2","rho2","rho4","epsilon2","zoom","p0","p1","S","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","d1","r0","r1","coshr0","duration","hsl$2","hslLong","hcl$2","hclLong","cubehelix$2","cubehelixLong","quantize","interpolator","samples","interpolate","interpolateArray","interpolateBasis","interpolateBasisClosed","interpolateDate","interpolateNumber","interpolateObject","interpolateRound","interpolateString","interpolateZoom","interpolateRgb","interpolateRgbBasis","interpolateRgbBasisClosed","interpolateHsl","interpolateHslLong","interpolateLab","interpolateHcl","interpolateHclLong","interpolateCubehelix","interpolateCubehelixLong","d3-color","7","d3Array","d3Collection","d3Interpolate","d3Format","d3Time","d3TimeFormat","ordinal","range$$1","unknown","implicit","copy","band","rescale","paddingInner","paddingOuter","bandwidth","ordinalRange","undefined","rangeRound","pointish","point","deinterpolateLinear","deinterpolateClamp","deinterpolate","reinterpolateClamp","reinterpolate","bimap","d0","polymap","target","clamp","continuous","piecewise","output","input","interpolate$$1","unit","invert","map$1","linearish","tickFormat","nice","pow10","isFinite","powp","base","logp","log10","log2","reflect","logs","pows","raise","quantile$1","invertExtent","quantiles","number$1","calendar","year","month","week","day","hour","minute","second","millisecond","format$$1","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","formatYear","tickInterval","interval","tickIntervals","durationYear","every","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","ramp","sequential","name","time","timeYear","timeMonth","timeWeek","timeDay","timeHour","timeMinute","timeSecond","timeMillisecond","timeFormat","utcTime","utcYear","utcMonth","utcWeek","utcDay","utcHour","utcMinute","utcSecond","utcMillisecond","utcFormat","UTC","category10","category20b","category20c","category20","warm","cool","rainbow","rainbow$1","ts","viridis","magma","inferno","plasma","scaleBand","scalePoint","scaleIdentity","scaleLinear","scaleLog","scaleOrdinal","scaleImplicit","scalePow","scaleSqrt","scaleQuantile","scaleQuantize","scaleThreshold","scaleTime","scaleUtc","schemeCategory10","schemeCategory20b","schemeCategory20c","schemeCategory20","interpolateCubehelixDefault","interpolateRainbow","interpolateWarm","interpolateCool","interpolateViridis","interpolateMagma","interpolateInferno","interpolatePlasma","scaleSequential","d3-array","d3-collection","d3-format","d3-interpolate","d3-time","d3-time-format","8","localDate","H","M","L","setFullYear","utcDate","setUTCFullYear","newYear","formats","pad","pads","charAt","newParse","newDate","parseSpecifier","w","getUTCDay","getDay","W","U","Z","parses","parsePeriod","periodRe","periodLookup","parseShortWeekday","shortWeekdayRe","shortWeekdayLookup","parseWeekday","weekdayRe","weekdayLookup","parseShortMonth","shortMonthRe","shortMonthLookup","parseMonth","monthRe","monthLookup","parseLocaleDateTime","locale_dateTime","parseLocaleDate","locale_date","parseLocaleTime","locale_time","formatShortWeekday","locale_shortWeekdays","formatWeekday","locale_weekdays","formatShortMonth","locale_shortMonths","getMonth","locale_months","formatPeriod","locale_periods","getHours","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","getUTCMonth","formatUTCMonth","formatUTCPeriod","getUTCHours","dateTime","periods","days","shortDays","months","shortMonths","formatRe","formatLookup","formatDayOfMonth","formatHour24","I","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekNumberSunday","formatWeekdayNumber","formatWeekNumberMonday","Y","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekNumberSunday","formatUTCWeekdayNumber","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parseDayOfMonth","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseSeconds","parseWeekNumberSunday","parseWeekdayNumber","parseWeekNumberMonday","parseYear","parseFullYear","parseZone","parseLiteralPercent","utcParse","requote","replace","requoteRe","names","numberRe","percentRe","getDate","getMilliseconds","getMinutes","getSeconds","timeSunday","timeMonday","getFullYear","getTimezoneOffset","getUTCDate","getUTCMilliseconds","getUTCMinutes","getUTCSeconds","utcSunday","utcMonday","getUTCFullYear","locale$1","timeParse","formatIsoNative","toISOString","parseIsoNative","-","0","isoSpecifier","formatIso","parseIso","timeFormatDefaultLocale","timeFormatLocale","isoFormat","isoParse","9","newInterval","floori","offseti","field","offset","filter","weekday","setDate","setHours","utcWeekday","setUTCDate","setUTCHours","milliseconds","seconds","minutes","hours","sunday","monday","tuesday","wednesday","thursday","friday","saturday","sundays","mondays","tuesdays","wednesdays","thursdays","fridays","saturdays","setMonth","years","setUTCSeconds","utcMinutes","setUTCMinutes","utcHours","utcDays","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcSundays","utcMondays","utcTuesdays","utcWednesdays","utcThursdays","utcFridays","utcSaturdays","setUTCMonth","utcMonths","utcYears","timeInterval","timeMilliseconds","utcMilliseconds","timeSeconds","utcSeconds","timeMinutes","timeHours","timeDays","timeWeeks","timeSundays","timeMondays","timeTuesday","timeTuesdays","timeWednesday","timeWednesdays","timeThursday","timeThursdays","timeFriday","timeFridays","timeSaturday","timeSaturdays","timeMonths","timeYears","utcWeeks","10","func","thisArg","args","baseTimes","iteratee","overArg","arg","arrayLikeKeys","inherited","isArguments","String","skipIndexes","isIndex","assignValue","objValue","eq","baseKeys","isPrototype","nativeKeys","baseRest","nativeMax","otherArgs","copyObject","props","customizer","newValue","createAssigner","assigner","sources","guard","isIterateeCall","MAX_SAFE_INTEGER","reIsUint","isObject","isArrayLike","Ctor","objectProto","other","isArrayLikeObject","propertyIsEnumerable","objectToString","argsTag","isLength","isFunction","isObjectLike","tag","funcTag","genTag","nonEnumShadows","valueOf","assign","11","addMapEntry","pair","addSetEntry","arrayEach","arrayPush","arrayReduce","accumulator","initAccum","getValue","isHostObject","mapToArray","forEach","setToArray","Hash","entry","hashClear","__data__","nativeCreate","hashDelete","hashGet","HASH_UNDEFINED","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","splice","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","hash","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","cache","LARGE_ARRAY_SIZE","baseAssign","baseClone","isDeep","isFull","stack","isArr","initCloneArray","copyArray","getTag","isFunc","isBuffer","cloneBuffer","objectTag","initCloneObject","copySymbols","cloneableTags","initCloneByTag","stacked","getAllKeys","subValue","baseCreate","objectCreate","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","baseIsNative","isMasked","pattern","reIsNative","reIsHostCtor","toSource","buffer","cloneArrayBuffer","arrayBuffer","byteLength","Uint8Array","cloneDataView","dataView","byteOffset","cloneMap","cloneFunc","cloneRegExp","regexp","reFlags","cloneSet","cloneSymbol","symbolValueOf","cloneTypedArray","typedArray","getSymbols","isKeyable","getNative","getPrototype","arrayBufferTag","boolTag","dateTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","mapTag","numberTag","stringTag","regexpTag","setTag","symbolTag","maskSrcKey","funcToString","clone","stubArray","stubFalse","arrayTag","errorTag","promiseTag","weakMapTag","reRegExpChar","freeGlobal","freeSelf","self","root","Function","freeExports","nodeType","freeModule","moduleExports","arrayProto","funcProto","coreJsData","uid","IE_PROTO","Buffer","_Symbol","getPrototypeOf","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","DataView","Promise","WeakMap","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","ArrayBuffer","resolve","ctorString","window","12","baseForOwn","baseFor","createBaseEach","eachFunc","fromRight","collection","iterable","createBaseFor","baseEach","13","isEmpty","14","arraySome","predicate","baseUnary","SetCache","setCacheAdd","setCacheHas","baseIsEqual","bitmask","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","isTypedArray","equalArrays","equalByTag","PARTIAL_COMPARE_FLAG","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsTypedArray","typedArrayTags","isPartial","arrLength","othLength","seen","UNORDERED_COMPARE_FLAG","arrValue","othValue","compared","othIndex","message","convert","objProps","objLength","othProps","skipCtor","objCtor","othCtor","isEqual","freeProcess","process","nodeUtil","binding","nodeIsTypedArray","_Symbol2","15","Debouncer","callback","ticking","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","update","requestTick","rafCallback","bind","handleEvent","16","Scrllr","options","extendObject","lastKnownScrollY","initialised","onScrollCallback","debouncer","init","setTimeout","attachEvent","getScrollY","addEventListener","pageYOffset","scrollTop","body","parentNode","currentScrollY","destroy","removeEventListener","./Debouncer","lodash.assign","lodash.clone","lodash.foreach","lodash.isempty","lodash.isequal","17","ScrollOver","PROPERTIES","keyframes","replacement","isDOMElement","Scale","Interpolator","Ease","scrollY","_this2","toAnimate","keyframe","updateCSSValues","element","calculatePropertyValues","animate","toReveal","reveal","when","updateCSSClass","className","_this","item","createScale","animations","_this3","CSSValues","propertyName","getDefaultPropertyValue","animation","scaleValue","CSS","classList","easeInterpolate","ease","./Scrllr.js","d3-ease","d3-scale","18","animateScroll","easing","onFinish","docElem","windowHeight","clientHeight","maxScroll","scrollMaxY","scrollHeight","currentY","targetY","elementBounds","getBoundingClientRect","top","height","bottom","deltaY","Easing","startTime","now","lastY","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","scrollTo","scrollX","19","querySelectorAll","iphone","android","features","slideTwo","slideThree","event","preventDefault","./lib/ScrollOver.js","./lib/animateScroll.js"],"mappings":"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","file":"app.js","sourcesContent":["\"use strict\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n(function e(t, n, r) {\n function s(o, u) {\n if (!n[o]) {\n if (!t[o]) {\n var a = typeof require == \"function\" && require;if (!u && a) return a(o, !0);if (i) return i(o, !0);var f = new Error(\"Cannot find module '\" + o + \"'\");throw f.code = \"MODULE_NOT_FOUND\", f;\n }var l = n[o] = { exports: {} };t[o][0].call(l.exports, function (e) {\n var n = t[o][1][e];return s(n ? n : e);\n }, l, l.exports, e, t, n, r);\n }return n[o].exports;\n }var i = typeof require == \"function\" && require;for (var o = 0; o < r.length; o++) {\n s(r[o]);\n }return s;\n})({ 1: [function (require, module, exports) {\n // https://d3js.org/d3-array/ Version 1.0.2. Copyright 2016 Mike Bostock.\n (function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.d3 = global.d3 || {});\n })(this, function (exports) {\n 'use strict';\n\n var ascending = function ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n };\n\n var bisector = function bisector(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;else hi = mid;\n }\n return lo;\n },\n right: function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;else lo = mid + 1;\n }\n return lo;\n }\n };\n };\n\n function ascendingComparator(f) {\n return function (d, x) {\n return ascending(f(d), x);\n };\n }\n\n var ascendingBisect = bisector(ascending);\n var bisectRight = ascendingBisect.right;\n var bisectLeft = ascendingBisect.left;\n\n var descending = function descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n };\n\n var number = function number(x) {\n return x === null ? NaN : +x;\n };\n\n var variance = function variance(array, f) {\n var n = array.length,\n m = 0,\n a,\n d,\n s = 0,\n i = -1,\n j = 0;\n\n if (f == null) {\n while (++i < n) {\n if (!isNaN(a = number(array[i]))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n } else {\n while (++i < n) {\n if (!isNaN(a = number(f(array[i], i, array)))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n }\n\n if (j > 1) return s / (j - 1);\n };\n\n var deviation = function deviation(array, f) {\n var v = variance(array, f);\n return v ? Math.sqrt(v) : v;\n };\n\n var extent = function extent(array, f) {\n var i = -1,\n n = array.length,\n a,\n b,\n c;\n\n if (f == null) {\n while (++i < n) {\n if ((b = array[i]) != null && b >= b) {\n a = c = b;break;\n }\n }while (++i < n) {\n if ((b = array[i]) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n } else {\n while (++i < n) {\n if ((b = f(array[i], i, array)) != null && b >= b) {\n a = c = b;break;\n }\n }while (++i < n) {\n if ((b = f(array[i], i, array)) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n }\n\n return [a, c];\n };\n\n var array = Array.prototype;\n\n var slice = array.slice;\n var map = array.map;\n\n var constant = function constant(x) {\n return function () {\n return x;\n };\n };\n\n var identity = function identity(x) {\n return x;\n };\n\n var range = function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n };\n\n var e10 = Math.sqrt(50);\n var e5 = Math.sqrt(10);\n var e2 = Math.sqrt(2);\n\n var ticks = function ticks(start, stop, count) {\n var step = tickStep(start, stop, count);\n return range(Math.ceil(start / step) * step, Math.floor(stop / step) * step + step / 2, // inclusive\n step);\n };\n\n function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;else if (error >= e5) step1 *= 5;else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n }\n\n var sturges = function sturges(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n };\n\n var histogram = function histogram() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n var i,\n n = data.length,\n x,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);\n\n // Remove any thresholds outside the domain.\n var m = tz.length;\n while (tz[0] <= x0) {\n tz.shift(), --m;\n }while (tz[m - 1] >= x1) {\n tz.pop(), --m;\n }var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n for (i = 0; i < n; ++i) {\n x = values[i];\n if (x0 <= x && x <= x1) {\n bins[bisectRight(tz, x, 0, m)].push(data[i]);\n }\n }\n\n return bins;\n }\n\n histogram.value = function (_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function (_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function (_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n };\n\n return histogram;\n };\n\n var quantile = function quantile(array, p, f) {\n if (f == null) f = number;\n if (!(n = array.length)) return;\n if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);\n if (p >= 1) return +f(array[n - 1], n - 1, array);\n var n,\n h = (n - 1) * p,\n i = Math.floor(h),\n a = +f(array[i], i, array),\n b = +f(array[i + 1], i + 1, array);\n return a + (b - a) * (h - i);\n };\n\n var freedmanDiaconis = function freedmanDiaconis(values, min, max) {\n values = map.call(values, number).sort(ascending);\n return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n };\n\n var scott = function scott(values, min, max) {\n return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n };\n\n var max = function max(array, f) {\n var i = -1,\n n = array.length,\n a,\n b;\n\n if (f == null) {\n while (++i < n) {\n if ((b = array[i]) != null && b >= b) {\n a = b;break;\n }\n }while (++i < n) {\n if ((b = array[i]) != null && b > a) a = b;\n }\n } else {\n while (++i < n) {\n if ((b = f(array[i], i, array)) != null && b >= b) {\n a = b;break;\n }\n }while (++i < n) {\n if ((b = f(array[i], i, array)) != null && b > a) a = b;\n }\n }\n\n return a;\n };\n\n var mean = function mean(array, f) {\n var s = 0,\n n = array.length,\n a,\n i = -1,\n j = n;\n\n if (f == null) {\n while (++i < n) {\n if (!isNaN(a = number(array[i]))) s += a;else --j;\n }\n } else {\n while (++i < n) {\n if (!isNaN(a = number(f(array[i], i, array)))) s += a;else --j;\n }\n }\n\n if (j) return s / j;\n };\n\n var median = function median(array, f) {\n var numbers = [],\n n = array.length,\n a,\n i = -1;\n\n if (f == null) {\n while (++i < n) {\n if (!isNaN(a = number(array[i]))) numbers.push(a);\n }\n } else {\n while (++i < n) {\n if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);\n }\n }\n\n return quantile(numbers.sort(ascending), 0.5);\n };\n\n var merge = function merge(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) {\n j += arrays[i].length;\n }merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n };\n\n var min = function min(array, f) {\n var i = -1,\n n = array.length,\n a,\n b;\n\n if (f == null) {\n while (++i < n) {\n if ((b = array[i]) != null && b >= b) {\n a = b;break;\n }\n }while (++i < n) {\n if ((b = array[i]) != null && a > b) a = b;\n }\n } else {\n while (++i < n) {\n if ((b = f(array[i], i, array)) != null && b >= b) {\n a = b;break;\n }\n }while (++i < n) {\n if ((b = f(array[i], i, array)) != null && a > b) a = b;\n }\n }\n\n return a;\n };\n\n var pairs = function pairs(array) {\n var i = 0,\n n = array.length - 1,\n p = array[0],\n pairs = new Array(n < 0 ? 0 : n);\n while (i < n) {\n pairs[i] = [p, p = array[++i]];\n }return pairs;\n };\n\n var permute = function permute(array, indexes) {\n var i = indexes.length,\n permutes = new Array(i);\n while (i--) {\n permutes[i] = array[indexes[i]];\n }return permutes;\n };\n\n var scan = function scan(array, compare) {\n if (!(n = array.length)) return;\n var i = 0,\n n,\n j = 0,\n xi,\n xj = array[j];\n\n if (!compare) compare = ascending;\n\n while (++i < n) {\n if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;\n }if (compare(xj, xj) === 0) return j;\n };\n\n var shuffle = function shuffle(array, i0, i1) {\n var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n\n return array;\n };\n\n var sum = function sum(array, f) {\n var s = 0,\n n = array.length,\n a,\n i = -1;\n\n if (f == null) {\n while (++i < n) {\n if (a = +array[i]) s += a;\n } // Note: zero and null are equivalent.\n } else {\n while (++i < n) {\n if (a = +f(array[i], i, array)) s += a;\n }\n }\n\n return s;\n };\n\n var transpose = function transpose(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n };\n\n function length(d) {\n return d.length;\n }\n\n var zip = function zip() {\n return transpose(arguments);\n };\n\n exports.bisect = bisectRight;\n exports.bisectRight = bisectRight;\n exports.bisectLeft = bisectLeft;\n exports.ascending = ascending;\n exports.bisector = bisector;\n exports.descending = descending;\n exports.deviation = deviation;\n exports.extent = extent;\n exports.histogram = histogram;\n exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n exports.thresholdScott = scott;\n exports.thresholdSturges = sturges;\n exports.max = max;\n exports.mean = mean;\n exports.median = median;\n exports.merge = merge;\n exports.min = min;\n exports.pairs = pairs;\n exports.permute = permute;\n exports.quantile = quantile;\n exports.range = range;\n exports.scan = scan;\n exports.shuffle = shuffle;\n exports.sum = sum;\n exports.ticks = ticks;\n exports.tickStep = tickStep;\n exports.transpose = transpose;\n exports.variance = variance;\n exports.zip = zip;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n });\n }, {}], 2: [function (require, module, exports) {\n // https://d3js.org/d3-collection/ Version 1.0.2. Copyright 2016 Mike Bostock.\n (function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.d3 = global.d3 || {});\n })(this, function (exports) {\n 'use strict';\n\n var prefix = \"$\";\n\n function Map() {}\n\n Map.prototype = map.prototype = {\n constructor: Map,\n has: function has(key) {\n return prefix + key in this;\n },\n get: function get(key) {\n return this[prefix + key];\n },\n set: function set(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function remove(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function clear() {\n for (var property in this) {\n if (property[0] === prefix) delete this[property];\n }\n },\n keys: function keys() {\n var keys = [];\n for (var property in this) {\n if (property[0] === prefix) keys.push(property.slice(1));\n }return keys;\n },\n values: function values() {\n var values = [];\n for (var property in this) {\n if (property[0] === prefix) values.push(this[property]);\n }return values;\n },\n entries: function entries() {\n var entries = [];\n for (var property in this) {\n if (property[0] === prefix) entries.push({ key: property.slice(1), value: this[property] });\n }return entries;\n },\n size: function size() {\n var size = 0;\n for (var property in this) {\n if (property[0] === prefix) ++size;\n }return size;\n },\n empty: function empty() {\n for (var property in this) {\n if (property[0] === prefix) return false;\n }return true;\n },\n each: function each(f) {\n for (var property in this) {\n if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n }\n };\n\n function map(object, f) {\n var map = new Map();\n\n // Copy constructor.\n if (object instanceof Map) object.each(function (value, key) {\n map.set(key, value);\n });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) {\n map.set(i, object[i]);\n } else while (++i < n) {\n map.set(f(o = object[i], i, object), o);\n }\n }\n\n // Convert object to map.\n else if (object) for (var key in object) {\n map.set(key, object[key]);\n }return map;\n }\n\n var nest = function nest() {\n var keys = [],\n _sortKeys = [],\n _sortValues,\n _rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) return _rollup != null ? _rollup(array) : _sortValues != null ? array.sort(_sortValues) : array;\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function (values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function _entries(map$$1, depth) {\n if (++depth > keys.length) return map$$1;\n var array,\n sortKey = _sortKeys[depth - 1];\n if (_rollup != null && depth >= keys.length) array = map$$1.entries();else array = [], map$$1.each(function (v, k) {\n array.push({ key: k, values: _entries(v, depth) });\n });\n return sortKey != null ? array.sort(function (a, b) {\n return sortKey(a.key, b.key);\n }) : array;\n }\n\n return nest = {\n object: function object(array) {\n return apply(array, 0, createObject, setObject);\n },\n map: function map(array) {\n return apply(array, 0, createMap, setMap);\n },\n entries: function entries(array) {\n return _entries(apply(array, 0, createMap, setMap), 0);\n },\n key: function key(d) {\n keys.push(d);return nest;\n },\n sortKeys: function sortKeys(order) {\n _sortKeys[keys.length - 1] = order;return nest;\n },\n sortValues: function sortValues(order) {\n _sortValues = order;return nest;\n },\n rollup: function rollup(f) {\n _rollup = f;return nest;\n }\n };\n };\n\n function createObject() {\n return {};\n }\n\n function setObject(object, key, value) {\n object[key] = value;\n }\n\n function createMap() {\n return map();\n }\n\n function setMap(map$$1, key, value) {\n map$$1.set(key, value);\n }\n\n function Set() {}\n\n var proto = map.prototype;\n\n Set.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function add(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n };\n\n function set(object, f) {\n var set = new Set();\n\n // Copy constructor.\n if (object instanceof Set) object.each(function (value) {\n set.add(value);\n });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1,\n n = object.length;\n if (f == null) while (++i < n) {\n set.add(object[i]);\n } else while (++i < n) {\n set.add(f(object[i], i, object));\n }\n }\n\n return set;\n }\n\n var keys = function keys(map) {\n var keys = [];\n for (var key in map) {\n keys.push(key);\n }return keys;\n };\n\n var values = function values(map) {\n var values = [];\n for (var key in map) {\n values.push(map[key]);\n }return values;\n };\n\n var entries = function entries(map) {\n var entries = [];\n for (var key in map) {\n entries.push({ key: key, value: map[key] });\n }return entries;\n };\n\n exports.nest = nest;\n exports.set = set;\n exports.map = map;\n exports.keys = keys;\n exports.values = values;\n exports.entries = entries;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n });\n }, {}], 3: [function (require, module, exports) {\n // https://d3js.org/d3-color/ Version 1.0.2. Copyright 2016 Mike Bostock.\n (function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.d3 = global.d3 || {});\n })(this, function (exports) {\n 'use strict';\n\n var define = function define(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n };\n\n function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) {\n prototype[key] = definition[key];\n }return prototype;\n }\n\n function Color() {}\n\n var _darker = 0.7;\n var _brighter = 1 / _darker;\n\n var reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\";\n var reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\";\n var reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\";\n var reHex3 = /^#([0-9a-f]{3})$/;\n var reHex6 = /^#([0-9a-f]{6})$/;\n var reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\");\n var reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\");\n var reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\");\n var reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\");\n var reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\");\n var reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\n var named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n };\n\n define(Color, color, {\n displayable: function displayable() {\n return this.rgb().displayable();\n },\n toString: function toString() {\n return this.rgb() + \"\";\n }\n });\n\n function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb(m >> 8 & 0xf | m >> 4 & 0x0f0, m >> 4 & 0xf | m & 0xf0, (m & 0xf) << 4 | m & 0xf, 1) // #f00\n ) : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0) : null;\n }\n\n function rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n }\n\n function rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n }\n\n function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb();\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n }\n\n function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n }\n\n function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n }\n\n define(Rgb, rgb, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function rgb() {\n return this;\n },\n displayable: function displayable() {\n return 0 <= this.r && this.r <= 255 && 0 <= this.g && this.g <= 255 && 0 <= this.b && this.b <= 255 && 0 <= this.opacity && this.opacity <= 1;\n },\n toString: function toString() {\n var a = this.opacity;a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\") + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \" + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \" + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n }));\n\n function hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;else if (l <= 0 || l >= 1) h = s = NaN;else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n }\n\n function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl();\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;else if (g === max) h = (b - r) / s + 2;else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n }\n\n function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n }\n\n function Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n }\n\n define(Hsl, hsl, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity);\n },\n displayable: function displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1;\n }\n }));\n\n /* From FvD 13.37, CSS Color Module Level 3 */\n function hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60 : h < 180 ? m2 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 : m1) * 255;\n }\n\n var deg2rad = Math.PI / 180;\n var rad2deg = 180 / Math.PI;\n\n var Kn = 18;\n var Xn = 0.950470;\n var Yn = 1;\n var Zn = 1.088830;\n var t0 = 4 / 29;\n var t1 = 6 / 29;\n var t2 = 3 * t1 * t1;\n var t3 = t1 * t1 * t1;\n\n function labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var b = rgb2xyz(o.r),\n a = rgb2xyz(o.g),\n l = rgb2xyz(o.b),\n x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n }\n\n function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n }\n\n function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n }\n\n define(Lab, lab, extend(Color, {\n brighter: function brighter(k) {\n return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function darker(k) {\n return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Rgb(xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z), xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z), this.opacity);\n }\n }));\n\n function xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n }\n\n function lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n }\n\n function xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n }\n\n function rgb2xyz(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n }\n\n function hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n }\n\n function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n }\n\n function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n }\n\n define(Hcl, hcl, extend(Color, {\n brighter: function brighter(k) {\n return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);\n },\n darker: function darker(k) {\n return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);\n },\n rgb: function rgb() {\n return labConvert(this).rgb();\n }\n }));\n\n var A = -0.14861;\n var B = +1.78277;\n var C = -0.29227;\n var D = -0.90649;\n var E = +1.97294;\n var ED = E * D;\n var EB = E * B;\n var BC_DA = B * C - D * A;\n\n function cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)),\n // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n }\n\n function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n }\n\n function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n }\n\n define(Cubehelix, cubehelix, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);\n }\n }));\n\n exports.color = color;\n exports.rgb = rgb;\n exports.hsl = hsl;\n exports.lab = lab;\n exports.hcl = hcl;\n exports.cubehelix = cubehelix;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n });\n }, {}], 4: [function (require, module, exports) {\n // https://d3js.org/d3-ease/ Version 1.0.2. Copyright 2016 Mike Bostock.\n (function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.d3 = global.d3 || {});\n })(this, function (exports) {\n 'use strict';\n\n function linear(t) {\n return +t;\n }\n\n function quadIn(t) {\n return t * t;\n }\n\n function quadOut(t) {\n return t * (2 - t);\n }\n\n function quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n }\n\n function cubicIn(t) {\n return t * t * t;\n }\n\n function cubicOut(t) {\n return --t * t * t + 1;\n }\n\n function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n }\n\n var exponent = 3;\n\n var polyIn = function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n }(exponent);\n\n var polyOut = function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n }(exponent);\n\n var polyInOut = function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n }(exponent);\n\n var pi = Math.PI;\n var halfPi = pi / 2;\n\n function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n }\n\n function sinOut(t) {\n return Math.sin(t * halfPi);\n }\n\n function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n }\n\n function expIn(t) {\n return Math.pow(2, 10 * t - 10);\n }\n\n function expOut(t) {\n return 1 - Math.pow(2, -10 * t);\n }\n\n function expInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\n }\n\n function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n\n function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n }\n\n function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n }\n\n var b1 = 4 / 11;\n var b2 = 6 / 11;\n var b3 = 8 / 11;\n var b4 = 3 / 4;\n var b5 = 9 / 11;\n var b6 = 10 / 11;\n var b7 = 15 / 16;\n var b8 = 21 / 22;\n var b9 = 63 / 64;\n var b0 = 1 / b1 / b1;\n\n function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n }\n\n function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n }\n\n function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n }\n\n var overshoot = 1.70158;\n\n var backIn = function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n }(overshoot);\n\n var backOut = function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n }(overshoot);\n\n var backInOut = function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n }(overshoot);\n\n var tau = 2 * Math.PI;\n var amplitude = 1;\n var period = 0.3;\n\n var elasticIn = function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function (a) {\n return custom(a, p * tau);\n };\n elasticIn.period = function (p) {\n return custom(a, p);\n };\n\n return elasticIn;\n }(amplitude, period);\n\n var elasticOut = function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function (a) {\n return custom(a, p * tau);\n };\n elasticOut.period = function (p) {\n return custom(a, p);\n };\n\n return elasticOut;\n }(amplitude, period);\n\n var elasticInOut = function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0 ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p) : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function (a) {\n return custom(a, p * tau);\n };\n elasticInOut.period = function (p) {\n return custom(a, p);\n };\n\n return elasticInOut;\n }(amplitude, period);\n\n exports.easeLinear = linear;\n exports.easeQuad = quadInOut;\n exports.easeQuadIn = quadIn;\n exports.easeQuadOut = quadOut;\n exports.easeQuadInOut = quadInOut;\n exports.easeCubic = cubicInOut;\n exports.easeCubicIn = cubicIn;\n exports.easeCubicOut = cubicOut;\n exports.easeCubicInOut = cubicInOut;\n exports.easePoly = polyInOut;\n exports.easePolyIn = polyIn;\n exports.easePolyOut = polyOut;\n exports.easePolyInOut = polyInOut;\n exports.easeSin = sinInOut;\n exports.easeSinIn = sinIn;\n exports.easeSinOut = sinOut;\n exports.easeSinInOut = sinInOut;\n exports.easeExp = expInOut;\n exports.easeExpIn = expIn;\n exports.easeExpOut = expOut;\n exports.easeExpInOut = expInOut;\n exports.easeCircle = circleInOut;\n exports.easeCircleIn = circleIn;\n exports.easeCircleOut = circleOut;\n exports.easeCircleInOut = circleInOut;\n exports.easeBounce = bounceOut;\n exports.easeBounceIn = bounceIn;\n exports.easeBounceOut = bounceOut;\n exports.easeBounceInOut = bounceInOut;\n exports.easeBack = backInOut;\n exports.easeBackIn = backIn;\n exports.easeBackOut = backOut;\n exports.easeBackInOut = backInOut;\n exports.easeElastic = elasticOut;\n exports.easeElasticIn = elasticIn;\n exports.easeElasticOut = elasticOut;\n exports.easeElasticInOut = elasticInOut;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n });\n }, {}], 5: [function (require, module, exports) {\n // https://d3js.org/d3-format/ Version 1.0.2. Copyright 2016 Mike Bostock.\n (function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.d3 = global.d3 || {});\n })(this, function (exports) {\n 'use strict';\n\n // Computes the decimal coefficient and exponent of the specified number x with\n // significant digits p, where x is positive and p is in [1, 21] or undefined.\n // For example, formatDecimal(1.23) returns [\"123\", 0].\n\n function formatDecimal(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i,\n coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +x.slice(i + 1)];\n }\n\n function exponent(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n }\n\n function formatGroup(grouping, thousands) {\n return function (value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n }\n\n function formatDefault(x, p) {\n x = x.toPrecision(p);\n\n out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (x[i]) {\n case \".\":\n i0 = i1 = i;break;\n case \"0\":\n if (i0 === 0) i0 = i;i1 = i;break;\n case \"e\":\n break out;\n default:\n if (i0 > 0) i0 = 0;break;\n }\n }\n\n return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n }\n\n var prefixExponent;\n\n function formatPrefixAuto(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient : i > n ? coefficient + new Array(i - n + 1).join(\"0\") : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i) : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n }\n\n function formatRounded(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1) : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n }\n\n var formatTypes = {\n \"\": formatDefault,\n \"%\": function _(x, p) {\n return (x * 100).toFixed(p);\n },\n \"b\": function b(x) {\n return Math.round(x).toString(2);\n },\n \"c\": function c(x) {\n return x + \"\";\n },\n \"d\": function d(x) {\n return Math.round(x).toString(10);\n },\n \"e\": function e(x, p) {\n return x.toExponential(p);\n },\n \"f\": function f(x, p) {\n return x.toFixed(p);\n },\n \"g\": function g(x, p) {\n return x.toPrecision(p);\n },\n \"o\": function o(x) {\n return Math.round(x).toString(8);\n },\n \"p\": function p(x, _p) {\n return formatRounded(x * 100, _p);\n },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function X(x) {\n return Math.round(x).toString(16).toUpperCase();\n },\n \"x\": function x(_x) {\n return Math.round(_x).toString(16);\n }\n };\n\n // [[fill]align][sign][symbol][0][width][,][.precision][type]\n var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\n function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n }\n\n function FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n var match,\n fill = match[1] || \" \",\n align = match[2] || \">\",\n sign = match[3] || \"-\",\n symbol = match[4] || \"\",\n zero = !!match[5],\n width = match[6] && +match[6],\n comma = !!match[7],\n precision = match[8] && +match[8].slice(1),\n type = match[9] || \"\";\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // Map invalid types to the default format.\n else if (!formatTypes[type]) type = \"\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || fill === \"0\" && align === \"=\") zero = true, fill = \"0\", align = \"=\";\n\n this.fill = fill;\n this.align = align;\n this.sign = sign;\n this.symbol = symbol;\n this.zero = zero;\n this.width = width;\n this.comma = comma;\n this.precision = precision;\n this.type = type;\n }\n\n FormatSpecifier.prototype.toString = function () {\n return this.fill + this.align + this.sign + this.symbol + (this.zero ? \"0\" : \"\") + (this.width == null ? \"\" : Math.max(1, this.width | 0)) + (this.comma ? \",\" : \"\") + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0)) + this.type;\n };\n\n var prefixes = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"];\n\n function identity(x) {\n return x;\n }\n\n function formatLocale(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal;\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n type = specifier.type;\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = !type || /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? type ? 6 : 12 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i,\n n,\n c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Convert negative to positive, and compute the prefix.\n // Note that -0 is not less than 0, but 1 / -0 is!\n var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\n // Perform the initial formatting.\n value = formatType(value, precision);\n\n // If the original value was negative, it may be rounded to zero during\n // formatting; treat this as (positive) zero.\n if (valueNegative) {\n i = -1, n = value.length;\n valueNegative = false;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 < c && c < 58 || type === \"x\" && 96 < c && c < 103 || type === \"X\" && 64 < c && c < 71) {\n valueNegative = true;\n break;\n }\n }\n }\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? sign === \"(\" ? sign : \"-\" : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\":\n return valuePrefix + value + valueSuffix + padding;\n case \"=\":\n return valuePrefix + padding + value + valueSuffix;\n case \"^\":\n return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n }\n return padding + valuePrefix + value + valueSuffix;\n }\n\n format.toString = function () {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function (value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n }\n\n var locale;\n defaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n });\n\n function defaultLocale(definition) {\n locale = formatLocale(definition);\n exports.format = locale.format;\n exports.formatPrefix = locale.formatPrefix;\n return locale;\n }\n\n function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n }\n\n function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n }\n\n function precisionRound(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n }\n\n exports.formatDefaultLocale = defaultLocale;\n exports.formatLocale = formatLocale;\n exports.formatSpecifier = formatSpecifier;\n exports.precisionFixed = precisionFixed;\n exports.precisionPrefix = precisionPrefix;\n exports.precisionRound = precisionRound;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n });\n }, {}], 6: [function (require, module, exports) {\n // https://d3js.org/d3-interpolate/ Version 1.1.2. Copyright 2016 Mike Bostock.\n (function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-color')) : typeof define === 'function' && define.amd ? define(['exports', 'd3-color'], factory) : factory(global.d3 = global.d3 || {}, global.d3);\n })(this, function (exports, d3Color) {\n 'use strict';\n\n function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1,\n t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + (4 - 6 * t2 + 3 * t3) * v1 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + t3 * v3) / 6;\n }\n\n var basis$1 = function basis$1(values) {\n var n = values.length - 1;\n return function (t) {\n var i = t <= 0 ? t = 0 : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n };\n\n var basisClosed = function basisClosed(values) {\n var n = values.length;\n return function (t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n };\n\n var constant = function constant(x) {\n return function () {\n return x;\n };\n };\n\n function linear(a, d) {\n return function (t) {\n return a + t * d;\n };\n }\n\n function exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function (t) {\n return Math.pow(a + t * b, y);\n };\n }\n\n function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n }\n\n function gamma(y) {\n return (y = +y) === 1 ? nogamma : function (a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n }\n\n function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n }\n\n var rgb$1 = function rgbGamma(y) {\n var color$$1 = gamma(y);\n\n function rgb$$1(start, end) {\n var r = color$$1((start = d3Color.rgb(start)).r, (end = d3Color.rgb(end)).r),\n g = color$$1(start.g, end.g),\n b = color$$1(start.b, end.b),\n opacity = color$$1(start.opacity, end.opacity);\n return function (t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb$$1.gamma = rgbGamma;\n\n return rgb$$1;\n }(1);\n\n function rgbSpline(spline) {\n return function (colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i,\n color$$1;\n for (i = 0; i < n; ++i) {\n color$$1 = d3Color.rgb(colors[i]);\n r[i] = color$$1.r || 0;\n g[i] = color$$1.g || 0;\n b[i] = color$$1.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color$$1.opacity = 1;\n return function (t) {\n color$$1.r = r(t);\n color$$1.g = g(t);\n color$$1.b = b(t);\n return color$$1 + \"\";\n };\n };\n }\n\n var rgbBasis = rgbSpline(basis$1);\n var rgbBasisClosed = rgbSpline(basisClosed);\n\n var array = function array(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(nb),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) {\n x[i] = value(a[i], b[i]);\n }for (; i < nb; ++i) {\n c[i] = b[i];\n }return function (t) {\n for (i = 0; i < na; ++i) {\n c[i] = x[i](t);\n }return c;\n };\n };\n\n var date = function date(a, b) {\n var d = new Date();\n return a = +a, b -= a, function (t) {\n return d.setTime(a + b * t), d;\n };\n };\n\n var number = function number(a, b) {\n return a = +a, b -= a, function (t) {\n return a + b * t;\n };\n };\n\n var object = function object(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) !== \"object\") a = {};\n if (b === null || (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function (t) {\n for (k in i) {\n c[k] = i[k](t);\n }return c;\n };\n };\n\n var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\n var reB = new RegExp(reA.source, \"g\");\n\n function zero(b) {\n return function () {\n return b;\n };\n }\n\n function one(b) {\n return function (t) {\n return b(t) + \"\";\n };\n }\n\n var string = function string(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0,\n // scan index for next number in b\n am,\n // current match in a\n bm,\n // current match in b\n bs,\n // string preceding current number in b, if any\n i = -1,\n // index in s\n s = [],\n // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a)) && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) {\n // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) {\n // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else {\n // interpolate non-matching numbers\n s[++i] = null;\n q.push({ i: i, x: number(am, bm) });\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? q[0] ? one(q[0].x) : zero(b) : (b = q.length, function (t) {\n for (var i = 0, o; i < b; ++i) {\n s[(o = q[i]).i] = o.x(t);\n }return s.join(\"\");\n });\n };\n\n var value = function value(a, b) {\n var t = typeof b === \"undefined\" ? \"undefined\" : _typeof(b),\n c;\n return b == null || t === \"boolean\" ? constant(b) : (t === \"number\" ? number : t === \"string\" ? (c = d3Color.color(b)) ? (b = c, rgb$1) : string : b instanceof d3Color.color ? rgb$1 : b instanceof Date ? date : Array.isArray(b) ? array : isNaN(b) ? object : number)(a, b);\n };\n\n var round = function round(a, b) {\n return a = +a, b -= a, function (t) {\n return Math.round(a + b * t);\n };\n };\n\n var degrees = 180 / Math.PI;\n\n var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n };\n\n var decompose = function decompose(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n };\n\n var cssNode;\n var cssRoot;\n var cssView;\n var svgNode;\n\n function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n }\n\n function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n }\n\n function interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({ i: i - 4, x: number(xa, xb) }, { i: i - 2, x: number(ya, yb) });\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360;else if (b - a > 180) a += 360; // shortest path\n q.push({ i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b) });\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({ i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b) });\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({ i: i - 4, x: number(xa, xb) }, { i: i - 2, x: number(ya, yb) });\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function (a, b) {\n var s = [],\n // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function (t) {\n var i = -1,\n n = q.length,\n o;\n while (++i < n) {\n s[(o = q[i]).i] = o.x(t);\n }return s.join(\"\");\n };\n };\n }\n\n var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\n var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\n var rho = Math.SQRT2;\n var rho2 = 2;\n var rho4 = 4;\n var epsilon2 = 1e-12;\n\n function cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n }\n\n function sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n }\n\n function tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n }\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n var zoom = function zoom(p0, p1) {\n var ux0 = p0[0],\n uy0 = p0[1],\n w0 = p0[2],\n ux1 = p1[0],\n uy1 = p1[1],\n w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function i(t) {\n return [ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(rho * t * S)];\n };\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function i(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0)];\n };\n }\n\n i.duration = S * 1000;\n\n return i;\n };\n\n function hsl$1(hue$$1) {\n return function (start, end) {\n var h = hue$$1((start = d3Color.hsl(start)).h, (end = d3Color.hsl(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n };\n }\n\n var hsl$2 = hsl$1(hue);\n var hslLong = hsl$1(nogamma);\n\n function lab$1(start, end) {\n var l = nogamma((start = d3Color.lab(start)).l, (end = d3Color.lab(end)).l),\n a = nogamma(start.a, end.a),\n b = nogamma(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n function hcl$1(hue$$1) {\n return function (start, end) {\n var h = hue$$1((start = d3Color.hcl(start)).h, (end = d3Color.hcl(end)).h),\n c = nogamma(start.c, end.c),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n };\n }\n\n var hcl$2 = hcl$1(hue);\n var hclLong = hcl$1(nogamma);\n\n function cubehelix$1(hue$$1) {\n return function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix$$1(start, end) {\n var h = hue$$1((start = d3Color.cubehelix(start)).h, (end = d3Color.cubehelix(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix$$1.gamma = cubehelixGamma;\n\n return cubehelix$$1;\n }(1);\n }\n\n var cubehelix$2 = cubehelix$1(hue);\n var cubehelixLong = cubehelix$1(nogamma);\n\n var quantize = function quantize(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) {\n samples[i] = interpolator(i / (n - 1));\n }return samples;\n };\n\n exports.interpolate = value;\n exports.interpolateArray = array;\n exports.interpolateBasis = basis$1;\n exports.interpolateBasisClosed = basisClosed;\n exports.interpolateDate = date;\n exports.interpolateNumber = number;\n exports.interpolateObject = object;\n exports.interpolateRound = round;\n exports.interpolateString = string;\n exports.interpolateTransformCss = interpolateTransformCss;\n exports.interpolateTransformSvg = interpolateTransformSvg;\n exports.interpolateZoom = zoom;\n exports.interpolateRgb = rgb$1;\n exports.interpolateRgbBasis = rgbBasis;\n exports.interpolateRgbBasisClosed = rgbBasisClosed;\n exports.interpolateHsl = hsl$2;\n exports.interpolateHslLong = hslLong;\n exports.interpolateLab = lab$1;\n exports.interpolateHcl = hcl$2;\n exports.interpolateHclLong = hclLong;\n exports.interpolateCubehelix = cubehelix$2;\n exports.interpolateCubehelixLong = cubehelixLong;\n exports.quantize = quantize;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n });\n }, { \"d3-color\": 3 }], 7: [function (require, module, exports) {\n // https://d3js.org/d3-scale/ Version 1.0.4. Copyright 2016 Mike Bostock.\n (function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array'), require('d3-collection'), require('d3-interpolate'), require('d3-format'), require('d3-time'), require('d3-time-format'), require('d3-color')) : typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-collection', 'd3-interpolate', 'd3-format', 'd3-time', 'd3-time-format', 'd3-color'], factory) : factory(global.d3 = global.d3 || {}, global.d3, global.d3, global.d3, global.d3, global.d3, global.d3, global.d3);\n })(this, function (exports, d3Array, d3Collection, d3Interpolate, d3Format, d3Time, d3TimeFormat, d3Color) {\n 'use strict';\n\n var array = Array.prototype;\n\n var map$1 = array.map;\n var slice = array.slice;\n\n var implicit = { name: \"implicit\" };\n\n function ordinal(range$$1) {\n var index = d3Collection.map(),\n domain = [],\n unknown = implicit;\n\n range$$1 = range$$1 == null ? [] : slice.call(range$$1);\n\n function scale(d) {\n var key = d + \"\",\n i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range$$1[(i - 1) % range$$1.length];\n }\n\n scale.domain = function (_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = d3Collection.map();\n var i = -1,\n n = _.length,\n d,\n key;\n while (++i < n) {\n if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n }return scale;\n };\n\n scale.range = function (_) {\n return arguments.length ? (range$$1 = slice.call(_), scale) : range$$1.slice();\n };\n\n scale.unknown = function (_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function () {\n return ordinal().domain(domain).range(range$$1).unknown(unknown);\n };\n\n return scale;\n }\n\n function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range$$1 = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range$$1[1] < range$$1[0],\n start = range$$1[reverse - 0],\n stop = range$$1[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = d3Array.range(n).map(function (i) {\n return start + step * i;\n });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function (_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function (_) {\n return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();\n };\n\n scale.rangeRound = function (_) {\n return range$$1 = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function () {\n return bandwidth;\n };\n\n scale.step = function () {\n return step;\n };\n\n scale.round = function (_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function (_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function (_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function (_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function (_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function () {\n return band().domain(domain()).range(range$$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n\n return rescale();\n }\n\n function pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function () {\n return pointish(copy());\n };\n\n return scale;\n }\n\n function point() {\n return pointish(band().paddingInner(1));\n }\n\n var constant = function constant(x) {\n return function () {\n return x;\n };\n };\n\n var number = function number(x) {\n return +x;\n };\n\n var unit = [0, 1];\n\n function deinterpolateLinear(a, b) {\n return (b -= a = +a) ? function (x) {\n return (x - a) / b;\n } : constant(b);\n }\n\n function deinterpolateClamp(deinterpolate) {\n return function (a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function (x) {\n return x <= a ? 0 : x >= b ? 1 : d(x);\n };\n };\n }\n\n function reinterpolateClamp(reinterpolate) {\n return function (a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function (t) {\n return t <= 0 ? a : t >= 1 ? b : r(t);\n };\n };\n }\n\n function bimap(domain, range$$1, deinterpolate, reinterpolate) {\n var d0 = domain[0],\n d1 = domain[1],\n r0 = range$$1[0],\n r1 = range$$1[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function (x) {\n return r0(d0(x));\n };\n }\n\n function polymap(domain, range$$1, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range$$1.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range$$1 = range$$1.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);\n }\n\n return function (x) {\n var i = d3Array.bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n }\n\n function copy(source, target) {\n return target.domain(source.domain()).range(source.range()).interpolate(source.interpolate()).clamp(source.clamp());\n }\n\n // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\n function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range$$1 = unit,\n interpolate$$1 = d3Interpolate.interpolate,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);\n }\n\n scale.invert = function (y) {\n return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function (_) {\n return arguments.length ? (domain = map$1.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function (_) {\n return arguments.length ? (range$$1 = slice.call(_), rescale()) : range$$1.slice();\n };\n\n scale.rangeRound = function (_) {\n return range$$1 = slice.call(_), interpolate$$1 = d3Interpolate.interpolateRound, rescale();\n };\n\n scale.clamp = function (_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function (_) {\n return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;\n };\n\n return rescale();\n }\n\n var tickFormat = function tickFormat(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = d3Array.tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = d3Format.formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\":\n {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = d3Format.precisionPrefix(step, value))) specifier.precision = precision;\n return d3Format.formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\":\n {\n if (specifier.precision == null && !isNaN(precision = d3Format.precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\":\n {\n if (specifier.precision == null && !isNaN(precision = d3Format.precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return d3Format.format(specifier);\n };\n\n function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function (count) {\n var d = domain();\n return d3Array.ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function (count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function (count) {\n var d = domain(),\n i = d.length - 1,\n n = count == null ? 10 : count,\n start = d[0],\n stop = d[i],\n step = d3Array.tickStep(start, stop, n);\n\n if (step) {\n step = d3Array.tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);\n d[0] = Math.floor(start / step) * step;\n d[i] = Math.ceil(stop / step) * step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n }\n\n function linear() {\n var scale = continuous(deinterpolateLinear, d3Interpolate.interpolateNumber);\n\n scale.copy = function () {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n }\n\n function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function (_) {\n return arguments.length ? (domain = map$1.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function () {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n }\n\n var nice = function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n };\n\n function deinterpolate(a, b) {\n return (b = Math.log(b / a)) ? function (x) {\n return Math.log(x / a) / b;\n } : constant(b);\n }\n\n function reinterpolate(a, b) {\n return a < 0 ? function (t) {\n return -Math.pow(-b, t) * Math.pow(-a, 1 - t);\n } : function (t) {\n return Math.pow(b, t) * Math.pow(a, 1 - t);\n };\n }\n\n function pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n }\n\n function powp(base) {\n return base === 10 ? pow10 : base === Math.E ? Math.exp : function (x) {\n return Math.pow(base, x);\n };\n }\n\n function logp(base) {\n return base === Math.E ? Math.log : base === 10 && Math.log10 || base === 2 && Math.log2 || (base = Math.log(base), function (x) {\n return Math.log(x) / base;\n });\n }\n\n function reflect(f) {\n return function (x) {\n return -f(-x);\n };\n }\n\n function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function (_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function (_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function (count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = d3Array.ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function (count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = d3Format.format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function (d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function () {\n return domain(nice(domain(), {\n floor: function floor(x) {\n return pows(Math.floor(logs(x)));\n },\n ceil: function ceil(x) {\n return pows(Math.ceil(logs(x)));\n }\n }));\n };\n\n scale.copy = function () {\n return copy(scale, log().base(base));\n };\n\n return scale;\n }\n\n function raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n }\n\n function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent))) ? function (x) {\n return (raise(x, exponent) - a) / b;\n } : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function (t) {\n return raise(a + b * t, 1 / exponent);\n };\n }\n\n scale.exponent = function (_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function () {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n }\n\n function sqrt() {\n return pow().exponent(0.5);\n }\n\n function quantile$1() {\n var domain = [],\n range$$1 = [],\n thresholds = [];\n\n function rescale() {\n var i = 0,\n n = Math.max(1, range$$1.length);\n thresholds = new Array(n - 1);\n while (++i < n) {\n thresholds[i - 1] = d3Array.quantile(domain, i / n);\n }return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range$$1[d3Array.bisect(thresholds, x)];\n }\n\n scale.invertExtent = function (y) {\n var i = range$$1.indexOf(y);\n return i < 0 ? [NaN, NaN] : [i > 0 ? thresholds[i - 1] : domain[0], i < thresholds.length ? thresholds[i] : domain[domain.length - 1]];\n };\n\n scale.domain = function (_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) {\n if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n }domain.sort(d3Array.ascending);\n return rescale();\n };\n\n scale.range = function (_) {\n return arguments.length ? (range$$1 = slice.call(_), rescale()) : range$$1.slice();\n };\n\n scale.quantiles = function () {\n return thresholds.slice();\n };\n\n scale.copy = function () {\n return quantile$1().domain(domain).range(range$$1);\n };\n\n return scale;\n }\n\n function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range$$1 = [0, 1];\n\n function scale(x) {\n if (x <= x) return range$$1[d3Array.bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) {\n domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n }return scale;\n }\n\n scale.domain = function (_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function (_) {\n return arguments.length ? (n = (range$$1 = slice.call(_)).length - 1, rescale()) : range$$1.slice();\n };\n\n scale.invertExtent = function (y) {\n var i = range$$1.indexOf(y);\n return i < 0 ? [NaN, NaN] : i < 1 ? [x0, domain[0]] : i >= n ? [domain[n - 1], x1] : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function () {\n return quantize().domain([x0, x1]).range(range$$1);\n };\n\n return linearish(scale);\n }\n\n function threshold() {\n var domain = [0.5],\n range$$1 = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range$$1[d3Array.bisect(domain, x, 0, n)];\n }\n\n scale.domain = function (_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();\n };\n\n scale.range = function (_) {\n return arguments.length ? (range$$1 = slice.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();\n };\n\n scale.invertExtent = function (y) {\n var i = range$$1.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function () {\n return threshold().domain(domain).range(range$$1);\n };\n\n return scale;\n }\n\n var durationSecond = 1000;\n var durationMinute = durationSecond * 60;\n var durationHour = durationMinute * 60;\n var durationDay = durationHour * 24;\n var durationWeek = durationDay * 7;\n var durationMonth = durationDay * 30;\n var durationYear = durationDay * 365;\n\n function date(t) {\n return new Date(t);\n }\n\n function number$1(t) {\n return t instanceof Date ? +t : +new Date(+t);\n }\n\n function calendar(year, month, week, day, hour, minute, second, millisecond, format$$1) {\n var scale = continuous(deinterpolateLinear, d3Interpolate.interpolateNumber),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format$$1(\".%L\"),\n formatSecond = format$$1(\":%S\"),\n formatMinute = format$$1(\"%I:%M\"),\n formatHour = format$$1(\"%I %p\"),\n formatDay = format$$1(\"%a %d\"),\n formatWeek = format$$1(\"%b %d\"),\n formatMonth = format$$1(\"%B\"),\n formatYear = format$$1(\"%Y\");\n\n var tickIntervals = [[second, 1, durationSecond], [second, 5, 5 * durationSecond], [second, 15, 15 * durationSecond], [second, 30, 30 * durationSecond], [minute, 1, durationMinute], [minute, 5, 5 * durationMinute], [minute, 15, 15 * durationMinute], [minute, 30, 30 * durationMinute], [hour, 1, durationHour], [hour, 3, 3 * durationHour], [hour, 6, 6 * durationHour], [hour, 12, 12 * durationHour], [day, 1, durationDay], [day, 2, 2 * durationDay], [week, 1, durationWeek], [month, 1, durationMonth], [month, 3, 3 * durationMonth], [year, 1, durationYear]];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond : minute(date) < date ? formatSecond : hour(date) < date ? formatMinute : day(date) < date ? formatHour : month(date) < date ? week(date) < date ? formatDay : formatWeek : year(date) < date ? formatMonth : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = d3Array.bisector(function (i) {\n return i[2];\n }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = d3Array.tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = d3Array.tickStep(start, stop, interval);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function (y) {\n return new Date(invert(y));\n };\n\n scale.domain = function (_) {\n return arguments.length ? domain(map$1.call(_, number$1)) : domain().map(date);\n };\n\n scale.ticks = function (interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function (count, specifier) {\n return specifier == null ? tickFormat : format$$1(specifier);\n };\n\n scale.nice = function (interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function () {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format$$1));\n };\n\n return scale;\n }\n\n var time = function time() {\n return calendar(d3Time.timeYear, d3Time.timeMonth, d3Time.timeWeek, d3Time.timeDay, d3Time.timeHour, d3Time.timeMinute, d3Time.timeSecond, d3Time.timeMillisecond, d3TimeFormat.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n };\n\n var utcTime = function utcTime() {\n return calendar(d3Time.utcYear, d3Time.utcMonth, d3Time.utcWeek, d3Time.utcDay, d3Time.utcHour, d3Time.utcMinute, d3Time.utcSecond, d3Time.utcMillisecond, d3TimeFormat.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n };\n\n var colors = function colors(s) {\n return s.match(/.{6}/g).map(function (x) {\n return \"#\" + x;\n });\n };\n\n var category10 = colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\n var category20b = colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n\n var category20c = colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n\n var category20 = colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n\n var cubehelix$1 = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(300, 0.5, 0.0), d3Color.cubehelix(-240, 0.5, 1.0));\n\n var warm = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(-100, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));\n\n var cool = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(260, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));\n\n var rainbow = d3Color.cubehelix();\n\n var rainbow$1 = function rainbow$1(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n };\n\n function ramp(range$$1) {\n var n = range$$1.length;\n return function (t) {\n return range$$1[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n }\n\n var viridis = ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\n var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\n var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\n var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\n function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function (_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function (_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function (_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function () {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n }\n\n exports.scaleBand = band;\n exports.scalePoint = point;\n exports.scaleIdentity = identity;\n exports.scaleLinear = linear;\n exports.scaleLog = log;\n exports.scaleOrdinal = ordinal;\n exports.scaleImplicit = implicit;\n exports.scalePow = pow;\n exports.scaleSqrt = sqrt;\n exports.scaleQuantile = quantile$1;\n exports.scaleQuantize = quantize;\n exports.scaleThreshold = threshold;\n exports.scaleTime = time;\n exports.scaleUtc = utcTime;\n exports.schemeCategory10 = category10;\n exports.schemeCategory20b = category20b;\n exports.schemeCategory20c = category20c;\n exports.schemeCategory20 = category20;\n exports.interpolateCubehelixDefault = cubehelix$1;\n exports.interpolateRainbow = rainbow$1;\n exports.interpolateWarm = warm;\n exports.interpolateCool = cool;\n exports.interpolateViridis = viridis;\n exports.interpolateMagma = magma;\n exports.interpolateInferno = inferno;\n exports.interpolatePlasma = plasma;\n exports.scaleSequential = sequential;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n });\n }, { \"d3-array\": 1, \"d3-collection\": 2, \"d3-color\": 3, \"d3-format\": 5, \"d3-interpolate\": 6, \"d3-time\": 9, \"d3-time-format\": 8 }], 8: [function (require, module, exports) {\n // https://d3js.org/d3-time-format/ Version 2.0.3. Copyright 2016 Mike Bostock.\n (function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-time')) : typeof define === 'function' && define.amd ? define(['exports', 'd3-time'], factory) : factory(global.d3 = global.d3 || {}, global.d3);\n })(this, function (exports, d3Time) {\n 'use strict';\n\n function localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n function utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n function newYear(y) {\n return { y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0 };\n }\n\n function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"S\": formatSeconds,\n \"U\": formatWeekNumberSunday,\n \"w\": formatWeekdayNumber,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"S\": formatUTCSeconds,\n \"U\": formatUTCWeekNumberSunday,\n \"w\": formatUTCWeekdayNumber,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"S\": parseSeconds,\n \"U\": parseWeekNumberSunday,\n \"w\": parseWeekdayNumber,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function (date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function (string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0);\n if (i != string.length) return null;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n var day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || (j = parse(d, string, j)) < 0) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function format(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function () {\n return specifier;\n };\n return f;\n },\n parse: function parse(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function () {\n return specifier;\n };\n return p;\n },\n utcFormat: function utcFormat(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function () {\n return specifier;\n };\n return f;\n },\n utcParse: function utcParse(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function () {\n return specifier;\n };\n return p;\n }\n };\n }\n\n var pads = { \"-\": \"\", \"_\": \" \", \"0\": \"0\" };\n var numberRe = /^\\s*\\d+/;\n var percentRe = /^%/;\n var requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\n function pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n function requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n }\n\n function formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n }\n\n function formatLookup(names) {\n var map = {},\n i = -1,\n n = names.length;\n while (++i < n) {\n map[names[i].toLowerCase()] = i;\n }return map;\n }\n\n function parseWeekdayNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n }\n\n function parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n }\n\n function parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n }\n\n function parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?:\\:?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n }\n\n function parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n }\n\n function parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n }\n\n function parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n }\n\n function parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n }\n\n function parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n }\n\n function parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n\n function formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n }\n\n function formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n }\n\n function formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n }\n\n function formatDayOfYear(d, p) {\n return pad(1 + d3Time.timeDay.count(d3Time.timeYear(d), d), p, 3);\n }\n\n function formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n }\n\n function formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n }\n\n function formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n }\n\n function formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n }\n\n function formatWeekNumberSunday(d, p) {\n return pad(d3Time.timeSunday.count(d3Time.timeYear(d), d), p, 2);\n }\n\n function formatWeekdayNumber(d) {\n return d.getDay();\n }\n\n function formatWeekNumberMonday(d, p) {\n return pad(d3Time.timeMonday.count(d3Time.timeYear(d), d), p, 2);\n }\n\n function formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n }\n\n function formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n }\n\n function formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\")) + pad(z / 60 | 0, \"0\", 2) + pad(z % 60, \"0\", 2);\n }\n\n function formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n }\n\n function formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n }\n\n function formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n }\n\n function formatUTCDayOfYear(d, p) {\n return pad(1 + d3Time.utcDay.count(d3Time.utcYear(d), d), p, 3);\n }\n\n function formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n }\n\n function formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n }\n\n function formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n }\n\n function formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n }\n\n function formatUTCWeekNumberSunday(d, p) {\n return pad(d3Time.utcSunday.count(d3Time.utcYear(d), d), p, 2);\n }\n\n function formatUTCWeekdayNumber(d) {\n return d.getUTCDay();\n }\n\n function formatUTCWeekNumberMonday(d, p) {\n return pad(d3Time.utcMonday.count(d3Time.utcYear(d), d), p, 2);\n }\n\n function formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n }\n\n function formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n }\n\n function formatUTCZone() {\n return \"+0000\";\n }\n\n function formatLiteralPercent() {\n return \"%\";\n }\n\n var locale$1;\n\n defaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n });\n\n function defaultLocale(definition) {\n locale$1 = formatLocale(definition);\n exports.timeFormat = locale$1.format;\n exports.timeParse = locale$1.parse;\n exports.utcFormat = locale$1.utcFormat;\n exports.utcParse = locale$1.utcParse;\n return locale$1;\n }\n\n var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n function formatIsoNative(date) {\n return date.toISOString();\n }\n\n var formatIso = Date.prototype.toISOString ? formatIsoNative : exports.utcFormat(isoSpecifier);\n\n function parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n }\n\n var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\") ? parseIsoNative : exports.utcParse(isoSpecifier);\n\n exports.timeFormatDefaultLocale = defaultLocale;\n exports.timeFormatLocale = formatLocale;\n exports.isoFormat = formatIso;\n exports.isoParse = parseIso;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n });\n }, { \"d3-time\": 9 }], 9: [function (require, module, exports) {\n // https://d3js.org/d3-time/ Version 1.0.4. Copyright 2016 Mike Bostock.\n (function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.d3 = global.d3 || {});\n })(this, function (exports) {\n 'use strict';\n\n var t0 = new Date();\n var t1 = new Date();\n\n function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function (date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function (date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function (date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function (start, stop, step) {\n var range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do {\n range.push(new Date(+start));\n } while ((offseti(start, step), floori(start), start < stop));\n return range;\n };\n\n interval.filter = function (test) {\n return newInterval(function (date) {\n if (date >= date) while (floori(date), !test(date)) {\n date.setTime(date - 1);\n }\n }, function (date, step) {\n if (date >= date) while (--step >= 0) {\n while (offseti(date, 1), !test(date)) {}\n } // eslint-disable-line no-empty\n });\n };\n\n if (count) {\n interval.count = function (start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function (step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null : !(step > 1) ? interval : interval.filter(field ? function (d) {\n return field(d) % step === 0;\n } : function (d) {\n return interval.count(0, d) % step === 0;\n });\n };\n }\n\n return interval;\n }\n\n var millisecond = newInterval(function () {\n // noop\n }, function (date, step) {\n date.setTime(+date + step);\n }, function (start, end) {\n return end - start;\n });\n\n // An optimized implementation for this simple case.\n millisecond.every = function (k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return newInterval(function (date) {\n date.setTime(Math.floor(date / k) * k);\n }, function (date, step) {\n date.setTime(+date + step * k);\n }, function (start, end) {\n return (end - start) / k;\n });\n };\n\n var milliseconds = millisecond.range;\n\n var durationSecond = 1e3;\n var durationMinute = 6e4;\n var durationHour = 36e5;\n var durationDay = 864e5;\n var durationWeek = 6048e5;\n\n var second = newInterval(function (date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n }, function (date, step) {\n date.setTime(+date + step * durationSecond);\n }, function (start, end) {\n return (end - start) / durationSecond;\n }, function (date) {\n return date.getUTCSeconds();\n });\n\n var seconds = second.range;\n\n var minute = newInterval(function (date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n }, function (date, step) {\n date.setTime(+date + step * durationMinute);\n }, function (start, end) {\n return (end - start) / durationMinute;\n }, function (date) {\n return date.getMinutes();\n });\n\n var minutes = minute.range;\n\n var hour = newInterval(function (date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n }, function (date, step) {\n date.setTime(+date + step * durationHour);\n }, function (start, end) {\n return (end - start) / durationHour;\n }, function (date) {\n return date.getHours();\n });\n\n var hours = hour.range;\n\n var day = newInterval(function (date) {\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setDate(date.getDate() + step);\n }, function (start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n }, function (date) {\n return date.getDate() - 1;\n });\n\n var days = day.range;\n\n function weekday(i) {\n return newInterval(function (date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function (start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n }\n\n var sunday = weekday(0);\n var monday = weekday(1);\n var tuesday = weekday(2);\n var wednesday = weekday(3);\n var thursday = weekday(4);\n var friday = weekday(5);\n var saturday = weekday(6);\n\n var sundays = sunday.range;\n var mondays = monday.range;\n var tuesdays = tuesday.range;\n var wednesdays = wednesday.range;\n var thursdays = thursday.range;\n var fridays = friday.range;\n var saturdays = saturday.range;\n\n var month = newInterval(function (date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setMonth(date.getMonth() + step);\n }, function (start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n }, function (date) {\n return date.getMonth();\n });\n\n var months = month.range;\n\n var year = newInterval(function (date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function (start, end) {\n return end.getFullYear() - start.getFullYear();\n }, function (date) {\n return date.getFullYear();\n });\n\n // An optimized implementation for this simple case.\n year.every = function (k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function (date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n };\n\n var years = year.range;\n\n var utcMinute = newInterval(function (date) {\n date.setUTCSeconds(0, 0);\n }, function (date, step) {\n date.setTime(+date + step * durationMinute);\n }, function (start, end) {\n return (end - start) / durationMinute;\n }, function (date) {\n return date.getUTCMinutes();\n });\n\n var utcMinutes = utcMinute.range;\n\n var utcHour = newInterval(function (date) {\n date.setUTCMinutes(0, 0, 0);\n }, function (date, step) {\n date.setTime(+date + step * durationHour);\n }, function (start, end) {\n return (end - start) / durationHour;\n }, function (date) {\n return date.getUTCHours();\n });\n\n var utcHours = utcHour.range;\n\n var utcDay = newInterval(function (date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function (start, end) {\n return (end - start) / durationDay;\n }, function (date) {\n return date.getUTCDate() - 1;\n });\n\n var utcDays = utcDay.range;\n\n function utcWeekday(i) {\n return newInterval(function (date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function (start, end) {\n return (end - start) / durationWeek;\n });\n }\n\n var utcSunday = utcWeekday(0);\n var utcMonday = utcWeekday(1);\n var utcTuesday = utcWeekday(2);\n var utcWednesday = utcWeekday(3);\n var utcThursday = utcWeekday(4);\n var utcFriday = utcWeekday(5);\n var utcSaturday = utcWeekday(6);\n\n var utcSundays = utcSunday.range;\n var utcMondays = utcMonday.range;\n var utcTuesdays = utcTuesday.range;\n var utcWednesdays = utcWednesday.range;\n var utcThursdays = utcThursday.range;\n var utcFridays = utcFriday.range;\n var utcSaturdays = utcSaturday.range;\n\n var utcMonth = newInterval(function (date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n }, function (start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n }, function (date) {\n return date.getUTCMonth();\n });\n\n var utcMonths = utcMonth.range;\n\n var utcYear = newInterval(function (date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function (start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n }, function (date) {\n return date.getUTCFullYear();\n });\n\n // An optimized implementation for this simple case.\n utcYear.every = function (k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function (date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n };\n\n var utcYears = utcYear.range;\n\n exports.timeInterval = newInterval;\n exports.timeMillisecond = millisecond;\n exports.timeMilliseconds = milliseconds;\n exports.utcMillisecond = millisecond;\n exports.utcMilliseconds = milliseconds;\n exports.timeSecond = second;\n exports.timeSeconds = seconds;\n exports.utcSecond = second;\n exports.utcSeconds = seconds;\n exports.timeMinute = minute;\n exports.timeMinutes = minutes;\n exports.timeHour = hour;\n exports.timeHours = hours;\n exports.timeDay = day;\n exports.timeDays = days;\n exports.timeWeek = sunday;\n exports.timeWeeks = sundays;\n exports.timeSunday = sunday;\n exports.timeSundays = sundays;\n exports.timeMonday = monday;\n exports.timeMondays = mondays;\n exports.timeTuesday = tuesday;\n exports.timeTuesdays = tuesdays;\n exports.timeWednesday = wednesday;\n exports.timeWednesdays = wednesdays;\n exports.timeThursday = thursday;\n exports.timeThursdays = thursdays;\n exports.timeFriday = friday;\n exports.timeFridays = fridays;\n exports.timeSaturday = saturday;\n exports.timeSaturdays = saturdays;\n exports.timeMonth = month;\n exports.timeMonths = months;\n exports.timeYear = year;\n exports.timeYears = years;\n exports.utcMinute = utcMinute;\n exports.utcMinutes = utcMinutes;\n exports.utcHour = utcHour;\n exports.utcHours = utcHours;\n exports.utcDay = utcDay;\n exports.utcDays = utcDays;\n exports.utcWeek = utcSunday;\n exports.utcWeeks = utcSundays;\n exports.utcSunday = utcSunday;\n exports.utcSundays = utcSundays;\n exports.utcMonday = utcMonday;\n exports.utcMondays = utcMondays;\n exports.utcTuesday = utcTuesday;\n exports.utcTuesdays = utcTuesdays;\n exports.utcWednesday = utcWednesday;\n exports.utcWednesdays = utcWednesdays;\n exports.utcThursday = utcThursday;\n exports.utcThursdays = utcThursdays;\n exports.utcFriday = utcFriday;\n exports.utcFridays = utcFridays;\n exports.utcSaturday = utcSaturday;\n exports.utcSaturdays = utcSaturdays;\n exports.utcMonth = utcMonth;\n exports.utcMonths = utcMonths;\n exports.utcYear = utcYear;\n exports.utcYears = utcYears;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n });\n }, {}], 10: [function (require, module, exports) {\n /**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER = 9007199254740991;\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0:\n return func.call(thisArg);\n case 1:\n return func.call(thisArg, args[0]);\n case 2:\n return func.call(thisArg, args[0], args[1]);\n case 3:\n return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n }\n\n /** Used for built-in method references. */\n var objectProto = Object.prototype;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var objectToString = objectProto.toString;\n\n /** Built-in value references. */\n var propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max;\n\n /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */\n var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined && !(key in object)) {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n start = nativeMax(start === undefined ? func.length - 1 : start, 0);\n return function () {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function (object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index === \"undefined\" ? \"undefined\" : _typeof(index);\n if (type == 'number' ? isArrayLike(object) && isIndex(index, object.length) : type == 'string' && index in object) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n\n return value === proto;\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || value !== value && other !== other;\n }\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n function isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n }\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value === \"undefined\" ? \"undefined\" : _typeof(value);\n return !!value && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return !!value && (typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) == 'object';\n }\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function (object, source) {\n if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n module.exports = assign;\n }, {}], 11: [function (require, module, exports) {\n (function (global) {\n /**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER = 9007199254740991;\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\n function addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n }\n\n /**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\n function addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\n function isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n }\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = root['__core-js_shared__'];\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n }();\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var objectToString = objectProto.toString;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n\n /** Built-in value references. */\n var Buffer = moduleExports ? root.Buffer : undefined,\n _Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = _Symbol ? _Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n this.__data__ = new ListCache(entries);\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache();\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n return this.__data__['delete'](key);\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined && !(key in object)) {\n object[key] = value;\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || isFunc && !object) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack());\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function (subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n function baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n return objectToString.call(value);\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\n function cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor());\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\n function cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor());\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n }\n\n /**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11,\n // for data views in Edge < 14, and promises in Node.js.\n if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n case mapCtorString:\n return mapTag;\n case promiseCtorString:\n return promiseTag;\n case setCtorString:\n return setTag;\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return typeof object.constructor == 'function' && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag:case float64Tag:\n case int8Tag:case int16Tag:case int32Tag:\n case uint8Tag:case uint8ClampedTag:case uint16Tag:case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value === \"undefined\" ? \"undefined\" : _typeof(value);\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n }\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n\n return value === proto;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return func + '';\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, false, true);\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || value !== value && other !== other;\n }\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n function isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n }\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value === \"undefined\" ? \"undefined\" : _typeof(value);\n return !!value && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return !!value && (typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) == 'object';\n }\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n module.exports = clone;\n }).call(this, typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n }, {}], 12: [function (require, module, exports) {\n /**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER = 9007199254740991;\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n }\n\n /** Used for built-in method references. */\n var objectProto = Object.prototype;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var objectToString = objectProto.toString;\n\n /** Built-in value references. */\n var propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeKeys = overArg(Object.keys, Object);\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function (collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while (fromRight ? index-- : ++index < length) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function (object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n }\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n\n return value === proto;\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _([1, 2]).forEach(function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, typeof iteratee == 'function' ? iteratee : identity);\n }\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n function isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n }\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value === \"undefined\" ? \"undefined\" : _typeof(value);\n return !!value && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return !!value && (typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) == 'object';\n }\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n module.exports = forEach;\n }, {}], 13: [function (require, module, exports) {\n (function (global) {\n /**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER = 9007199254740991;\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\n var dataViewTag = '[object DataView]';\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\n function isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n }\n\n /** Used for built-in method references. */\n var funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = root['__core-js_shared__'];\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n }();\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var objectToString = objectProto.toString;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n\n /** Built-in value references. */\n var Buffer = moduleExports ? root.Buffer : undefined,\n propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap');\n\n /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */\n var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n return objectToString.call(value);\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11,\n // for data views in Edge < 14, and promises in Node.js.\n if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n case mapCtorString:\n return mapTag;\n case promiseCtorString:\n return promiseTag;\n case setCtorString:\n return setTag;\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n }\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n\n return value === proto;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return func + '';\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n function isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n }\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (nonEnumShadows || isPrototype(value)) {\n return !nativeKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value === \"undefined\" ? \"undefined\" : _typeof(value);\n return !!value && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return !!value && (typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) == 'object';\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n module.exports = isEmpty;\n }).call(this, typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n }, {}], 14: [function (require, module, exports) {\n (function (global) {\n /**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used to compose bitmasks for comparison styles. */\n var UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER = 9007199254740991;\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = function () {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) {}\n }();\n\n /* Node.js helper references. */\n var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function (value) {\n return func(value);\n };\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\n function isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n }\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = root['__core-js_shared__'];\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n }();\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var objectToString = objectProto.toString;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n\n /** Built-in value references. */\n var _Symbol2 = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeKeys = overArg(Object.keys, Object);\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = _Symbol2 ? _Symbol2.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache();\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n this.__data__ = new ListCache(entries);\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache();\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n return this.__data__['delete'](key);\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n return objectToString.call(value);\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || !isObject(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack());\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack());\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack());\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = bitmask & UNORDERED_COMPARE_FLAG ? new SetCache() : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function (othValue, othIndex) {\n if (!seen.has(othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack) : compared)) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11,\n // for data views in Edge < 14, and promises in Node.js.\n if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n case mapCtorString:\n return mapTag;\n case promiseCtorString:\n return promiseTag;\n case setCtorString:\n return setTag;\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value === \"undefined\" ? \"undefined\" : _typeof(value);\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n }\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n\n return value === proto;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return func + '';\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || value !== value && other !== other;\n }\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n function isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n }\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are **not** supported.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value === \"undefined\" ? \"undefined\" : _typeof(value);\n return !!value && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return !!value && (typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) == 'object';\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n module.exports = isEqual;\n }).call(this, typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n }, {}], 15: [function (require, module, exports) {\n window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n\n /**\n * Handles debouncing of events via requestAnimationFrame\n * @see http://www.html5rocks.com/en/tutorials/speed/animations/\n * @param {Function} callback The callback to handle whichever event\n */\n function Debouncer(callback) {\n this.callback = callback;\n this.ticking = false;\n }\n Debouncer.prototype = {\n constructor: Debouncer,\n\n /**\n * dispatches the event to the supplied callback\n * @private\n */\n update: function update() {\n this.callback && this.callback();\n this.ticking = false;\n },\n\n /**\n * ensures events don't get stacked\n * @private\n */\n requestTick: function requestTick() {\n if (!this.ticking) {\n requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));\n this.ticking = true;\n }\n },\n\n /**\n * Attach this as the event listeners\n */\n handleEvent: function handleEvent() {\n this.requestTick();\n }\n };\n\n module.exports = Debouncer;\n }, {}], 16: [function (require, module, exports) {\n var isEqual = require('lodash.isequal'),\n forEach = require('lodash.foreach'),\n isEmpty = require('lodash.isempty'),\n cloneObject = require('lodash.clone'),\n extendObject = require('lodash.assign'),\n debouncer = require(\"./Debouncer\");\n\n function Scrllr(options) {\n options = extendObject(Scrllr.options, options);\n\n this.lastKnownScrollY = 0;\n this.initialised = false;\n this.onScrollCallback = options.onScrollCallback;\n }\n\n Scrllr.prototype = {\n constructor: Scrllr,\n\n init: function init() {\n this.debouncer = new debouncer(this.update.bind(this));\n\n // defer event registration to handle browser\n // potentially restoring previous scroll position\n setTimeout(this.attachEvent.bind(this), 100);\n\n return this;\n },\n\n attachEvent: function attachEvent() {\n if (!this.initialised) {\n this.lastKnownScrollY = this.getScrollY();\n this.initialised = true;\n\n window.addEventListener('scroll', this.debouncer, false);\n this.debouncer.handleEvent();\n }\n },\n\n getScrollY: function getScrollY() {\n return window.pageYOffset !== undefined ? window.pageYOffset : window.scrollTop !== undefined ? window.scrollTop : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n },\n\n update: function update() {\n var currentScrollY = this.getScrollY(),\n scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up';\n\n this.onScrollCallback(currentScrollY);\n this.lastKnownScrollY = currentScrollY;\n },\n\n destroy: function destroy() {\n this.initialised = false;\n window.removeEventListener('scroll', this.debouncer, false);\n }\n\n };\n\n Scrllr.options = {\n onScrollCallback: function onScrollCallback() {}\n };\n\n module.exports = Scrllr;\n }, { \"./Debouncer\": 15, \"lodash.assign\": 10, \"lodash.clone\": 11, \"lodash.foreach\": 12, \"lodash.isempty\": 13, \"lodash.isequal\": 14 }], 17: [function (require, module, exports) {\n var Scrllr = require(\"./Scrllr.js\"),\n Scale = require(\"d3-scale\"),\n Interpolator = require(\"d3-interpolate\"),\n Ease = require(\"d3-ease\");\n\n function ScrollOver(options) {\n options = extend(options, ScrollOver.options);\n this.PROPERTIES = ['translateX', 'translateY', 'opacity', 'scale'];\n this.keyframes = options.keyframes;\n }\n\n ScrollOver.prototype = {\n constructor: ScrollOver,\n\n init: function init() {\n var _this = this;\n\n new Scrllr({ onScrollCallback: update.bind(this) }).init();\n\n this.toAnimate = this.keyframes.filter(function (item) {\n return item.animate;\n });\n this.toReveal = this.keyframes.filter(function (item) {\n return item.reveal;\n });\n\n this.toAnimate.forEach(function (keyframe) {\n if (keyframe) keyframe.animate.forEach(function (property) {\n property.scale = _this.createScale(property.property, keyframe.domain, property.range);\n });\n });\n\n function update(scrollY) {\n var _this2 = this;\n\n this.toAnimate.forEach(function (keyframe) {\n if (keyframe) _this2.updateCSSValues(keyframe.element, _this2.calculatePropertyValues(keyframe.animate, scrollY));\n });\n\n this.toReveal.forEach(function (keyframe) {\n if (keyframe) {\n if (scrollY >= keyframe.reveal.when) _this2.updateCSSClass(keyframe.element, keyframe.reveal.className);\n }\n });\n }\n\n return this;\n },\n\n calculatePropertyValues: function calculatePropertyValues(animations, scrollY) {\n var _this3 = this;\n\n var CSSValues = new Object();\n\n this.PROPERTIES.forEach(function (propertyName) {\n CSSValues[propertyName] = _this3.getDefaultPropertyValue(propertyName);\n animations.forEach(function (animation) {\n if (animation.property == propertyName) CSSValues[propertyName] = _this3.scaleValue(animation.scale, scrollY);\n });\n });\n\n return CSSValues;\n },\n\n scaleValue: function scaleValue(scale, scrollY) {\n return scale(scrollY);\n },\n\n updateCSSValues: function updateCSSValues(element, CSS) {\n element.style.transform = 'translate3d(' + CSS.translateX + 'px, ' + CSS.translateY + 'px, 0) scale(' + CSS.scale + ')';\n element.style.opacity = CSS.opacity;\n\n return element;\n },\n\n updateCSSClass: function updateCSSClass(element, className) {\n element.classList ? element.classList.add(className) : element.className += ' ' + className;\n\n return element;\n },\n\n getDefaultPropertyValue: function getDefaultPropertyValue(propertyName) {\n switch (propertyName) {\n case 'translateX':\n return 0;\n case 'translateY':\n return 0;\n case 'scale':\n return 1;\n case 'rotate':\n return 0;\n case 'opacity':\n return 1;\n default:\n return null;\n }\n },\n\n createScale: function createScale(propertyName, domain, range) {\n switch (propertyName) {\n case 'translateX':\n case 'translateY':\n case 'scale':\n case 'opacity':\n return Scale.scaleLinear().domain(domain).range(range).interpolate(this.easeInterpolate(Ease.easeCubicOut)).clamp(true);\n default:\n return null;\n }\n },\n\n easeInterpolate: function easeInterpolate(ease) {\n return function (a, b) {\n var i = Interpolator.interpolate(a, b);\n return function (t) {\n return Math.round(i(ease(t)) * 100) / 100;\n };\n };\n }\n\n };\n\n ScrollOver.options = {\n keyframes: {}\n };\n\n /**\n * Helper function for extending objects\n */\n function extend(object /*, objectN ... */) {\n if (arguments.length <= 0) {\n throw new Error('Missing arguments in extend function');\n }\n\n var result = object || {},\n key,\n i;\n\n for (i = 1; i < arguments.length; i++) {\n var replacement = arguments[i] || {};\n\n for (key in replacement) {\n // Recurse into object except if the object is a DOM element\n if (_typeof(result[key]) === 'object' && !isDOMElement(result[key])) {\n result[key] = extend(result[key], replacement[key]);\n } else {\n result[key] = result[key] || replacement[key];\n }\n }\n }\n\n return result;\n }\n\n /**\n * Check if object is part of the DOM\n * @constructor\n * @param {Object} obj element to check\n */\n function isDOMElement(obj) {\n return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType);\n }\n\n module.exports = ScrollOver;\n }, { \"./Scrllr.js\": 16, \"d3-ease\": 4, \"d3-interpolate\": 6, \"d3-scale\": 7 }], 18: [function (require, module, exports) {\n // AnimateScroll.js\n // Sunmock Yang Nov. 2015\n\n function animateScroll(target, duration, easing, padding, align, onFinish) {\n padding = padding ? padding : 0;\n var docElem = document.documentElement; // to facilitate minification better\n var windowHeight = docElem.clientHeight;\n var maxScroll = 'scrollMaxY' in window ? window.scrollMaxY : docElem.scrollHeight - windowHeight;\n var currentY = window.pageYOffset;\n\n var targetY = currentY;\n var elementBounds = isNaN(target) ? target.getBoundingClientRect() : 0;\n\n if (align === \"center\") {\n targetY += isNaN(target) ? elementBounds.top + elementBounds.height / 2 : target;\n targetY -= windowHeight / 2;\n targetY -= padding;\n } else if (align === \"bottom\") {\n targetY += elementBounds.bottom || target;\n targetY -= windowHeight;\n targetY += padding;\n } else {\n // top, undefined\n targetY += elementBounds.top || target;\n targetY -= padding;\n }\n targetY = Math.max(Math.min(maxScroll, targetY), 0);\n\n var deltaY = targetY - currentY;\n\n var obj = {\n targetY: targetY,\n deltaY: deltaY,\n duration: duration ? duration : 0,\n easing: easing in animateScroll.Easing ? animateScroll.Easing[easing] : animateScroll.Easing.linear,\n onFinish: onFinish,\n startTime: Date.now(),\n lastY: currentY,\n step: animateScroll.step\n };\n\n window.requestAnimationFrame(obj.step.bind(obj));\n }\n\n // Taken from gre/easing.js\n // https://gist.github.com/gre/1650294\n animateScroll.Easing = {\n linear: function linear(t) {\n return t;\n },\n easeInQuad: function easeInQuad(t) {\n return t * t;\n },\n easeOutQuad: function easeOutQuad(t) {\n return t * (2 - t);\n },\n easeInOutQuad: function easeInOutQuad(t) {\n return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n },\n easeInCubic: function easeInCubic(t) {\n return t * t * t;\n },\n easeOutCubic: function easeOutCubic(t) {\n return --t * t * t + 1;\n },\n easeInOutCubic: function easeInOutCubic(t) {\n return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n },\n easeInQuart: function easeInQuart(t) {\n return t * t * t * t;\n },\n easeOutQuart: function easeOutQuart(t) {\n return 1 - --t * t * t * t;\n },\n easeInOutQuart: function easeInOutQuart(t) {\n return t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n },\n easeInQuint: function easeInQuint(t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function easeOutQuint(t) {\n return 1 + --t * t * t * t * t;\n },\n easeInOutQuint: function easeInOutQuint(t) {\n return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n }\n };\n\n animateScroll.step = function () {\n if (this.lastY !== window.pageYOffset && this.onFinish) {\n this.onFinish();\n return;\n }\n\n // Calculate how much time has passed\n var t = Math.min((Date.now() - this.startTime) / this.duration, 1);\n\n // Scroll window amount determined by easing\n var y = this.targetY - (1 - this.easing(t)) * this.deltaY;\n window.scrollTo(window.scrollX, y);\n\n // Continue animation as long as duration hasn't surpassed\n if (t !== 1) {\n this.lastY = window.pageYOffset;\n window.requestAnimationFrame(this.step.bind(this));\n } else {\n if (this.onFinish) this.onFinish();\n }\n };\n\n module.exports = animateScroll;\n }, {}], 19: [function (require, module, exports) {\n var ScrollOver = require(\"./lib/ScrollOver.js\");\n var animateScroll = require(\"./lib/animateScroll.js\");\n\n var body = document.querySelectorAll(\"body\")[0];\n var tagline = document.querySelectorAll(\".tagline\")[0];\n\n var iphone = document.querySelectorAll(\".phone-wrap--iphone\")[0],\n android = document.querySelectorAll(\".phone-wrap--android\")[0],\n features = document.querySelectorAll(\".features-wrap\")[0],\n slideTwo = document.querySelectorAll(\".slide--two\")[0],\n slideThree = document.querySelectorAll(\".slide--three\")[0];\n\n setTimeout(function () {\n return body.classList.add(\"shown\");\n }, 400);\n\n document.querySelectorAll(\".more-button\")[0].addEventListener('click', function (event) {\n animateScroll(slideTwo, 600, \"easeInOutCubic\", 0);\n event.preventDefault();\n });\n\n document.querySelectorAll(\".nav__item--features\")[0].addEventListener('click', function (event) {\n animateScroll(slideTwo, 600, \"easeInOutCubic\", 0);\n event.preventDefault();\n });\n\n document.querySelectorAll(\".nav__item--about\")[0].addEventListener('click', function (event) {\n animateScroll(slideThree, 600, \"easeInOutCubic\", 0);\n event.preventDefault();\n });\n\n document.querySelectorAll(\".button--scroll-top\")[0].addEventListener('click', function (event) {\n animateScroll(body, 1000, \"easeInOutCubic\", 0);\n event.preventDefault();\n });\n\n new ScrollOver({\n keyframes: [{\n element: iphone,\n domain: [0, 800],\n animate: [{\n property: \"translateY\",\n range: [0, 60]\n }]\n }, {\n element: android,\n domain: [0, 800],\n animate: [{\n property: \"translateY\",\n range: [0, 110]\n }]\n }, {\n element: features,\n domain: [200, 800],\n animate: [{\n property: \"translateY\",\n range: [0, -40]\n }]\n }, {\n element: slideTwo,\n reveal: {\n when: 700,\n className: \"slide--shown\"\n }\n\n }, {\n element: slideThree,\n reveal: {\n when: 1400,\n className: \"slide--shown\"\n }\n }]\n }).init();\n }, { \"./lib/ScrollOver.js\": 17, \"./lib/animateScroll.js\": 18 }] }, {}, [19]);"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/js/common.js b/src/js/common.js deleted file mode 100755 index 8473e8a..0000000 --- a/src/js/common.js +++ /dev/null @@ -1,139 +0,0 @@ -$(function() { - - //SVG Fallback - if(!Modernizr.svg) { - $("img[src*='svg']").attr("src", function() { - return $(this).attr("src").replace(".svg", ".png"); - }); - }; - - $("img, a").on("dragstart", function(event) { event.preventDefault(); }); - - $(document).ready(function(){ - - setTimeout(function() { - $(".status-text").addClass("shown"); - },400); - setTimeout(function() { - $(".status-email").addClass("shown"); - },500); - setTimeout(function() { - $(".phone-primary").addClass("shown"); - },600); - setTimeout(function() { - $(".phone-secondary").addClass("shown"); - },700); - setTimeout(function() { - $(".main-header").addClass("shown"); - },1000); - - // $(".email-button").on('click', function(){ - // $(".email").addClass("shaky"); - // setTimeout(function() { - // $(".email").removeClass("shaky"); - // },800); - // }); - - $(".mc-field-group input").on('focus', function() { - $(".email").addClass("focused"); - setTimeout(function() { - $(".email").removeClass("focused"); - }, 400); - }); - - $('.block').waypoint(function() { - $('.block-blue').addClass('shown'); - setTimeout(function() { - $(".block-purple").addClass("shown"); - },100); - setTimeout(function() { - $(".block-green").addClass("shown"); - },100); - setTimeout(function() { - $(".block-peach").addClass("shown"); - },200); - }, { offset: '50%' }); - - $('.block-white').waypoint(function() { - $('.block-white').addClass('shown'); - }, { offset: '100%' }); - - $('.tags').waypoint(function() { - $('.tag-status').addClass('shown'); - setTimeout(function() { - $(".tag-transaction").addClass("shown"); - },100); - setTimeout(function() { - $(".tag-name").addClass("shown"); - },200); - setTimeout(function() { - $(".tag-password").addClass("shown"); - },300); - setTimeout(function() { - $(".tag-location").addClass("shown"); - },400); - }, { offset: '90%' }); - - $('.block-square').waypoint(function() { - $('.block-square').addClass('shown'); - }, { offset: '90%' }); - - $('.gradient-text').waypoint(function() { - $('.gradient-text').addClass('shown'); - setTimeout(function() { - $(".gradient-email").addClass("shown"); - },100); - }, { offset: '90%' }); - - // Swiper - - var swiper1 = new Swiper('.swiper1', { - loop: true, - autoplay: 2000, - effect: 'fade', - spaceBetween: 30, - fade: { - crossFade: true - } - }); - var swiper2 = new Swiper('.swiper2', { - loop: true, - autoplay: 2000, - effect: 'slide', - nextButton: '.swiper-button-next', - prevButton: '.swiper-button-prev', - }); - - }); - - // Smooth scroll to top and input focus - - $(".gradient-button").click(function() { - $('html, body').animate({ - scrollTop: 0 - }, 1000); - setTimeout(function(){ - $('#maitre-field-email input').focus(); - $('.mc-field-group input').focus(); - },1000); - }); - var shareLinkInput = $("#shareLinkInput"); - - shareLinkInput.click(function(test) { - shareLinkInput.focus(); - shareLinkInput[0].setSelectionRange(0, shareLinkInput.val().length); - try { - succeeded = document.execCommand('copy'); - } catch (err) { - succeeded = false; - } - if (succeeded) { - var text = shareLinkInput.val(); - var copytext = 'Copied to clipboard'; - shareLinkInput.val(copytext); - setTimeout(function() { - shareLinkInput.val(text); - }, 500); - } - }); -}); diff --git a/src/js/lib/Debouncer.js b/src/js/lib/Debouncer.js new file mode 100644 index 0000000..a3eff7b --- /dev/null +++ b/src/js/lib/Debouncer.js @@ -0,0 +1,43 @@ +window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame; + +/** + * Handles debouncing of events via requestAnimationFrame + * @see http://www.html5rocks.com/en/tutorials/speed/animations/ + * @param {Function} callback The callback to handle whichever event + */ +function Debouncer (callback) { + this.callback = callback; + this.ticking = false; +} +Debouncer.prototype = { + constructor : Debouncer, + + /** + * dispatches the event to the supplied callback + * @private + */ + update : function() { + this.callback && this.callback(); + this.ticking = false; + }, + + /** + * ensures events don't get stacked + * @private + */ + requestTick : function() { + if(!this.ticking) { + requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this))); + this.ticking = true; + } + }, + + /** + * Attach this as the event listeners + */ + handleEvent : function() { + this.requestTick(); + } +}; + +module.exports = Debouncer diff --git a/src/js/lib/Scrllr.js b/src/js/lib/Scrllr.js new file mode 100644 index 0000000..d359f44 --- /dev/null +++ b/src/js/lib/Scrllr.js @@ -0,0 +1,66 @@ +let isEqual = require('lodash.isequal'), + forEach = require('lodash.foreach'), + isEmpty = require('lodash.isempty'), + cloneObject = require('lodash.clone'), + extendObject = require('lodash.assign'), + debouncer = require("./Debouncer") + +function Scrllr(options) { + options = extendObject(Scrllr.options, options) + + this.lastKnownScrollY = 0 + this.initialised = false + this.onScrollCallback = options.onScrollCallback +} + +Scrllr.prototype = { + constructor : Scrllr, + + init : function() { + this.debouncer = new debouncer(this.update.bind(this)) + + // defer event registration to handle browser + // potentially restoring previous scroll position + setTimeout(this.attachEvent.bind(this), 100) + + return this + }, + + attachEvent : function() { + if(!this.initialised) { + this.lastKnownScrollY = this.getScrollY() + this.initialised = true + + window.addEventListener('scroll', this.debouncer, false) + this.debouncer.handleEvent() + } + }, + + getScrollY : function() { + return (window.pageYOffset !== undefined) + ? window.pageYOffset + : (window.scrollTop !== undefined) + ? window.scrollTop + : (document.documentElement || document.body.parentNode || document.body).scrollTop + }, + + update : function() { + let currentScrollY = this.getScrollY(), + scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up' + + this.onScrollCallback(currentScrollY) + this.lastKnownScrollY = currentScrollY + }, + + destroy : function() { + this.initialised = false + window.removeEventListener('scroll', this.debouncer, false) + } + +} + +Scrllr.options = { + onScrollCallback: function(){} +} + +module.exports = Scrllr diff --git a/src/js/lib/ScrollOver.js b/src/js/lib/ScrollOver.js new file mode 100644 index 0000000..f5cdb5e --- /dev/null +++ b/src/js/lib/ScrollOver.js @@ -0,0 +1,153 @@ +let Scrllr = require("./Scrllr.js"), + Scale = require("d3-scale"), + Interpolator = require("d3-interpolate"), + Ease = require("d3-ease") + +function ScrollOver(options) { + options = extend(options, ScrollOver.options) + this.PROPERTIES = ['translateX', 'translateY', 'opacity', 'scale'] + this.keyframes = options.keyframes +} + +ScrollOver.prototype = { + constructor : ScrollOver, + + init : function() { + + new Scrllr({onScrollCallback:update.bind(this)}).init() + + this.toAnimate = this.keyframes.filter((item) => {return item.animate}) + this.toReveal = this.keyframes.filter((item) => {return item.reveal}) + + this.toAnimate.forEach((keyframe) => { + if(keyframe) keyframe.animate.forEach((property) => { property.scale = this.createScale(property.property, keyframe.domain, property.range) }) + }) + + function update(scrollY) { + this.toAnimate.forEach((keyframe) => { + if(keyframe) this.updateCSSValues(keyframe.element, this.calculatePropertyValues(keyframe.animate, scrollY)) + }) + + this.toReveal.forEach((keyframe) => { + if(keyframe) { + if(scrollY >= keyframe.reveal.when) this.updateCSSClass(keyframe.element, keyframe.reveal.className) + } + }) + } + + return this + }, + + calculatePropertyValues: function(animations, scrollY) { + let CSSValues = new Object() + + this.PROPERTIES.forEach((propertyName) => { + CSSValues[propertyName] = this.getDefaultPropertyValue(propertyName) + animations.forEach((animation) => { + if (animation.property == propertyName) CSSValues[propertyName] = this.scaleValue(animation.scale, scrollY) + }) + }) + + return CSSValues + }, + + scaleValue: function(scale, scrollY) { + return scale(scrollY) + }, + + updateCSSValues: function(element, CSS) { + element.style.transform = 'translate3d(' + CSS.translateX +'px, ' + CSS.translateY + 'px, 0) scale('+ CSS.scale +')' + element.style.opacity = CSS.opacity + + return element + }, + + updateCSSClass: function(element, className) { + (element.classList) ? element.classList.add(className) : element.className += ' ' + className + + return element + }, + + getDefaultPropertyValue: function(propertyName) { + switch (propertyName) { + case 'translateX': + return 0 + case 'translateY': + return 0 + case 'scale': + return 1 + case 'rotate': + return 0 + case 'opacity': + return 1 + default: + return null + } + }, + + createScale: function(propertyName, domain, range) { + switch (propertyName) { + case 'translateX': + case 'translateY': + case 'scale': + case 'opacity': + return Scale.scaleLinear().domain(domain).range(range).interpolate(this.easeInterpolate(Ease.easeCubicOut)).clamp(true) + default: + return null + } + }, + + easeInterpolate: function(ease) { + return function(a, b) { + var i = Interpolator.interpolate(a, b) + return function(t) { + return (Math.round(i(ease(t)) * 100) / 100) + } + } + } + +} + +ScrollOver.options = { + keyframes : {} +} + +/** + * Helper function for extending objects + */ +function extend (object /*, objectN ... */) { + if(arguments.length <= 0) { + throw new Error('Missing arguments in extend function'); + } + + var result = object || {}, + key, + i; + + for (i = 1; i < arguments.length; i++) { + var replacement = arguments[i] || {}; + + for (key in replacement) { + // Recurse into object except if the object is a DOM element + if(typeof result[key] === 'object' && ! isDOMElement(result[key])) { + result[key] = extend(result[key], replacement[key]); + } + else { + result[key] = result[key] || replacement[key]; + } + } + } + + return result; +} + +/** + * Check if object is part of the DOM + * @constructor + * @param {Object} obj element to check + */ +function isDOMElement(obj) { + return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType); +} + +module.exports = ScrollOver diff --git a/src/js/lib/animatescroll.js b/src/js/lib/animatescroll.js new file mode 100644 index 0000000..0e251f0 --- /dev/null +++ b/src/js/lib/animatescroll.js @@ -0,0 +1,86 @@ +// AnimateScroll.js +// Sunmock Yang Nov. 2015 + +function animateScroll(target, duration, easing, padding, align, onFinish) { + padding = padding ? padding : 0; + var docElem = document.documentElement; // to facilitate minification better + var windowHeight = docElem.clientHeight; + var maxScroll = ( 'scrollMaxY' in window ) ? window.scrollMaxY : (docElem.scrollHeight - windowHeight); + var currentY = window.pageYOffset; + + var targetY = currentY; + var elementBounds = isNaN(target) ? target.getBoundingClientRect() : 0; + + if (align === "center") { + targetY += isNaN(target) ? (elementBounds.top + elementBounds.height/2) : target; + targetY -= windowHeight / 2; + targetY -= padding + } + else if (align === "bottom") { + targetY += elementBounds.bottom || target; + targetY -= windowHeight; + targetY += padding + } + else { // top, undefined + targetY += elementBounds.top || target; + targetY -= padding + } + targetY = Math.max(Math.min(maxScroll, targetY), 0); + + var deltaY = targetY - currentY; + + var obj = { + targetY: targetY, + deltaY: deltaY, + duration: (duration) ? duration : 0, + easing: (easing in animateScroll.Easing) ? animateScroll.Easing[easing] : animateScroll.Easing.linear, + onFinish: onFinish, + startTime: Date.now(), + lastY: currentY, + step: animateScroll.step, + }; + + window.requestAnimationFrame(obj.step.bind(obj)); +} + +// Taken from gre/easing.js +// https://gist.github.com/gre/1650294 +animateScroll.Easing = { + linear: function (t) { return t }, + easeInQuad: function (t) { return t*t }, + easeOutQuad: function (t) { return t*(2-t) }, + easeInOutQuad: function (t) { return t<.5 ? 2*t*t : -1+(4-2*t)*t }, + easeInCubic: function (t) { return t*t*t }, + easeOutCubic: function (t) { return (--t)*t*t+1 }, + easeInOutCubic: function (t) { return t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1 }, + easeInQuart: function (t) { return t*t*t*t }, + easeOutQuart: function (t) { return 1-(--t)*t*t*t }, + easeInOutQuart: function (t) { return t<.5 ? 8*t*t*t*t : 1-8*(--t)*t*t*t }, + easeInQuint: function (t) { return t*t*t*t*t }, + easeOutQuint: function (t) { return 1+(--t)*t*t*t*t }, + easeInOutQuint: function (t) { return t<.5 ? 16*t*t*t*t*t : 1+16*(--t)*t*t*t*t } +}; + +animateScroll.step = function () { + if (this.lastY !== window.pageYOffset && this.onFinish) { + this.onFinish(); + return; + } + + // Calculate how much time has passed + var t = Math.min((Date.now() - this.startTime) / this.duration, 1); + + // Scroll window amount determined by easing + var y = this.targetY - ((1 - this.easing(t)) * (this.deltaY)); + window.scrollTo(window.scrollX, y); + + // Continue animation as long as duration hasn't surpassed + if (t !== 1) { + this.lastY = window.pageYOffset; + window.requestAnimationFrame(this.step.bind(this)); + } else { + if (this.onFinish) this.onFinish(); + } +} + +module.exports = animateScroll diff --git a/src/js/libs.min.js b/src/js/libs.min.js deleted file mode 100755 index f241ea7..0000000 --- a/src/js/libs.min.js +++ /dev/null @@ -1,33 +0,0 @@ -/*! jQuery v2.2.2 | (c) jQuery Foundation | 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=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.2",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.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()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;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,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=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)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(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 oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.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===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!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 fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.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=fa.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=fa.selectors={cacheLength:50,createPseudo:ha,match:W,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(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===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]||fa.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]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.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(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").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,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).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 Y.test(a.nodeName)},input:function(a){return X.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:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(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,k=[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(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(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 ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(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 va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(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 va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.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(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.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(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; -}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!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&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("